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);

これは、エラー情報を取得するのに役立ちます。

そのエラーがなくなると、おそらく「headers already send error」も消えることがわかります。これは、何かがすでに出力に出力されているためです (おそらくエラーメッセージ)。


更新:「データベースが選択されていません」というエラーについては、使用するmysql_select_db($databasename);前に使用する必要がありますmysql_query()。そうしないと、mysql は、クエリしようとしているデータベースを認識できません。

また、PDOの使用を検討することもできます.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 に答える