php
  • passwords
  • username
  • 2012-10-01 223 views -2 likes 
    -2

    我有我的数据库信息...用户名和密码验证在PHP

    用户名 - 锦,MAV,胫

    密码 - 锦,MAV,胫

    这是我的代码。 ..

    <?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”,密码为“鉴”,它仍然要经过的下一个页面。我该怎么办?

    回答

    0

    只是一个建议,但为什么不试试这样说:为什么你需要两个if语句在这里,它只是布尔,结果要么是真或假

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

    我不明白。

    希望这有助于:)!

    +0

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

    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_*功能移动。

    +0

    使用mysql_fetch_array的OP while语句应该可以完成这项工作(检查是否存在具有给定用户名和密码的记录),我认为这已经没有行计数了。 –

    0

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

    所以你只需要计算你的查询返回的行数。如果低于1,则该用户未通过身份验证

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

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

    相关问题