2013-11-24 33 views
-2

我在PHP中使用mysqli并试图从数据库获取数据以登录到系统中。当我使用phpmyadmin来执行我的查询时,我会得到完美的结果。但是当我试图从php脚本中获得它时,我得到了一个概率。我的PHP脚本低于需要纠正我的mysqli查询

if(isset($login)){ 


$email = @$db->real_escape_string(htmlentities($_POST['loginid'])); 
$username = @$db->real_escape_string(htmlentities($_POST['loginid'])); 
$pass1 = @$db->real_escape_string(htmlentities($_POST['loginpass'])); 

$blah = new Encryption(); 
$pass = $blah->encode($pass1); 


    if($db->query("SELECT `uid` FROM `users` WHERE BINARY `uname` = '$username' AND `pass` = '$pass'")){ 
    $errors[] = 'Logged in by username'; 
    } 
    else if($db->query("SELECT `uid` FROM `users` WHERE `email` = '$username' AND `pass` = '$pass'")){ 
    $errors[] = 'Logged in by email'; 
    } 

} 

现在的事情是,我的用户名是“ABC”,邮件是“[email protected]”和密码“qazwsx”加密。第二个用户名是'xyz',电子邮件是'[email protected]',密码是'abcdef',但它不检查uname并一次通过或一次通过并同时通过。如果我输入“1”或任何带有“qazwsx”密码的密码,则表明您已通过用户名登录,这意味着它仅检查密码。

而且看到结果,我用这些代码,

if($errors){ 
     echo '<ul>'; 
      foreach ($errors as $error){ 
      echo '<li>'.$error.'</li>'; 
      } 
     echo '</ul>'; 
} 

else if ($loginform){ 
    echo $loginform; 
    } 

我不知道该怎么办。请帮我guyz。

回答

0

查找0行不是错误。查询无法找到并仍然返回成功。

您希望在查询返回后检查并确保结果至少包含一行。

$result = $db->query("SELECT...."); 
if ($result and $result->num_rows) { 
    # query found a matching user 
} 
+0

你能告诉我应该使用什么样的代码吗?你可以编辑我的代码吗? – user2947999

+0

Thanx,它为用户名工作,但我仍然无法用电子邮件ID登录。 :'( – user2947999

+0

)如果你对两者都做了同样的事情,那么你就面临着一个完全不同的问题。数据库中的值是什么样的,你在查询中使用的值是什么样的 – cHao