PHP登录表单 - MySQL数据库 - 密码无效

时间:2018-03-01 09:22:18

标签: php mysql sql html5 mariadb

我正在尝试使用此代码登录,但是当我尝试它时,我总是得到否定($ errorMessage)。我基本上试图检查 vanilla forums 的现有数据库的用户名和密码。我得到了一个只对SELECT(读)访问特定TABLE的用户。 我不明白这行是做什么的:

  

准备(“SELECT * FROM GDN_User WHERE Email =:Email”)

我的数据库中有这些ROWS:

  

UserID,电子邮件,密码,(名称)(以及更多不相关的)

<?php
//username-, password-vars (etc.) removed for stackoverflow post
//LOGIN START
session_start();
$pdo = new PDO('mysql:host=localhost;dbname=vanilla_forums', $username2, $password);
if(isset($_GET['Login'])) {
    $email = $_POST['Email'];
    $passwort = $_POST['Passwort'];

    $statement = $pdo->prepare("SELECT * FROM GDN_User WHERE Email = :Email");
    $result = $statement->execute(array('Email' => $email));
    $user = $statement->fetch();

    //Überprüfung des Passworts
    if ($user !== false && password_verify($passwort, $user['Passwort'])) {
        $_SESSION['UserID'] = $user['UserID'];
        die('Login erfolgreich. Weiter zu <a href="access.php">internen Bereich</a>');
    } else {
        $errorMessage = "Password invalid.<br>";
    }
}

//LOGIN END
?>
<!DOCTYPE html>
<html>
<head>
  <title>Login</title>    
</head>
<body>

<?php
if(isset($errorMessage)) {
    echo $errorMessage;
}
?>

<form action="?Login=1" method="post">
E-Mail:<br>
<input type="email" size="40" maxlength="250" name="Email"><br><br>

Dein Passwort:<br>
<input type="password" size="40"  maxlength="250" name="Passwort"><br>

<input type="submit" value="Abschicken">
</form>
</body>
</html>

我可能只是对封顶的字母做错了,但找不到问题。

2 个答案:

答案 0 :(得分:1)

如果您的数据库列名为Password,则不会产生结果:$user['Passwort']

我同意你的意见:坚持用英语。 : - )

答案 1 :(得分:0)

您只需在execute()功能电子邮件中添加“:”即可。

改为:

    $result = $statement->execute(array('Email' => $email));
    $user=$statement->fetch();

要:

  $result = $statement->execute(array(':Email' => $email));
  $user=$statement->fetch(PDO::FETCH_ASSOC);