-2

重複の可能性:
mysql_fetch_array() は、パラメーター 1 がリソースであると想定しており、select でブール値が指定されています

<?php
    include 'connect.php';
    include 'header.php';

    $page = "signup.php";
    // receive the invite code:
    $code = $_POST['code'];
    $sql = "SELECT codes FROM invites WHERE codes='$code'";
    // check the table for matching codes
    $result = mysql_query($sql);
    // check if the request returned 1 or 0 rows from the database
    if (mysql_query($result)) {
        // end any previously defined sessions.
        session_start();session_unset();session_destroy();
        // start a new session
        session_start();
        // define the session variable.
        // this allows us to check if it's set later and is required for
        // the script to run properly.
        $code = $_POST["code"];
        mysql_query("DELETE FROM invites WHERE codes='$code'");
        header('Location: '.$page);
        exit;
    } else {
        echo "Invite invalid. Please try again later.";
        echo $code;
    }

    include 'footer.php';
?>

作業中の Web ページに招待システムを実装しようとしています。ただし、招待コードを含む行があるかどうかを評価しようとすると、何も表示されないか、この警告が表示され続けます。この場合の警告ですが、if 状態を ==1 に変更すると、コードに関係なくすべての人が許可され、==0 はさまざまなエラーをスローします。

4

3 に答える 3

3
if (mysql_query($result)) {

そこで mysql_num_rows を試してください。

于 2011-10-03T22:32:07.680 に答える
1

ここにはいくつか問題があります。

1) SQL インジェクションの脆弱性。スーパーグローバルな $_POST や $_GET などのユーザー指定の変数をクエリ内で直接渡さないでください。変数をクエリに入れる前に、少なくともmysql_real_escape_string()を変数に使用するか、パラメータ化されたクエリをよく調べてください。SQL の脆弱性を回避する最善の方法です。

2)

$result = mysql_query($sql);
// check if the request returned 1 or 0 rows from the database
if (mysql_query($result)) ....

これは、リクエストが 1 行または 0 行を返すかどうかをチェックしません。代わりに、ここでmysql_num_rows()を使用する必要があります

if(mysql_num_rows() == 1)  //or whatever you need to check

3)

session_start();session_unset();session_destroy();
// start a new session
session_start();

session_start() は、ページ内の何かの前に呼び出す必要があります。ここで呼び出し、設定解除、破棄、リコールのこの冗長性がなぜなのかわかりません。別のIDが必要な場合は、使用してくださいsession_regenerate_id();

そして、すでに他の人が言ったように、クエリでいくつかのエラーレポートを使用してください。

$result = mysql_query($sql) or die(mysql_error())

何が失敗したのか、どこで、なぜ失敗したのかを実際に確認できます。

于 2011-10-03T22:38:20.780 に答える
0

問題はあなたの質問です。まず、ステートメントを確認して、これを使用します。

$result = mysql_query($sql) or die(mysql_error());

これの代わりに

$result = mysql_query($sql);

したがって、SQLクエリにエラーがあるかどうかがわかります。

于 2011-10-03T22:30:26.413 に答える