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>
Dat zou beter kunnen.
Dan lijkt het wel raadzaam om in die array die errors te plaatsen.
Een voordeel: Je kan ze makkelijk vertalen.
In de errors_log van mijn hostingbedrif zie ik de volgende foutmelding:
AH01215: Stack trace:: /nergiz_nl/login.php
AH01215: #0 {main}: /nergiz_nl/login.php
AH01215: thrown in /nergiz_nl/login.php on line 30: /nergiz_nl/login.php
op lijn 30 heb ik staan:

$result = mysqli_stmt_get_result($q);

van regel 21 t/m 31 heb ik staan de gehele prepared statement

$q= mysqli_stmt_init($dbc);
                
                if (!mysqli_stmt_prepare($q, $query)) {
                    echo "SQL statement failed";
                } else { 
                 // bind $mailadres 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);

Ik heb even op het net gezocht en ik denk misschien zit er een fout in de versie van PHP van mijn hostingbedrijf. Ik gebruik daar 7.4 aanbevolen.
Wat denken jullie?
>> In de errors_log van mijn hostingbedrif zie ik de volgende foutmelding:

Staat er niet meer bij dan dat? Ik mis de foutmelding zelf.
Waarom verdenk je PHP zelf? Zo iets simpels zal niet zo snel buggen.
Normaal moet je ook in de log de foutmelding zien, zoals Ozzie al zegt.
Nog even verder gekeken en ik zie de foutmelding:

PHP Fatal error:  Uncaught Error: Call to undefined function mysqli_stmt_get_result()

Volgens antwoorden op het net moet er bepaalde driver geïnstalleerd zijn, maar ikzelf kan dit niet doen en ik zit bij Strato.
Betekent deze foutmelding dat ik contact moet opnemen met Strato om dit op te lossen?
Ja, welke PHP-versie heb je?
- Ariën - op 02/02/2021 15:33:53

Ja, welke PHP-versie heb je?

Volgens Strato gebrui ik:
Deze PHP-versie gebruik je nu: PHP 7.4
Inmiddels een reactie van Strato gekregen en daarin geven zij aan dat zij helemaal niets kunnen doen aan de foutmelding die ik krijg in hun error_log.
Wat vinden jullie hiervan?
Afscheid nemen van Strato of hebben zij gelijk?


Onderstaande is hun reactie:

STRATO verzorgd inderdaad de hosting van uw website, echter bieden bij problemen geen support met betrekking tot de de configuratie van de website. In dit soort gevallen kunnen we alleen algemene tips geven.

Bij een shared webhosting pakket zijn de instellingen van PHP gelimiteerd en deze kan je niet aanpassen.
Ondersteunen die lui dus mysqli voor de helft?
mysqli_stmt_get_result() is overigens een gewone functie.

Vraag ze eens met welke reden die functie niet werkt?
Staat deze ook in phpinfo()'s informatie over de disabled functions?
- Ariën - op 03/02/2021 19:17:32

Ondersteunen die lui dus mysqli voor de helft?
mysqli_stmt_get_result() is overigens een gewone functie.

Vraag ze eens met welke reden die functie niet werkt?
Staat deze ook in phpinfo()'s informatie over de disabled functions?


Haha! Daar lijkt het wel op helaas.
Precies ik denk ook dat mysqli_stmt_get_result() een hele gewone functie is. Het ergste vind ik dat zij de schuld bij de configuratie van mijn website neerleggen ipv dat zij zeggen dat zij het niet ondersteunen voor welke reden dan ook.
Ik ga kijken met phpinfo() over de disabled functions.

Reageren