PHP登录界面不会移动到下一页

时间:2016-01-22 18:40:28

标签: php mysql pdo

目前正在尝试为学校做一个项目,就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(主要),用户名,密码

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

1 个答案:

答案 0 :(得分:4)

  

“id int(4)username varchar(20)password varchar(20)”

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

MySQL无声地失败,因为密码列的长度不足以容纳哈希值。

password_hash()函数生成的哈希值为60个字符长,即 IF ,实际上您使用该函数创建哈希值。

将它增加到60并重新开始(Nota:手册建议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代码之前删除这些空格。

请参阅Stack上的以下内容:

error reporting添加到文件的顶部,这有助于查找错误。

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

// Then the rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

如评论中所述:您没有回复$errMsg,但这不会导致您的代码无法正确重定向或执行。

如果您使用的是未显示的JS / Ajax,则需要对其进行排序。

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

您还可以查看ircmaxell的答案: