我该如何检查密码?

时间:2015-12-09 13:33:20

标签: php forms login passwords

最近在我的登录处理程序中发现了一个问题。问题是,即使输入的密码正确并且与数据库中的密码匹配,脚本仍会将我发送到错误页面。

session_start();
include ("db.php");

 if (isset($_POST['login'])) {                                     
        $login = $_POST['login']; 
        $login = stripslashes($login);
        $login = htmlspecialchars($login);
        $login = trim($login);
        if ($login == '') {
            unset($login);
            } 
            } 

        if (isset($_POST['password'])) {
        $password=$_POST['password']; 
        $password = stripslashes($password);
        $password = htmlspecialchars($password);
        $password = trim($password);
        $password = hash("md5",$password); 
        if ($password =='') {
            unset($password);
            }
            }


if (empty($login) or empty($password)) 
    {
    exit (header('location:index.php'));
    }

$result = mysql_query("SELECT * FROM users_data WHERE login='$login'");

    $row = mysql_fetch_array($result);

    if (empty($row['password']))
    {
    exit (header('location:mistake.php'));
    }
    else {

    if ($row['password']==$password) {

    $_SESSION['login']=$row['login']; 
    $_SESSION['users_id']=$row['users_id'];
    header('location:first.php');

    }
    else {

        header('location:mistake.php');



    }
    }

HTML表单:

<form action="login.php" method="post" class="login">



<label><span>Login:</span>
<input name="login" type="text" size="20" maxlength="100">
</label>




<label><span>Password:</span>
<input name="password" type="password" size="20" maxlength="100">
</label>



<p>
<input type="submit" name="submit" class ="submit" value="Login">
</p>

UPD:感谢您的回答,最后我找到了问题所在 - 我刚刚在数据库中指定了不够长的密码值。

3 个答案:

答案 0 :(得分:0)

首先,为什么要将密码存储在数据库中而不对其进行散列(例如md5)。

如果您这样做,则无需处理密码,您只需将存储的md5(password)与用户发布的密码的md5哈希值进行比较。

另外,由于编码,您最有可能被重定向到mistake.php页面而不是success.php页面。

如果您向我们提供用于测试代码的密码(假设您正在测试它。),那将会有所帮助。

干杯!

编辑:请查看更好的加密技术,如@jayblancard在下面的评论中所建议。

答案 1 :(得分:0)

尝试使用isset()而不是空

if (isset($row['password']))

答案 2 :(得分:0)

  1. 我建议您尝试调试代码,错误DOT php在多个地方调用,因此请使用die("die message")查看哪一个被解雇。

  2. 由于您没有对有效和无效输入的代码调试输出进行测试并检查输出。

  3. 一旦您对输入和输出感到满意,请检查条件是否符合预期,就像以前使用模具条件一样。

  4. 注意:您的代码看起来很混乱,只能倾斜basics

    另请参阅OO programming