PHP登录屏幕不会移动到下一页

问题描述:

当前正在尝试为学校做一个项目,就php而言,代码是好的。当我运行它时,我输入用户名和密码并单击提交按钮,但似乎没有发生任何事情,我仍然在登录页面上。PHP登录屏幕不会移动到下一页

<?php 
session_start(); 
try{ 
    $databaseConnection = new PDO('mysql:host=127.0.0.1;dbname=mycontacts','root',''); 
    $databaseConnection->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e) { 
    echo 'Error: '.$e->getMessage(); 
} 
if(isset($_POST['login'])) { 
    $errMsg = ''; 
    $username = trim($_POST['username']); 
    $password = trim($_POST['password']); 

    if ($username == ''){ 
     $errMsg .= "You must enter your Username <br />"; 
    } 
    if($password == '') { 
     $errMsg .= 'You must enter your Password<br>'; 
    } 
    if ($errMsg == '') { 
     $records = $databaseConnection->prepare('SELECT id,username,password from users WHERE username = :username'); 
     $records->bindParam(':username',$username); 
     $records->execute(); 
     $results = $records->fetch(PDO::FETCH_ASSOC); 
     if(count($results) > 0 && password_verify($password, $results['password'])){ 
      header('location:mainMenu.php'); 
      exit(); 
     }else { 
      $errMsg .= 'Username and Password are not found<br />'; 
     } 
    } 
} 
?> 


<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Login</title> 
    <link rel="stylesheet" href="CSS/main.css"> 
</head> 
<body> 
    <h1>Welcome to the Contact List</h1> 
    <br /> 
    <br /> 
    <div> 
    <form method="post" class="submit" name="login"> 
     <h3><u>Please login</u></h3> 
     <p>Username: <input type="text" name="username" maxlength="15" size="20" /> </p> 
     <p>Password: <input type="text" name="password" maxlength="15" size="20" /> </p> 
     <input type="submit" value="Submit" name="login" /> 
    </form> 
    </div> 
</body> 
</html> 

数据库名称是mycontacts 表名是用户 中的字段ID(主),用户名,密码

当用户名和密码推杆,屏幕将保持在与登录文本框中没有任何内容,查询时也没有任何错误。

+2

你没有'形式action' http://www.w3schools.com/tags/att_form_action.asp – Kisaragi

+0

可能在标题之前输出。检查错误http://php.net/manual/en/function.error-reporting.php –

+2

@Kisaragi行动默认为自我,如果没有给出和OP有它的条件语句,所以这不是问题在这里。 –

“ID INT(4)用户名VARCHAR(20)密码VARCHAR(20)”

有你的问题。 (也请参阅我的脚注)。

由于密码列的长度不足以容纳哈希,因此MySQL在您身上失败了。

password_hash()函数产生的散列长度为60个字符,即IF您确实使用该函数创建了散列。

将它增加到60并重新开始(注意:手册建议255虽然)。意思是,清除你的密码,生成新密码并重新登录。

  • http://php.net/manual/en/function.password-hash.php

    PASSWORD_DEFAULT - 使用bcrypt算法(默认为PHP 5.5.0的)。请注意,随着新的更强大的算法添加到PHP中,此常量将随时间而改变。出于这个原因,使用这个标识符的结果的长度会随着时间而改变。因此,建议将结果存储在数据库列中,该列可以扩展超过60个字符(255个字符将是一个不错的选择)。

PASSWORD_BCRYPT - 使用CRYPT_BLOWFISH算法创建哈希。这将使用“$ 2y $”标识符产生标准的crypt()兼容散列。结果将始终为60字符串,或失败时为FALSE。


脚注:

另外,还要确保你没有头之前输出。 <?php标记之前的空格将导致该问题,并阻止您的代码执行,并且对于其他任何后续文件(例如用于标题的文件)应该如此。因此,您需要删除<?php标签之前的空间。

请教关于堆栈以下几点:

添加error reporting到您的文件(S)的顶部,这将有助于找到错误。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// Then the rest of your code 

旁注:显示错误应该只在分期完成,并且从不生产。


正如评论指出:你不呼应$errMsg,虽然不会导致你的代码不是重定向或正确执行。

如果您使用的是未显示的JS/Ajax,那么您需要将其排除。

您的表单和提交按钮也有重复的名称属性name="login"。从<form>删除name="login",这可能是冲突。

你也可以看看ircmaxell的回答是:

+0

而且他不是私人的'$ errMsg。='用户名和密码中的错误msg'$ errMsg'未找到
';'。 –

+0

@ViníciusFagundes我会做到这一点。现在在电话里大声笑 –