我想我错过了一个小细节,但我无法弄清楚是什么。我的数据库100%确定连接。我的register.php页面完美地加载数据。当我尝试设置登录系统时,我得到相同的回声"无效的电子邮件或密码"我输入好的信息或不好(只是为了检查)。在某一点上。
我更改了代码,看看我是否可以将数据从我的数据库发布到我的页面,并且它运行良好,所以我猜我的PDO连接是好的。那么为什么我总是在两种情况下都有相同的回声呢?
<?php
if (isset($_POST['submit'])){
$db_server = "localhost";
$db_user = "root";
$db_password = "";
$db_name = "newsite";
try{
$conn = new PDO("mysql:host=$db_server;dbname=$db_name", $db_user, $db_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e){
echo "Connection failed: " . $e->getMessage();
}
if (!empty($_POST['email']) && !empty($_POST['password'])){
$req = $conn->prepare('SELECT id,email, password FROM users_tb WHERE email= :email');
$req->bindParam(':email',$_POST['email']);
$req->execute();
$result= $req->fetch(PDO::FETCH_ASSOC);
if (count($result)>0 && password_verify($_POST['password'], $result['password'])){
echo "Alleluia!";
}else{
echo "invalid email or password";
}
}
}
?>
for
<body>
<form method="POST" action="login.php">
<table width="400" border="5" align="center">
<tr>
<td colspan="5">Login</td>
</tr>
<tr>
<td align="center">Email</td>
<td><input type="text" name="email"></input></td>
</tr>
</tr>
<tr>
<td align="center">Password</td>
<td><input type="password" name="password"></input></td>
</tr>
</tr>
<tr>
<td><input type="submit" name="submit" value="sign up"></input></td>
</tr>
</table>
</form>
</body>
答案 0 :(得分:0)
问题是您使用password_verify
来验证密码是否与哈希匹配。
查看您的评论虽然您没有存储哈希值,但您存储的是实际密码0987654
。
因此,在将密码输入数据库时,您必须保存
的结果 password_hash("your_password", PASSWORD_DEFAULT)
其中your_password
是您的密码,而不仅仅是存储0987654
默认情况下,您的哈希值应为60个字符,它应该类似于......
$2a$04$PnJr5Vo/EDwbCV0z16ceyuj.z4Cw..6L/0cfFPgTCPv0un0qBp.qm