2012-08-27 68 views
-1

你好,我目前有这个代码的问题,我不确定把我的其他地方。 错误是这样的:登录验证

mysql_num_rows() expects parameter 1 to be resource, boolean given in 

这是我的代码:

if ($_POST['submit']) 
{   

      $username = $_POST['id']; 
      $password = $_POST['pass']; 
      //connect to the database here 
      $username = mysql_real_escape_string($username); 
      $query = "SELECT hashpass, salt 
        FROM users 
        WHERE username = '$username'"; 
      $result = mysql_query($query); 
      if(mysql_num_rows($result) < 1) //no such user exists 
      { 
       echo "NO USER!"; 
      } 
      $userData = mysql_fetch_array($result, MYSQL_ASSOC); 
      $hash = sha1 ($userData['salt'] . $password); 
      if($hash != $userData['password']) //incorrect password 
      { 
       echo "WRONG PASS"; 
      } 
      } 

希望得到任何帮助。

+0

还有什么?我认为问题在于不兼容的返回类型。 –

+0

你在phpmyadmin中运行了你的$ query吗?并且您没有在sql查询中选择密码,但是在比较密码时使用了密码。 – WatsMyName

+1

您的查询可能会返回一个错误,并且'mysql_ *'函数已被弃用,请考虑迁移到** mysli _ **或** PDO **。 – complex857

回答

0

在我类似的脚本,我先检查$结果,确保查询是好的...我还假设每个用户只有一条线!

$result = mysql_query($query); 

if ($result) 
{ 
    if(mysql_num_rows($result) == 1) 
    { 
    // user exists... check password 
    } 
    else 
    { 
    //no such user exists 
    echo "NO USER!"; 
    } 
} 
else 
{ 
    // Query failed - no such user 
} 

此外,以防万一片段是适用于你的代码,我只包括一旦你验证了该用户名的密码检查!

0

mysql_num_rows函数返回记录集中的行数。

int mysql_num_rows (resource $result) 

mysql_query函数对MySQL数据库执行查询。该函数返回SELECT查询的查询句柄,其他查询返回TRUE/FALSE,失败时返回FALSE。

所以你的情况,你应该做这样的

<?php 

$link = mysql_connect("localhost", "mysql_user", "mysql_password"); 

$query = "SELECT hashpass, salt 
        FROM users 
        WHERE username = '$username'"; 

$result = mysql_query($query); 

mysql_select_db("database", $link); 

$result = mysql_query($query, $link); 
$num_rows = mysql_num_rows($result); 

if($num_rows < 1) //no such user exists 
{ 
    echo "NO USER!"; 
} 

?>