-2

可能重复:
mysql_fetch_array() 期望参数 1 是资源,选择中给出的布尔值

<?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';
?>

我正在尝试对我正在处理的网页实施邀请系统。但是,当尝试评估是否存在包含邀请代码的行时,我要么一无所获,要么收到此警告。在这种情况下的警告,但如果我将 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 回答