2017-03-12 100 views
0

我有一个简单的登录系统,它不会工作,我不明白为什么。一旦我按登录按钮什么也没有发生,网站只是重新加载而不是重定向我或给我任何错误消息。PHP登录不起作用

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

有什么错误 – NineBerry

+0

@NineBerry我没有得到任何错误消息,我只是从来没有重定向我按下登录按钮后再次main.php什么也没有发生在所有 – Krillex

+0

左右。 ,您仍然可以在按下登录按钮后看到该表单吗?如何打开登录表单?或者在按下按钮后可以看到一个空白页面? – NineBerry

回答

3

从(我的)评论:

“我的猜测是,这经常发生之前,是密码列的长度不够长。如果是这样的话,那么失败默默。 ,这就是我之前说过的,并且就此而言,如果该列的值小于60,那么您需要重新开始,删除旧的哈希值,将列修改为60+(255更好)并创建我已经回答了好几个这样的问题,并且正因为如此... - Fred -ii-“

和OP:

@ Fred-ii-你说的对,现在正在工作!非常感谢!难怪这一直在困扰着我几个小时。 - ?Krillex”

1

将session_write_close()放在换行标题之前。

session_write_close(); 
header("Location: main.php"); 
exit; 

评论为“我从来没有重定向我按下登录按钮后再次main.php。没有任何反应都没有。”。

在标题更改后添加退出以确保没有中断(例如某些回显)重定向。

0

请确保您已开启会话之前调用它,要不然就把这个 session_start();之前调用$ _SESSION []

更新1 然后打印$_POST和比较$results数据后散列并如果匹配,手动验证。

+0

我在LogIn.php的开头使用了session_start(),并且在大部分时间都这样做我的文件。 – Krillex