Beste iedereen.

Ik hoop dat hier een paar php freaks zijn die mij kunnen helpen

Ik beheer een kleine website voor onze fotoclub. Nu is de webhosting in eens over gegaan naar php7.
Hier door werken enkele scripts niet meer ik heb de meeste weer goed gekregen door aan passingen. Maar net de inlog script voor leden werkt niet meer.
Mijn mysql data base is goed daar worden wel gegeven uit opgehaald op een andere test pagina en voor de portfolio's


Na het inloggen komt er gelijk een fout.
Hier door komt er ook een stuk van het scrip in beeld wat normaal niet zou kunnen
Dit zie ik in beeld staan:

Fout: ingevoerd gebruikersnaam klopt niet!</p>";
}else{ //mailadres staat in de database, we gaan verder!
while($record = mysqli_fetch_object($ophalen)){
$password_db = $record->wachtwoord;

}


---------------------------------------
Ik weet niet of het nu wel mag maar hier onder mijn script wat is er fout?

<?
session_start();




if ($_POST['submit']=="login")
{
include "log.php";

$gebrnaam ==(strtolower ( $_POST['gebruikersnaam']));

$sql = "SELECT * FROM `leden` WHERE `gebruikersnaam` = '".$_POST['gebruikersnaam']."'";

$ophalen = mysqli_query($con, $sql);
$aantal = mysqli_num_rows($ophalen); // aantal records met verstuurd emailadres tellen

if($aantal == 0){

echo"<p>Fout: ingevoerd gebruikersnaam klopt niet!</p>";

}else{

//mailadres staat in de database, we gaan verder!

while($record = mysqli_fetch_object($ophalen)){
$password_db = $record->wachtwoord;

}

//password nu vergelijken met ingevoerd password

if($password_db != $_POST['wachtwoord']){

echo"<p>Verkeerd wachtwoord!</p>";

}else{

//email staat in database en password klopt, sessie starten!

while($record = mysqli_fetch_object($ophalen)){
$id = $record->id;}

//sessie opstarten

$idlog=(strtolower ($_POST['gebruikersnaam']));


$_SESSION["idlog"]= $idlog;

if ($idlog == "admin"){

echo "<meta http-equiv=REFRESH content=0;url=adm.php?idlog=". $_POST['gebruikersnaam'] . " target=main> ";

}
else{
echo "gelukt ";

$datenu=date("d-m-y");

mysqli_query ($con, "UPDATE leden SET datenu='$datenu' WHERE gebruikersnaam='$idlog'");

echo "<meta http-equiv=REFRESH content=0;url=loginstart.php?idlog=". $_POST['gebruikersnaam'] . " target=main> ";
}

}
}

}

?>

<head>
<link a href="instel.css"rel="stylesheet"type="text/css" />
</head>
<body class=body>

<?php include("top.php");
?>


<table align=center width=1100><tr><font color=white size=4 face=calibri>
<td align=center >



<font color=white size=4 face=calibri>



<form method="post" action="login.php">
<table width=300 border=1 cellpadding=3 cellspacing=1 align=center >
<tr>

<td colspan=2>
<font color=white size=4 face=calibri> Login leden fotoclub</td>
</tr><tr>
<td align=right>
<font color=white size=4 face=calibri> Loginnaam:
</td>

<td> <input type=text name=gebruikersnaam> </td></tr><tr>
<td align=right>
<font color=white size=4 face=calibri>&nbsp Wachtwoord:</td
>
<td> <input type=password name=wachtwoord></td></tr><tr>

<td colspan=2 align=center><br> <input type="submit" name="submit" value="login">
</td></tr></table>
</form>

<br><BR>
Ik weet mijn login gegevens niet meer? <a href=vergeten.php target=home>Klik hier</a>
</td>
Ja dat klopt voer gewoon die naam in.. en toch is het niet goed.. toch komt de naam niet verder door in de vergelijking..

Snap er niks van..
Laat je code eens zien, want dit lijkt mij niet de volledige code van Frank te zijn.

Dit toont hier in de 'sandbox' gewoon gilbert.
Zie ook: https://3v4l.org/3J5VW


<?php
$naam = 'Gilbert';
$gebrnaam = strtolower(trim($naam)); // mysqli_real_escape_string even verwijderd omdat deze niet in de sandbox werkt.
$sql = "SELECT * FROM leden WHERE gebruikersnaam = '" . $gebrnaam . "'";
echo $sql;
?>

Ik heb de volledige code van frank over genomen.. er niks aan gedaan.

Maar hier is die nog eens dan :)


<?php

