Na het verzenden van formulier krijg ik pas de melding:on line 42: Undefined variable: vnerror
Nadat het formulier is verzonden, info is opgeslagen in de DB krijg ik de melding dat bepaalde error-variabel niet bestaat, raar toch?
Onderstaande code is van het formulier.
Btw; ik weet dat het niet veilig is en dit is voor mij versie 1!
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?php
include('Inc/config.inc.php');
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Controleer de voornaam:
$voornaam= trim($_POST['voornaam']);
if (empty($voornaam)) {
$vnerror = "Voornaam mag niet leeg zijn";
}
// Controleer de achternaam:
$achternaam= trim($_POST['achternaam']);
if (empty($achternaam)) {
$anerror = "Achternaam mag niet leeg zijn";
}
// Controleer de bedrijfsnaam:
$bedrijfsnaam = trim($_POST['bedrijfsnaam']);
if (empty($bedrijfsnaam)) {
$bnerror = "Bedrijfsnaam mag niet leeg zijn";
}
// Controleer het mailadres:
$mailadres = trim($_POST['mailadres']);
if (empty($mailadres)) {
$merror = "Mailadres mag niet leeg zijn";
}
// Controleer het wachtwoord:
$wachtwoord = trim($_POST['wachtwoord']);
if (empty($wachtwoord)) {
$werror ="Wachtwoord mag niet leeg zijn";
}
// Controleer de functie:
$functie = trim($_POST['functie']);
if (empty($functie)) {
$ferror = "Functie mag niet leeg zijn";
}
// Controleer of het mailadres al bestaat
require('Inc/db-connection.php');
$checkingmail = mysqli_query($dbc, "SELECT * from Behandelaars where Mailadres= '$mailadres'") or die(mysqli_error($dbc));
if(mysqli_num_rows($checkingmail) > 0) {
echo "Het mailadres is al in gebruik";
} else {
if (empty($vnerror && $anerror && $bnerror && $merror && $werror && $ferror)) {
$hashed_passcode = password_hash($wachtwoord, PASSWORD_DEFAULT);
$query = "INSERT INTO Behandelaars (Voornaam, Achternaam, Bedrijfsnaam , Mailadres , Wachtwoord, Functie, DatumActief, RegistratieDatum )";
$query.= "VALUES (?, ?,?, ?, ?, ?, NOW(), NOW())";
$q = mysqli_stmt_init($dbc);
mysqli_stmt_prepare($q,$query);
mysqli_stmt_bind_param($q, 'ssssss', $voornaam, $achternaam, $bedrijfsnaam, $mailadres, $hashed_passcode,$functie);
mysqli_stmt_execute($q);
if (mysqli_stmt_affected_rows($q) == 1){
header ("Location: index.php");
exit();
} else {
echo "De computer heeft het druk en probeer het later nog eens!";
}
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="Inc/main.css">
<title>Registreer pagina</title>
</head>
<body>
<div class="container">
<div class="regform">
<form action="register.php" method="POST">
<fieldset><legend>Registreer formulier</legend>
<label for="Voornaam">Voornaam</label><br />
<input type="text" id="voornaam" name="voornaam" value="<?php if (isset($_POST['voornaam']))echo htmlspecialchars($_POST['voornaam'], ENT_QUOTES); ?>" ><?php if (isset($vnerror)) { echo $vnerror; } ?><br />
<label for="achternaam">Achternaam</label><br />
<input type="text" id="achternaam" name="achternaam" value="<?php if (isset($_POST['achternaam']))echo htmlspecialchars($_POST['achternaam'], ENT_QUOTES); ?>" ><?php if (isset($anerror)) { echo $anerror; } ?><br />
<label for="bedrijfsnaam">Bedrijfsnaam</label><br />
<input type="text" id="bedrijfsnaam" name="bedrijfsnaam" value="<?php if (isset($_POST['bedrijfsnaam']))echo htmlspecialchars($_POST['bedrijfsnaam'], ENT_QUOTES); ?>" ><?php if (isset($bnerror)) { echo $bnerror; } ?><br />
<label for="Mailadres">Mailadres</label><br />
<input type="text" id="mailadres" name="mailadres" value="<?php if (isset($_POST['mailadres']))echo htmlspecialchars($_POST['mailadres'], ENT_QUOTES); ?>" ><?php if (isset($merror)) { echo $merror; } ?><br />
<label for="wachtwoord">Wachtwoord</label><br />
<input type="password" id="wachtwoord" name="wachtwoord" value="<?php if (isset($_POST['wachtwoord']))echo htmlspecialchars($_POST['wachtwoord'], ENT_QUOTES); ?>" ><?php if (isset($werror)) { echo $werror; } ?><br />
<label for="functie">Functie</label><br />
<input type="text" id="functie" name="functie" value="<?php if (isset($_POST['functie']))echo htmlspecialchars($_POST['functie'], ENT_QUOTES); ?>" ><?php if (isset($ferror)) { echo $ferror; } ?><br />
<input type="submit" value="Verzenden">
<p>Al een geregistreerd account?<a href="login.php">Login</a></p>
</fieldset>
</form>
</div>
<div class="regformplaatje"></div>
</div>
</body>
</html>
include('Inc/config.inc.php');
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Controleer de voornaam:
$voornaam= trim($_POST['voornaam']);
if (empty($voornaam)) {
$vnerror = "Voornaam mag niet leeg zijn";
}
// Controleer de achternaam:
$achternaam= trim($_POST['achternaam']);
if (empty($achternaam)) {
$anerror = "Achternaam mag niet leeg zijn";
}
// Controleer de bedrijfsnaam:
$bedrijfsnaam = trim($_POST['bedrijfsnaam']);
if (empty($bedrijfsnaam)) {
$bnerror = "Bedrijfsnaam mag niet leeg zijn";
}
// Controleer het mailadres:
$mailadres = trim($_POST['mailadres']);
if (empty($mailadres)) {
$merror = "Mailadres mag niet leeg zijn";
}
// Controleer het wachtwoord:
$wachtwoord = trim($_POST['wachtwoord']);
if (empty($wachtwoord)) {
$werror ="Wachtwoord mag niet leeg zijn";
}
// Controleer de functie:
$functie = trim($_POST['functie']);
if (empty($functie)) {
$ferror = "Functie mag niet leeg zijn";
}
// Controleer of het mailadres al bestaat
require('Inc/db-connection.php');
$checkingmail = mysqli_query($dbc, "SELECT * from Behandelaars where Mailadres= '$mailadres'") or die(mysqli_error($dbc));
if(mysqli_num_rows($checkingmail) > 0) {
echo "Het mailadres is al in gebruik";
} else {
if (empty($vnerror && $anerror && $bnerror && $merror && $werror && $ferror)) {
$hashed_passcode = password_hash($wachtwoord, PASSWORD_DEFAULT);
$query = "INSERT INTO Behandelaars (Voornaam, Achternaam, Bedrijfsnaam , Mailadres , Wachtwoord, Functie, DatumActief, RegistratieDatum )";
$query.= "VALUES (?, ?,?, ?, ?, ?, NOW(), NOW())";
$q = mysqli_stmt_init($dbc);
mysqli_stmt_prepare($q,$query);
mysqli_stmt_bind_param($q, 'ssssss', $voornaam, $achternaam, $bedrijfsnaam, $mailadres, $hashed_passcode,$functie);
mysqli_stmt_execute($q);
if (mysqli_stmt_affected_rows($q) == 1){
header ("Location: index.php");
exit();
} else {
echo "De computer heeft het druk en probeer het later nog eens!";
}
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="Inc/main.css">
<title>Registreer pagina</title>
</head>
<body>
<div class="container">
<div class="regform">
<form action="register.php" method="POST">
<fieldset><legend>Registreer formulier</legend>
<label for="Voornaam">Voornaam</label><br />
<input type="text" id="voornaam" name="voornaam" value="<?php if (isset($_POST['voornaam']))echo htmlspecialchars($_POST['voornaam'], ENT_QUOTES); ?>" ><?php if (isset($vnerror)) { echo $vnerror; } ?><br />
<label for="achternaam">Achternaam</label><br />
<input type="text" id="achternaam" name="achternaam" value="<?php if (isset($_POST['achternaam']))echo htmlspecialchars($_POST['achternaam'], ENT_QUOTES); ?>" ><?php if (isset($anerror)) { echo $anerror; } ?><br />
<label for="bedrijfsnaam">Bedrijfsnaam</label><br />
<input type="text" id="bedrijfsnaam" name="bedrijfsnaam" value="<?php if (isset($_POST['bedrijfsnaam']))echo htmlspecialchars($_POST['bedrijfsnaam'], ENT_QUOTES); ?>" ><?php if (isset($bnerror)) { echo $bnerror; } ?><br />
<label for="Mailadres">Mailadres</label><br />
<input type="text" id="mailadres" name="mailadres" value="<?php if (isset($_POST['mailadres']))echo htmlspecialchars($_POST['mailadres'], ENT_QUOTES); ?>" ><?php if (isset($merror)) { echo $merror; } ?><br />
<label for="wachtwoord">Wachtwoord</label><br />
<input type="password" id="wachtwoord" name="wachtwoord" value="<?php if (isset($_POST['wachtwoord']))echo htmlspecialchars($_POST['wachtwoord'], ENT_QUOTES); ?>" ><?php if (isset($werror)) { echo $werror; } ?><br />
<label for="functie">Functie</label><br />
<input type="text" id="functie" name="functie" value="<?php if (isset($_POST['functie']))echo htmlspecialchars($_POST['functie'], ENT_QUOTES); ?>" ><?php if (isset($ferror)) { echo $ferror; } ?><br />
<input type="submit" value="Verzenden">
<p>Al een geregistreerd account?<a href="login.php">Login</a></p>
</fieldset>
</form>
</div>
<div class="regformplaatje"></div>
</div>
</body>
</html>
Zodra ik klik op verzenden, dan krijg ik de melding dat het mailadres in gebruik is, terwijl ik nog niets heb ingevuld en ook dat input velden leeg zijn, maar dit hoort ook zo.
Het tweede fout:
An error occurred in script 'nergiz_nl/register.php' on line 42: Undefined variable: vnerror
empty .
Vergelijk liever met een lege string, in combinatie met trim() tegen spatie-liefhebbers.
Verder lijkt het mij zinvoller om de errors in een array op te slaan. Dan kan je ze ook gelijk makkelijk doorlopen aan het eind, en hoef je ook niet voor elke error een aparte variabele aan te maken.
Mijn advies: Gebruik geen empty(), omdat die meer doorlaat dan je denkt. Zie ook: Vergelijk liever met een lege string, in combinatie met trim() tegen spatie-liefhebbers.
Verder lijkt het mij zinvoller om de errors in een array op te slaan. Dan kan je ze ook gelijk makkelijk doorlopen aan het eind, en hoef je ook niet voor elke error een aparte variabele aan te maken.
Gewijzigd op 26/01/2021 22:32:53 door - Ariën -
via && moeten eerst de variabelen gecombineerd worden en dan heb je al een foutmelding voordat de functie controleerd.
Jan
Als $mailadres nu leeg is, vind je in elk geval alle records zonder mailadres.
Misschien is het trouwens ook wel leuk om te kijken of $mailadres iets bevat dat op een mailadres lijkt?
Dat vangt ook af dat iemand een ' in het "emailadres" plaatst en zo je query aanpast. (sql-injectie)
Want waarom gebruik je bij die query niet net als de insert-query een prepared statement?
Toevoeging op 27/01/2021 11:19:32:
toevoeging: filter_sanitize_email is trouwens niet voldoende voor sql-injectie: ik gebruik (omdat het kan) ook ergens een mailadres ivo'[email protected] en dat werkt)
dus een mailadres mág een ' bevatten
Wat voor mensen als "in 't Veld" ook wel fijn is.
Jan R op 27/01/2021 10:27:19:
Ik denk zelf dat meerdere variabelen in empty gescheiden moeten zijn met komma. Niet met &&.
Aan empty() kun je überhaupt maar één variabele opgeven. Het zou dan iets moeten worden als:
Code (php)
Maar eigenlijk gaat mijn voorkeur ook uit naar het idee van Ariën. Dus ruwweg:
Code (php)
Gewijzigd op 28/01/2021 14:11:28 door Willem vp
Inmiddels heb ik het bestand aangepast en ik gebruik nu een array voor het opslaan van foutmeldingen en dat werkt perfect voor mij. Tevens krijg ik die foutmeldingen niet meer.