Onderstaande code gebruik ik voor het login proces en na het invullen van de juiste mailadres en ww, verschijnt geen error maar ook geen redirect naar index pagina.
Waar moet ik de fout gaan zoeken?


<?php
    include('Inc/config.inc.php');
    if($_SERVER['REQUEST_METHOD'] == 'POST'){
        require('Inc/db-connection.php');
        $errors=array();

        // Controleer het mailadres:
        $mailadres = filter_var($_POST['mailadres'], FILTER_VALIDATE_EMAIL);
        if ((empty($mailadres)) || (!filter_var($mailadres, FILTER_VALIDATE_EMAIL))) {
            $errors['$merror'] = "Jij bent vergeten your mailadres in te typen of het maildres formaat is niet correct";
        }
        // Controleer het wachtwoord:
        $wachtwoord = filter_var($_POST['wachtwoord'], FILTER_SANITIZE_STRING);
        if (empty($wachtwoord)) {
            $errors['$werror'] ="Wachtwoord mag niet leeg zijn";
            }	
            
            if (count($errors) == 0) {
                // Retrieve the user_id, psword, first_name and user_level for that// email/password combination
                $query = "SELECT BehandelaarID, Wachtwoord, Voornaam, Achternaam, GebruikerLevel FROM Behandelaars WHERE Mailadres=?";
                $q= mysqli_stmt_init($dbc);
                
                if (!mysqli_stmt_prepare($q, $query)) {
                    echo "SQL statement failed";
                } else { 
                 // bind $id to SQL Statement
                mysqli_stmt_bind_param($q,"s", $mailadres);
                //execute query
                mysqli_stmt_execute($q);
                $result = mysqli_stmt_get_result($q);
                $row = mysqli_fetch_array($result, MYSQL_NUM);
                if (mysqli_num_rows($result) == 1){
                    //als er een DB record is gevonden en matcht met de gebruikesinput, doe dan het volgende
                    //start de sessie, haal de record de uit de DB en zet ze in een array
                        if (password_verify($wachtwoord, $row[1])){
                            session_start();
                            //verzeker dat gebruikerslevel een integer is.
                            $_SESSION['GebruikerLevel'] = (int) $row[3];
                            // Use a ternary operation to set the URL
                            $url  = ($_SESSION['GebruikerLevel'] === 1 ) ? "index.php" : "admin.php";
                            header('Location: ' . $url);

                        } else { // geen wachtwoord match gevonden
                            $errors['$gwnmatch']="Jouw wachtwoord klopt niet";
                        }


                } else { // geen mail match gevonden
                    $errors['$gmmatch'] = "Er zijn geen records gevonden met dit mailadres";
                }
                
            } 
        }
    }

?>
<!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>Logina pagina</title>
    
</head>
<body>
<p>Login pagina</p>
<?php
if (isset($errors['$gwnmatch'])) {
    echo $errors['$gwnmatch'];
}
if (isset($errors['$gmmatch'])) {
    echo $errors['$gmmatch'];
}

?>

<form ation="login.php" method="POST">
<label for="mailadres">E-mailadres:</label><br>	
<input type="text" id="mailadres" name="mailadres" required><span class="regp"><?php if (isset($errors['$merror'])) { echo $errors['$merror']; } ?></span></br>
<label for="wachtwoord">Wachtwoord:</label><br>	
<input type="password" id="wachtwoord" name="wachtwoord" required><span class="regp"><?php if (isset($errors['$werror'])) { echo $errors['$werror']; } ?></span></br>
<input type="submit" value="Inloggen">
<p>Nog geen geregistreerd account?<a href="register.php">Registreer</a></p>
</form>
</body>
</html>
Haal de single-quotes eens weg:
$errors[$merror]

Maar waarom gebruik je variabelen in je index?
Een error is toch een error?
Op regel 78 ontbreekt een deel van de action:

<form ation="login.php" method="POST">
- Ariën - op 01/02/2021 00:01:07

Haal de single-quotes eens weg:
$errors[$merror]

Maar waarom gebruik je variabelen in je index?
Een error is toch een error?

