-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";
            }
            }   

助けていただければ幸いです。

4

2 に答える 2

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!";
}

?>
于 2012-08-27T06:22:32.393 に答える
0

同様のスクリプトでは、最初に$ resultをチェックして、クエリに問題がないことを確認します...ユーザーごとに1行だけを想定しています。

$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
}

また、スニペットがコードに適用できる場合に備えて、ユーザー名を検証した後でのみパスワードチェックを含めます。

于 2012-08-27T06:22:53.663 に答える