0

我正在运行以下代码,但它给了我以下错误。我已经阅读了几篇关于SO的文章,仍然没有用。我得到的错误是:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/xyz/public_html/13/beta/signup.php on line 49
Warning: Cannot modify header information - headers already sent by (output started at /home/xyz/public_html/13/beta/signup.php:49) in /home/xyz/public_html/13/beta/signup.php on line 69

我的PHP脚本:(我已经标记了49&行69

if(isset($_POST['submit'])&&$_POST['submit']=='Login')
{
    $err = array();
    if(!$_POST['username'] || !$_POST['pass'])
        $err[] = 'All the fields must be filled in!';

    if(!count($err))
    {
        $_POST['username'] = mysql_real_escape_string($_POST['username']);
        $_POST['pass'] = mysql_real_escape_string($_POST['pass']);
        $_POST['remember'] = (int)$_POST['remember'];

        $row = mysql_fetch_assoc(mysql_query("SELECT id,user,email,clg FROM users WHERE user='{$_POST['username']}' AND pass='".md5($_POST['pass'])."'"));-->line 49

        if($row['user'])
        {

            $_SESSION['user']=$row['user'];
            $_SESSION['id'] = $row['id'];
            $_SESSION['clg'] = $row['clg'];
            $_SESSION['email'] = $row['email'];
            $_SESSION['remember'] = $_POST['remember'];
            setcookie('tcookie',$_POST['remember']);
            header("Location: index.php");
            exit;
        }
        else $err[]='Wrong username and/or password!';
    }

    if($err)
    $_SESSION['msg']['login-err'] = implode('<br />',$err);

    header("Location: signup.php");-->line 69
    exit;
}
4

3 回答 3

5

您的mysql_query函数返回错误,而不是结果。尝试:

$res = mysql_query("SELECT id,user,email,clg FROM users WHERE user='{$_POST['username']}' AND pass='".md5($_POST['pass'])."'");
if ($res === false) {
    echo mysql_error();
    die;
}
$row = mysql_fetch_assoc($res);

这将帮助您获取错误信息。

一旦该错误消失,您可能会发现“标头已发送错误”也消失了,这是已经打印到输出的结果(可能是错误消息)。


更新:对于您的“未选择数据库”错误,您需要在使用mysql_select_db($databasename);之前使用mysql_query(). 否则,mysql 不知道您要查询哪个数据库。

此外,您可能想考虑使用 PDO,它是访问 MySQL 数据库的另一种方式,而且它更安全且更易于使用 (IMO)。

于 2013-01-14T07:17:33.930 回答
1

在执行 mysql_query 之前检查您是否正确执行了 mysql_connect 并与 MySQL 服务器建立了有效连接。顺便说一句,Fabian Tamp 对 PDO 的看法是正确的。mysqli 扩展也比 mysql 更好。它更快,更稳定。

于 2013-01-14T07:25:53.260 回答
0

尝试删除第 69 行冒号后的空格。

于 2013-01-14T07:19:54.467 回答