Na het verzenden van formulier krijg ik pas de melding:on line 42: Undefined variable: vnerror

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mohamed nvt

Mohamed nvt

26/01/2021 22:16:16
Quote Anchor link
Hallo allemaal,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>
 
PHP hulp

PHP hulp

19/03/2024 11:15:01
 
- Ariën  -
Beheerder

- Ariën -

26/01/2021 22:18:02
Quote Anchor link
Wat is de exacte error?

En waarom sla je de errors niet op in een array?
Gewijzigd op 26/01/2021 22:19:13 door - Ariën -
 
Mohamed nvt

Mohamed nvt

26/01/2021 22:21:07
Quote Anchor link
Eigenlijk zijn het twee foutmelding.
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
 
- Ariën  -
Beheerder

- Ariën -

26/01/2021 22:26:59
Quote Anchor link
Mijn advies: Gebruik geen empty(), omdat die meer doorlaat dan je denkt. Zie ook: 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.
Gewijzigd op 26/01/2021 22:32:53 door - Ariën -
 
Jan R

Jan R

27/01/2021 10:27:19
Quote Anchor link
Ik denk zelf dat meerdere variabelen in empty gescheiden moeten zijn met komma. Niet met &&.
via && moeten eerst de variabelen gecombineerd worden en dan heb je al een foutmelding voordat de functie controleerd.

Jan
 
Ivo P

Ivo P

27/01/2021 11:17:02
Quote Anchor link
ik zou voor je op regel 37 controleert of het mailadres al gebruikt wordt, eerst even kijken of $mailadres niet leeg is.

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?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $mailadres = filter_input(INPUT_POST, 'mailadres', FILTER_SANITIZE_EMAIL); ?>


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.
 
Willem vp

Willem vp

28/01/2021 14:09:13
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if (empty($vnerror) && empty($anerror) && empty($bnerror) && empty($merror) && empty($werror) && empty($ferror)) {
?>


Maar eigenlijk gaat mijn voorkeur ook uit naar het idee van Ariën. Dus ruwweg:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$errors
= array();

if (empty($voornaam)) {
    $errors['vnerror'] = "Voornaam mag niet leeg zijn";
}


if (empty($achternaam)) {
    $errors['anerror'] = "Achternaam mag niet leeg zijn";
}


// etc

if (count($errors) == 0) {
   // Doe iets
}
?>
Gewijzigd op 28/01/2021 14:11:28 door Willem vp
 
Mohamed nvt

Mohamed nvt

31/01/2021 23:20:16
Quote Anchor link
Bedankt allemaal voor het meedenken.
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.
 
- Ariën  -
Beheerder

- Ariën -

01/02/2021 00:02:41
Quote Anchor link
Dit is overigens best een rare melding?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo "De computer heeft het druk en probeer het later nog eens!";
?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.