PHP中的密码和用户名验证

时间:2012-10-01 10:02:03

标签: php passwords username

我在我的数据库中有这些信息......

用户名 - kam,mav,shin

密码 - kam,mav,shin

这是我的代码......

<?php

$con=mysql_connect("localhost","root","");
mysql_select_db("nnx",$con);
$tbl2=mysql_query("SELECT * FROM tablename WHERE `username` =   
'".mysql_real_escape_string($_POST['username'])."' and `password` =   
'".mysql_real_escape_string($_POST['password'])."'");

while($row=mysql_fetch_array($tbl2))

    if (($row['username']==$_POST['username'])&&($row['password']==$_POST['password']))
        {   
            echo " ";
    }

    if (($row['username']!=$_POST['username'])&&($row['password']!=$_POST['password']))
        {
            header("location: /login.php?codeError=1");
            die;
        }
?>

问题是,如果我输入用户名“mav”而密码是“kam”,它仍然会通过下一页。我该怎么办?

4 个答案:

答案 0 :(得分:2)

您应该检查查询是否返回mysql_num_rows()的所有行:

$con=mysql_connect("localhost","root","");
mysql_select_db("nnx",$con);

$tbl2 = mysql_query("SELECT `username`, `password`  FROM `tablename` WHERE 
                    `username` = '".mysql_real_escape_string($_POST['username'])."' AND 
                    `password` = '".mysql_real_escape_string($_POST['password'])."'
                   ");

$rows = mysql_num_rows($tbl2);

if($rows){
    // user and password exists in db
} else {
    // does not exist
    header("location: /login.php?codeError=1");
    die;
}

就像我在上一个问题中告诉你的那样,尝试从mysql_*函数转移。

答案 1 :(得分:0)

只是一个建议,但为什么不这样尝试:

if (($row['username']==$_POST['username'])&&($row['password']==$_POST['password']))
    {   
        echo " ";
    }else{
      header("location: /login.php?codeError=1");
      die;
    }

我不明白为什么你在这里需要两个if语句,它只是布尔值,结果将是真或假。

希望这会有所帮助:)!

答案 2 :(得分:0)

您正在查询查询中已有的验证。如果用户正确输入了用户名和密码,那么查询将返回一行,其中包含该数据。

因此,您只需计算查询返回的行数。如果它低于1,则用户未经过身份验证

答案 3 :(得分:0)

尝试

 if (($row['username']==$_POST['username'])&&($row['password']==$_POST['password']))
        {   
            echo " ";
    }

 else 
        {
            header("location: /login.php?codeError=1");
            die();
        }

无论如何,解决此类问题的一个好方法是在屏幕上临时打印变量(作为调试)。

echo $row['username']." ".$_POST['username']." ".$row['password']." ".$_POST['password']

如果您的数据库查询或发布数据的表单存在问题,请查看变量是否确实存在。