我的登录页面总是显示数据不正确.找不到错误


My login page always shows that data is incorrect. Cant find the bug

这是我的代码:

<?php
try {
$connection = new PDO("mysql:host=localhost;dbname=tp1-2015_groep2", "utp1-2015_groep2", "bB5HvUC7MV7mqpWp");
$connection->query("SET NAMES utf8");
    echo "<p id='popupg'>Heeft u al een account? U kunt nu inloggen!</p>";
} catch (PDOException $exception) {
    echo "<p id='popupr'>U bent NIET verbonden! Probeer alstublieft opnieuw te verbinden!</p>";
    exit;
}

function hashedPassword($username, $password) {
    return hash ("sha512", $username.$password);
}

//zodra het login knop ingedrukt wordt..
if(isset($_POST['login'])){
    //Verkrijg de info binnen van onze formulier
    $username = $_POST['username'];
    $password = $_POST['password'];
    //Haal de geselecteerde velden op
    $sql = $connection->prepare ("SELECT id, username, password FROM gebruikersgegevens WHERE username = :username AND password = :password");

    $passwordHash = hashedPassword($username, $password);
    //Koppel de onderstaande waarden aan elkaar
    $sql->bindValue(':username', $username, PDO::PARAM_STR);
    $sql->bindValue(':password', $passwordHash, PDO::PARAM_STR);
    //Voer het voorbereidde query uit
    $sql->execute();
    if ($sql->execute()) {
    //Haal rij op..
    $sql->fetch();
    //kijken of de rijen kloppen..
    $count = $sql->rowCount();
            if ($count !== 0) {
        //Zodra count "true" geeft, vergelijk wachtwoorden..
            $validPassword = password_verify($password, $user['password']);
                if ($validPassword) {
                    //Bied de gebruiker een login sessie aan.
                        $_SESSION['user_id'] = $user['id'];
                        $_SESSION['logged_in'] = time();
                        $_SESSION['username'] = $_POST['username'];
                            //Stuurt de gebruiker door naar het onderstaande link..        
                            header('Location: index.php');
                            exit;
                    } else {
                        die('<p id="popupr">Het verifiëren is fout gegaan!</p>');
                }
        } else {
            //een tijdelijke error oplossing!
            echo '<p id="popupr">De combinatie van wachtwoord en gebruikersnaam klopt niet!</p>';
        }
    }
}

我必须为学校制作一个博客,您需要能够注册和登录。但是登录页面实际上不起作用。找不到错误。我尝试了很多方法,但没有任何效果。它总是说登录的组合是错误的。我已经想到哪里出了问题,但我找不到哪里出了问题。这是验证密码的地方。

你在做双重工作。首先,您从表中检索与usernamepassword匹配的行,然后您将使用不同哈希方法哈希的密码与哈希密码进行比较。稍后您将访问尚未设置的$user(您正在使用$sql->fetch()而不将结果分配给变量)。

你也有双$sql->execute().这(如果它返回 false)意味着查询出了问题,而不是没有任何行。

请尝试以下操作,

<?php
session_start();
if(isset($_POST['login'])){
    //Verkrijg de info binnen van onze formulier
    $username = $_POST['username'];
    $password = $_POST['password'];
    //Haal de geselecteerde velden op
    $sql = $connection->prepare ("SELECT id, username, password FROM gebruikersgegevens WHERE username = :username AND password = :password");

    $passwordHash = hashedPassword($username, $password);
    //Koppel de onderstaande waarden aan elkaar
    $sql->bindValue(':username', $username, PDO::PARAM_STR);
    $sql->bindValue(':password', $passwordHash, PDO::PARAM_STR);
    //Voer het voorbereidde query uit
    if ($sql->execute()) {
        //Haal rij op.. (En sla op in $user)
        $user = $sql->fetch();
        //kijken of de rijen kloppen..
        $count = $sql->rowCount();
        if ($count > 0) {
            //Bied de gebruiker een login sessie aan.
            $_SESSION['user_id'] = $user['id'];
            $_SESSION['logged_in'] = time();
            $_SESSION['username'] = $_POST['username'];
            //Stuurt de gebruiker door naar het onderstaande link..        
            header('Location: index.php');
            exit;
        } else {
            die('<p id="popupr">Het verifiëren is fout gegaan!</p>');
        }
    } else {
        //een tijdelijke error oplossing!
        // Je komt alleen hier als de query mislukt is (fout in de query of database).
        echo '<p id="popupr">De combinatie van wachtwoord en gebruikersnaam klopt niet!</p>';
    }
}

您使用password_verify()来验证密码,但您可以使用hash()函数生成哈希。尝试将hash()更改为 password_hash() 。请参阅 password_verify() 文档。 password_hash()使用 crypt() 生成密码,请参阅password_hash文档。