【问题标题】:password and username validation in PHP [closed]PHP中的密码和用户名验证[关闭]
【发布时间】:2012-10-01 10:02:03
【问题描述】:

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

用户名 - 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”,它仍然会通过下一页。我该怎么办?

【问题讨论】:

    标签: php passwords


    【解决方案1】:

    您应该只检查查询是否返回带有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_* 函数转移。

    【讨论】:

    • OP 的带有 mysql_fetch_array 的 while 语句应该已经完成​​了这项工作(检查是否有给定用户名和密码的记录)我认为已经没有行数了。
    【解决方案2】:

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

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

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

    希望这会有所帮助:)!

    【讨论】:

    • 我试过了,但它只做同样的事情。但问题是,我的数据库有 3 行,由用户名和密码组成。用户名 mav 有一个密码 mav。用户名 kam 有一个密码 kam。用户名 shin 有一个密码 shin。问题是,如果我输入用户名“mav”并且密码是“kam”,而不是打印错误消息,它仍然会通过页面。
    【解决方案3】:

    您正在检查查询中的验证。如果用户正确输入了用户名和密码,并且只有这样,查询才会返回一行,其中包含该数据。

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

    【讨论】:

      【解决方案4】:

      试试

       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']
      

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

      【讨论】:

        猜你喜欢
        • 2016-01-24
        • 1970-01-01
        • 1970-01-01
        • 2013-02-21
        • 1970-01-01
        • 1970-01-01
        • 2014-10-16
        • 1970-01-01
        相关资源
        最近更新 更多