Die single-quotes gebruik ik ook bij mijn andere formulier en werkt daar prima. Ik zie dus geen relatie tot dat het loginproces niet werkt om eerlijk te zijn. Verder gebruik ik een error['vnerror'] als een identifier om naast voornaam input de foutmelding weer te geven



[size=xsmall]Toevoeging op 01/02/2021 14:47:32:[/size]

Adoptive Solution op 01/02/2021 12:32:59

Op regel 78 ontbreekt een deel van de action:

<form ation="login.php" method="POST">



Welk deel ontbreek er dan? Dezelfde code gebruik ik bijv op registratiepagina werkt daar prima...
Die single-quotes horen er niet als je in de index een variabele gebruikt. Anders zal je een warning krijgen.

Verder staat er in je code 'ation' in plaats van 'action'.
- Ariën - op 01/02/2021 14:54:04

Die single-quotes horen er niet als je in de index een variabele gebruikt. Anders zal je een warning krijgen.

Verder staat er in je code 'ation' in plaats van 'action'.

Oh dat wist ik niet. Tnx!
Die Ation heb ik over het hoofd gezien.
Ik heb het nu aangepast en na het invullen van de juiste gegevens klik op verzenden en ik krijg een wit loginpagina en geen redirect en geen foutmelding helaas...
Enig idee waar ik de fout moet gaan zoeken?

Een hele hagel-witte pagina? Of een normale pagina met lege inhoud?

In het eerste geval raad ik aan om je error_log erbij te pakken
In het tweede geval raad ik aan om defensief te werken en elk statement met een true of false af te handelen. Blijkbaar evalueert je statement in een true of false waarbij je één van beiden niet controleert. En dan gebeurt er in die statement niks waarna je script weer verder gaat. Het neergooien van een aantal echo's helpt hierbij om te zien welk pad er wordt doorlopen.
- Ariën - op 01/02/2021 00:01:07

Haal de single-quotes eens weg:
$errors[$merror]

Maar waarom gebruik je variabelen in je index?
Een error is toch een error?

Ik vermoed dat niet de single quotes wegmoeten, maar het $-teken. Dat hoort waarschijnlijk geen variabele te zijn. Dus: $errors['merror']
- Ariën - op 01/02/2021 15:14:21

Een hele hagel-witte pagina? Of een normale pagina met lege inhoud?

In het eerste geval raad ik aan om je error_log erbij te pakken
In het tweede geval raad ik aan om defensief te werken en elk statement met een true of false af te handelen. Blijkbaar evalueert je statement in een true of false waarbij je één van beiden niet controleert. En dan gebeurt er in die statement niks waarna je script weer verder gaat. Het neergooien van een aantal echo's helpt hierbij om te zien welk pad er wordt doorlopen.

Ik krijg een hagel-witte pagina en helemaal geen errors zowel niet in mijn eigen error_handler als die van mijn hosting.
Ik ga nogmaals kijken naar de logica in het pagina..


[size=xsmall]Toevoeging op 01/02/2021 22:38:59:[/size]

Ozzie PHP op 01/02/2021 16:07:45

[quote="- Ariën - op 01/02/2021 00:01:07"]
Haal de single-quotes eens weg:
$errors[$merror]

Maar waarom gebruik je variabelen in je index?
Een error is toch een error?

Ik vermoed dat niet de single quotes wegmoeten, maar het $-teken. Dat hoort waarschijnlijk geen variabele te zijn. Dus: $errors['merror']

[/quote]
Het vreemde is dat ik $errors['$merror'] gebruik bij een andere pagina, nl het registratie pagina en daar werkt het prima en op dit pagina met een $ of zonder krijg ik een witte pagina en geen errors helaas.

Waar komt $merror vandaan?
- Ariën - op 01/02/2021 22:43:02

Waar komt $merror vandaan?

Nu ik nogmaals over na denk heb je eigenlijk wel gelijk in, want deze variabel is nergens aangemaakt en daarom heb ik het verwijderd.
Dus heb ik nu staan:

$errors['merror']

Reageren