Formulier validatie: fout na fout wordt weergegeven ipv allemaal in een keer
Tbv formulier validatie gebruik ik een array om alle fouten daarin op te slaan en om ze later weer te geven.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$errors = [];
// Controleer de voornaam:
$voornaam= trim($_POST['voornaam']);
if (empty($voornaam)) {
array_push($errors,"Voornaam mag niet leeg zijn<br /");
}
$errors = [];
// Controleer de voornaam:
$voornaam= trim($_POST['voornaam']);
if (empty($voornaam)) {
array_push($errors,"Voornaam mag niet leeg zijn<br /");
}
Om te controleren of het mailadres reeds bestaat in DB gebruik ik, want overigens niet werkt en ik kom er niet uit waarom niet..
Als foutmelding krijg ik:
An error occurred in script '/register.php' on line 38: mysqli_num_rows() expects parameter 1 to be mysqli_result, bool given
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
// Controleer of het mailadres al bestaat
require('Inc/db-connection.php');
$checkingmail = mysqli_query($dbc, "SELECT * from behandelaars where Mailadres= '$mailadres'");
if(mysqli_num_rows($checkingmail) > 0)
{
$errors[]="Het mailadres is al in gebruik";
}
require('Inc/db-connection.php');
$checkingmail = mysqli_query($dbc, "SELECT * from behandelaars where Mailadres= '$mailadres'");
if(mysqli_num_rows($checkingmail) > 0)
{
$errors[]="Het mailadres is al in gebruik";
}
Aan het einde wil ik alle fouten uit de array halen en hiervoor gebruik ik de volgende code
Code (php)
1
2
2
foreach($errors as $error); {
echo "Helaas, de volgende foutmeldingen zijn opgetreden!<br />" . $error . "<br />";
echo "Helaas, de volgende foutmeldingen zijn opgetreden!<br />" . $error . "<br />";
Wanneer ik alle velden leeg laat en ik klik op verzenden, dan wordt de melding van de laatste inputfield weergegeven dat het niet leeg mag zijn en daarna ene laatste totdat het helemaal de eerste input field heeft gehad.
Dit vind ik vreemd en het liefste wil ik dat alle foutmeldingen direct worden weergegeven en niet eentje voor eentje.
Ik vraag mij af of een array de juiste methode hiervoor is..
Alvast bedankt voor het meedenken.
Zorg eens voor goede foutafhandeling op je queries. Blijkbaar loopt $checkingmail ergens op fout.
Foutmelding: An error occurred in script '/register.php' on line 38: mysqli_num_rows() expects parameter 1 to be mysqli_result, bool given heb ik nu opgelost door volgende code:
Code (php)
1
$checkingmail = mysqli_query($dbc, "SELECT * from Behandelaars where Mailadres= '$mailadres'") or die(mysqli_error($dbc));
Waar ik nu tegen aanloop is dat de foutmeldingen van formuliervalidatie eentje voor eentje worden weergegeven ipv allemaal in een keer.
In welke richting moet ik het opzoeken.
Ik raad wel aan om de punt-komma bij je foreach weg te halen.
Verder vind ik die() erg rigoureus. Dat kan vriendelijker... ;-)
Gewijzigd op 18/01/2021 01:11:47 door - Ariën -
1.) $_POST['voornaam'] is niet NULL
2.) $dbc bevat een resource voor een MySQL of MariaDB database connectie
3.) $mailadres bevat een mailadres dat niet ge-escaped hoeft te worden
De laatste aanname is de meest waarschijnlijke oorzaak dat mysqli_query() boolean FALSE terug geeft.
Mocht je in PHP code willen schrijven die ook veilig is, helpt het om je in te lezen in queries met parameters.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
require 'Inc/db-connection.php';
if ('POST' === $_SERVER['REQUEST_METHOD']) {
$errors = [];
$voornaam = trim($_POST['voornaam']);
$mailadres = trim($_POST['mailadres']);
// Dit moet echt op een andere manier! Zie de post van Ad Fundum
$checkingmail = mysqli_query($dbc, "SELECT * from behandelaars where Mailadres= '$mailadres'");
if (empty($voornaam)) {
array_push($errors, "Voornaam mag niet leeg zijn");
}
if (mysqli_num_rows($checkingmail) > 0) {
array_push($errors, "Het mailadres is al in gebruik");
}
if ( ! empty($errors)) {
echo "Helaas, de volgende foutmeldingen zijn opgetreden:";
foreach ($errors as $error) {
echo $error . "<br />";
}
}
}
?>
require 'Inc/db-connection.php';
if ('POST' === $_SERVER['REQUEST_METHOD']) {
$errors = [];
$voornaam = trim($_POST['voornaam']);
$mailadres = trim($_POST['mailadres']);
// Dit moet echt op een andere manier! Zie de post van Ad Fundum
$checkingmail = mysqli_query($dbc, "SELECT * from behandelaars where Mailadres= '$mailadres'");
if (empty($voornaam)) {
array_push($errors, "Voornaam mag niet leeg zijn");
}
if (mysqli_num_rows($checkingmail) > 0) {
array_push($errors, "Het mailadres is al in gebruik");
}
if ( ! empty($errors)) {
echo "Helaas, de volgende foutmeldingen zijn opgetreden:";
foreach ($errors as $error) {
echo $error . "<br />";
}
}
}
?>
Gewijzigd op 19/01/2021 18:56:23 door Jan Koehoorn
Allen, bedankt voor het meedenken en ik gebruik niet meer arrays voor het opslaan van errors.