// initialiseer variabelen
$gebrnaam = '';
$errors = []; // lege array

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    include "log.php";
    
    // laten we kijken of de benodigde POST variabelen ook bestaan...
    if(!array_key_exists('gebruikersnaam', $_POST) || !array_key_exists('wachtwoord', $_POST)) {
        $errors[] = 'Fout bij het verwerken van het formulier';
    } else {

        $gebrnaam = strtolower(mysqli_real_escape_string(trim($_POST['gebruikersnaam'])));

        $sql = "SELECT * FROM leden WHERE gebruikersnaam = '" . $gebrnaam . "'";

        $result = mysqli_query($con, $sql);
        $aantal = mysqli_num_rows($result); // aantal records met verstuurd emailadres tellen

        if ($aantal == 0)
        {
            $errors[] = 'Fout: ingevoerd gebruikersnaam  klopt niet!';
          echo "<pre>".print_r($_POST,true)."</pre>";
        }
        else
        {
            //mailadres staat in de database, we gaan verder!

            $record = mysqli_fetch_object($result);
            $password_db = $record->wachtwoord;

            //passwordsleutel nu vergelijken met de sleutel van het ingevoerde password
            if ($password_db != password_hash($_POST['wachtwoord'], PASSWORD_DEFAULT))
            {
                $errors[] = 'Verkeerd wachtwoord!';
            }
            else
            {
                //email staat in database en password klopt, sessie starten!
                session_start();

                $_SESSION['idlog'] = $gebrnaam;

                if ($gebrnaam == "admin")
                {
                    header('Location: adm.php');
                    exit;
                }
                else
                {
                    $datenu = date('Y-m-d');

                    mysqli_query($con, "UPDATE leden SET datenu='" . $datenu . "' WHERE gebruikersnaam='" . $gebrnaam . "'");

                    header('Location: loginstart.php');
                    exit;
                }
            }
        }
    }
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Login</title>
    </head>
    <body>
        <?php if(count($errors)): ?>
        <ul class="errors">
            <?php foreach($errors as $error): ?>
                <li><?php echo $error; ?></li>
            <?php endforeach; ?>
        </ul>
        <?php endif; ?>
        
        <form method="post">
            <input type="text" name="gebruikersnaam" value="<?php echo htmlspecialchars($gebrnaam); ?>"> <!-- escape ook altijd je output -->
            <input type="password" name="wachtwoord">
            <button>Login</button>
        </form>
    </body>
</html>
Haal lijn 4 eens weg?
Echo anders de variabelen $gebrnaam en $sql beiden eens, nadat je die zijn aangemaakt?
gedaan helaas de zelfde fout nog steeds
Echo eens $gebrnaam en $sql NA dat je die aangemaakt hebt. Wat zie je dan?
Laat die code eens zien hoe je dat debugt? je gaf eerder al aan dat $_POST['gebruikersnaam'] gewoon bestaat.

Ik kan me echt niet indenken dat een variabele opeens spontaan verloren gaat. Of er moet iets heel vreemd zijn...
onder de regel:
$aantal = mysqli_num_rows($result); // aantal records met verstuurd emailadres tellen

if ($aantal == 0)
{
$errors[] = 'Fout: ingevoerd gebruikersnaam klopt niet!';
echo"$gebrnaam, $sql";

Hier heb ik ze geplakt.. En daar krijg ik de melding

Als ik dit doe krijg ik:
, SELECT * FROM leden WHERE gebruikersnaam = ''

Fout: ingevoerd gebruikersnaam klopt niet!

wat me opvalt is de de $gebrnaam er niet meer is dan.. dan is hij die variabele al kwijt in eens.
Echo het nou eens direct NADAT je die aangemaakt hebt?
Net zoals in mijn testcase. Elke variabele direct na dat je het hebt gemaakt echo'en.
Dat heb ik nu gedaan..
En dan komen we verder .. nu staat er verkeerde wachtwoord maar dat kan aan de sleutel liggen die ik er eerst voor moet maken nog..

Alle gebruikers wachtwoorden in de database zul je eenmalig moeten omzetten naar sleutels.
Dit zou je kunnen doen door een script te schrijven die dat voor je doet, of je maakt een script die je de sleutel van een wachtwoord laat zien en plakt de sleutel handmatig bij de juiste gebruiker in de tabel


Ik raad aan om een scriptje te schrijven die al je plain text wachtwoorden om zet naar een hashed wachtwoord, met password_hash(). Nu zal je blijkbaar nog controleren op een lees baar wachtwoord, terwijl je script verwacht dat deze gehashed is.

Reageren