2011-01-22 3 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'? –

+0

Интересно, если кто-нибудь заметит ** настоящую ** ошибку в этом коде –

+0

@Felix King: yep – ineedhelp

ответ

1

Я бы предположил, что вы как-то зацикливаетесь мимо конца массива, а $row на самом деле NULL.

1

Так $res->fetch_object() не возвратил объект. Взгляните на документацию по этой функции. Что он возвращает, когда ничего не находит?

+0

Возвращает только сообщение об ошибке ... – ineedhelp

+0

@ Kuttu: вы имеете в виду 'var_dump ($ row)' выводит сообщение об ошибке? Думаю, это скорее вернет «ложь» или что-то еще. – greg0ire

+1

Он вернет 'null'. – lonesomeday

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 себя, так , могут быть опечатки.
Но я надеюсь, что вы сможете получить эту идею.

Смежные вопросы