我有一个简单的登录系统无法使用,我无法弄清楚原因。一旦我按下登录按钮没有任何反应,该网站只是重新加载而不是重定向我或给我任何错误消息。
if(!empty($_POST['email']) && !empty($_POST['password'])){
$records = $conn->prepare('SELECT email, password FROM Profiles WHERE email = :email');
$records ->bindParam(':email', $_POST['email']);
$records->execute();
$results = $records->fetch(PDO::FETCH_ASSOC);
$message = '';
if(count($results) > 0 && password_verify($_POST['password'], $results['password'])){
$_SESSION['user_email'] = $results['email'];
header("Location: main.php");
}else{
$message = 'Sorry, those credentials do not match';
}
}
这是HTML表单。
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
<input type="text" placeholder="Email" name="email"> <br/> <br/>
<input type="password" placeholder="Password" name="password"> <br/> <br/>
<input type="submit" value="Login">
</form>
答案 0 :(得分:3)
来自(我的)评论:
“我的猜测是以前经常发生这种情况,密码列的长度是不够长的。如果是这样的话,那就是默默地失败,这就是我之前所说的并且是关于如果列少于60,那么你将需要重新开始,删除旧的哈希值,将列更改为60+(255更好)并创建一组新的哈希值。我已经回答了相当的问题。像这样的一些问题,因为这一点...... - Fred -ii-“
和OP:
@ Fred-ii-你是对的,它现在正在运作!非常感谢!难怪这已经困扰了我几个小时。 - Krillex“
答案 1 :(得分:1)
将session_write_close()放在带有标题更改的行之前。
session_write_close();
header("Location: main.php");
exit;
评论“在我按下登录按钮后,我再也没有被重定向到main.php。根本没有任何事情发生。”。
在标题更改后添加退出以确保没有任何中断(例如某些回显)重定向。
答案 2 :(得分:0)
请确保您在调用之前已启动会话,否则请将其放入 调用$ _SESSION []
之前session_start();
更新1
然后打印$_POST
并在散列后将数据与$results
进行比较,并在匹配时手动验证。