我正在尝试使用此代码登录,但是当我尝试它时,我总是得到否定($ 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>
我可能只是对封顶的字母做错了,但找不到问题。
答案 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);