2011-01-22 88 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自己,所以,可能會有錯別字。
但我希望你能明白這個主意。

相關問題