2015-09-06 8 views
-1

Вот мой login.phpя не могу войти систему

<? 
    session_start(); 
    if (isset($_POST['Login'])) { 
    include_once("connect.php"); 
    $user_ok = false; 
    $usernamer=$_POST['Usernamer']; 
    $passaword=$_POST['passsword']; 
    $id = "SELECT id FROM websiteusers WHERE userName='$Usernamer' AND pass='$passaword' LIMIT 1"; 
    function evalLoggedUser($link,$id,$usernamer,$passaword){ 
     $sql = "SELECT ip FROM websiteusers WHERE userName='$Usernamer' AND pass='$passaword' LIMIT 1"; 
     $query = mysqli_query($link, $sql); 
     $numrows = mysqli_num_rows($query); 
     if($numrows > 0){ 
      return true; 
     } 
    } 
     $user_ok = evalLoggedUser($link,$usernamer,$passaword,$id); 
     if(isset($_POST['Login'])){ 
     if($user_ok == true){ 
     header("location: user.php?u=".$_POST["Usernamer"]); 
     }else{ 
     echo "username was not found"; 
     } 
     } 
    } 
    ?> 

дает erros как

mysqli_num_rows() ожидает параметр 1, чтобы быть mysqli_result, нуль данный

Даже когда я набираю правильное имя пользователя echos username was not found

+1

Несколько ошибок. Оператор '$ id' sql не используется и ссылается на' id' изначально - фактический sql в ссылках на функции 'ip' ~ Я предполагаю, что они должны быть одинаковыми - вероятно, id. Ваш вызов функции 'evalLoggedUser' содержит аргументы в неправильной последовательности. – RamRaider

+0

. Там, вероятно, есть опечатка: не следует ли вместо READ $ _post ['passaword'] вместо пароля? –

+0

@ some-non-descript-user no name of input is passsword – qwaaz

ответ

0

I thi пк она должна быть

if($numrows < 0){ 
    return true; 
    } 

И ваш запрос должен быть:

$id = "SELECT id FROM websiteusers WHERE userName='$Usernamer' AND pass='$passaword' LIMIT 1"; 
//change $Usernamer to $usernamer 
+0

Почему «$ numrows <0»? –

+0

Потому что если вы делаете '$ numrows <0', он вернет false и не войдет в оператор if – aldrin27

+0

Я все еще не понимаю. Вы хотите, чтобы функция возвращала значение true, если запрос db возвращает больше нуля, не так ли? $ numrows <0 оценивает true, если у вас есть какая-то ошибка, нет? Таким образом, вы вернете true, только если mysqli_num_rows() выдает ошибку? –

0

Да! Параметр 1 должен быть набором результатов. Это означает, что вы должны передать $ запроса не вашему запросу

+0

где? Вы имеете в виду на строке 14? – qwaaz

0

Несколько изменений в оригинал с соответствующими комментариями

<?php 
    session_start(); 
    if (isset($_POST['Login'])) { 

     include_once("connect.php"); 
     $user_ok = false; 

     $usernamer=$_POST['Usernamer']; 
     $passaword=$_POST['passsword']; 
     /* to debug */ 
     echo "POSTED username:".$usernamer." POSTED password: ".$passaword; 

     /* 
      this gets passed as a parameter to the function but never used... 
      $id = "SELECT id FROM websiteusers WHERE userName='$Usernamer' AND pass='$passaword' LIMIT 1"; 
     */ 
     function evalLoggedUser($conx, $u, $p){ 
      /* To use the variables above ($usernamer & $passaword) you would need to declare them as global within the function */ 
      /* I assumed, perhaps wrongly, that this ought to have been id rather than ip */ 

      $sql = "SELECT `id` FROM `websiteusers` WHERE `userName`='$u' AND `pass`='$p' LIMIT 1"; 

      /* to debug */ 
      exit("PARAM Username:".$u ."<br />PARAM Password:". $p ."<br />sql:" .$sql); 

      $query = mysqli_query($link, $sql); 
      $numrows = mysqli_num_rows($query); 

      /* previously the function only returned a value if there was a recordset */ 
      return ($numrows > 0) ? true : false; 
     } 


     /* 
      The sequence of parameters was incorrect 
     */ 
     $user_ok = evalLoggedUser($link, $usernamer, $passaword); 

     if(isset($_POST['Login'])){ 
      if($user_ok === true){ 
       header("location: user.php?u=".$usernamer); 
      }else{ 
       echo "username was not found"; 
      } 
     } 
    } 
?>  
+0

, поэтому он удалил все ошибки, но все же имя пользователя echos не было найдено – qwaaz

+0

Для теста попробуйте добавить 'exit ($ sql)' после того, как оператор sql был создан (но не выполнен) в функции 'evalLoggedUser'. Посмотрите на sql, который отображается на экране - это выглядит правильно? Можете ли вы запустить этот sql в своем mysql client/gui и вернуть данные? – RamRaider

+0

no it this this SELECT 'userId' FROM' websiteusers' WHERE 'userName' = '' AND' pass' = '' LIMIT 1 – qwaaz

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