-1

この単純なコードで警告メッセージが表示される原因は何か分かりますか?

if(isset($_POST['remember']))
{
       $query_cookie = ("SELECT id FROM users WHERE email = '$email' OR username = '$username'"); 
       $result_cookie = mysql_query($query);
       $row_cookie = mysql_fetch_array($result_cookie); // LINE 36
       $id = $row_cookie; // Will be hashed before using
       setcookie( "Remember", $id, strtotime( '+30 days' ) ); 
       echo $id;
}

これが私が得たエラーです:

警告: mysql_fetch_array() は、パラメーター 1 がリソースであると想定し、ブール値は C:\xampp\htdocs\Signup\includes\login.php 行 36 で指定されます

私が抱えているもう1つの問題は、クエリに関するものです。基本的に、ユーザー名用、電子メール用、パスワード用の 3 つの入力を持つログイン フォームがあります。ユーザーが自分のユーザー名またはパスワードでログインできるようにしたい。ただし、クエリは私にはちょっと奇妙に見えます。最終的なクエリは次のように終わるため、期待どおりに機能するかどうか疑問に思います。

SELECT id FROM users WHERE email = 'user@host.com' OR username = '' 

またはその逆。このクエリは完全には機能していないと思います。何か提案があれば、私は開いています。

$id はハッシュされるため、$id は $row_cookie atm と同じです。簡単にすれば$id = sha1(md5($row_cookie));よろしいでしょうか?

MySQLが減価償却されていることは知っています。すぐに MySQLi に切り替えるので、心配はいりません。

ご覧のとおり、実際には 3 つの質問があります。それが問題である場合は、質問を編集できるように、評価を下げる前にお知らせください。ありがとう!

4

6 に答える 6

2

$query_cookie を $query に変更します。

試す:

$result_cookie = mysql_query($query_cookie);

mysql_query() ステートメントで $query を参照しています。その変数は存在しません。

于 2013-09-13T08:22:00.820 に答える
2

ドキュメントから

SELECT、SHOW、DESCRIBE、EXPLAIN、および結果セットを返すその他のステートメントの場合、mysql_query() は成功するとリソースを返し、エラーの場合は FALSE を返します。

レコードを抽出する前に、呼び出しの結果が でないかどうかを常に確認する必要があります。mysql_queryfalse

また、呼び出しに間違った変数を渡していますmysql_query。あなたの SELECT は入っていて$query_cookie、あなたは合格して$queryいます。

于 2013-09-13T08:22:12.087 に答える
1

これを試して:

 change $id = $row_cookie[id]; instead of $id = $row_cookie;
于 2013-09-13T08:27:49.080 に答える
1

あなたは少し間違いを犯しました:

 $query_cookie = ("SELECT id FROM users WHERE email = '$email' OR username = '$username'"); 
 $result_cookie = mysql_query($query_cookie);
 $row_cookie = mysql_fetch_array($result_cookie);
于 2013-09-13T08:23:23.623 に答える
1

電子メールまたはユーザー名フィールドが一意であり、SQL インジェクションの可能性が拒否されると仮定して、次を試してください。

if (isset($_POST['remember'])) {
    $query_cookie = ("SELECT id FROM users 
        WHERE email = '$email' OR username = '$username'");
    $result_cookie = mysql_query($query_cookie);
    if ($result_cookie) {
        $row_cookie = mysql_fetch_array($result_cookie);
        $id = $row_cookie['id'];
        setcookie("Remember", $id, strtotime('+30 days'));
        echo $id;
    }
}

結果をフェッチしてからidtry:を取得します$row_cookie['id']

bcryptハッシュに使用することをお勧めします。これは、ハードウェアで拡張可能なハッシュ アルゴリズムです。

詳細情報を参照してください。

  1. PHPでパスワードをハッシュするためにbcryptをどのように使用しますか?
  2. 「ログインしたままにする」 - 最良のアプローチ
于 2013-09-13T08:25:37.760 に答える
0

レコードが返されたかどうかを確認します。

  if(isset($_POST['remember']))
  {
      $query_cookie = ("SELECT id FROM users WHERE email = '$email' OR username = '$username'"); 
      $result_cookie = mysql_query($query);
      if($result_cookie === FALSE) {
          echo "Could not successfully run query ($query) from DB: " . mysql_error();
          exit;
      }
      $row_cookie = mysql_fetch_array($result_cookie); // LINE 36
      $id = $row_cookie; // Will be hashed before using
      setcookie( "Remember", $id, strtotime( '+30 days' ) ); 
      echo $id;
   }
于 2013-09-13T08:35:42.440 に答える