2011-01-22 94 views
0
if(isset($_POST['uname'])) 
    {  
     $query = "SELECT * FROM user_info"; 
     $res = $mysqli->query($query); 
     $num = $res->num_rows; 
     $i = 0;  
     $cpwd = $_POST["pswd"]; 
     $hpwd = SHA1($cpwd); 
     $tmp = $_POST["uname"]; 
     while($i < $num) 
     { 
      $row = $res->fetch_object(); 
      $name = $row->Username; 
      $pwd = $row->Password; 
      if($name == $tmp) 
      {  
        //check if user is blocked 
      } 
      //hashed pwd 
      if($pwd == $hpwd) 
      { 
       //success 
       exit(); 
      } 
      //request for pwd change 
     else if($pwd == $cpwd) 
      { 
      //change 
       exit(); 
      } 
      else if($pwd != $hpwd) 
      { 

       //incorrect pwd 
      } 
     } 
     $i++; 
    } 
    if($i == $num) 
    { 
     //new user 
    } 
} 
+0

你在某处增加'$ i`吗? – 2011-01-22 12:02:26

+0

我不知道是否有人会注意到该代码中的** real **错误 – 2011-01-22 12:06:52

回答

1

我想你是以某种方式循环播放数组的末尾,$row实际上是NULL

1

因此$res->fetch_object()没有返回对象。看看这个功能的文档。它什么都没有找到时会返回什么?

1

某些时候num_rows返回1,即使没有影响行。尝试使用

while($row = $res->fetch_object()) 

或 你忘了增加$我:)

1

摆脱垃圾,使它像这样

$query = "SELECT * FROM user_info WHERE Username = ? AND Password = ?"; 
$stmt = $mysqli->prepare($query); 
$stmt->bind_param('ss', $_POST["uname"], SHA1($_POST["pswd"])); 
$stmt->execute() or trigger_error($mysqli->error()); 
if (!$mysqli->affected_rows) { 
    //no such user 
} 

我从来没有用过的mysqli自己,所以,可能会有错别字。
但我希望你能明白这个主意。

相关问题