2

私はphpログイン機能を持っています。正しいユーザーでログインしようとすると、次のようなエラーが表示されます。

警告: ヘッダー情報を変更できません - 150 行目の /home/hapshou1/public_html/index.php の (/home/hapshou1/public_html/index.php:15 で出力が開始された) によって既に送信されたヘッダー

-

include "config.php";

if($_SERVER["REQUEST_METHOD"] == "POST")
{
    function antiinjection($data)
    {
        $filter_sql = mysql_real_escape_string(stripslashes(strip_tags(htmlspecialchars($data,ENT_QUOTES))));
        return $filter_sql;
    }

    $username = antiinjection($_POST['username']);
    $pass = antiinjection($_POST['password']);

    $login=mysql_query("SELECT username, password FROM user WHERE (username='$username' OR email='$username') AND password='$pass'");
    $found=mysql_num_rows($login);
    $r=mysql_fetch_array($login);

    if
    ((!empty($username)) &&
    (!empty($pass)))
    {
        if ($found > 0)
        {
            session_register("username");
            session_register("password");

            $_SESSION[username]     = $r[username];
            $_SESSION[password]     = $r[password];

            date_default_timezone_set("Asia/Jakarta");
            $date_log = date("j-F-Y, G:i ");

            mysql_query("update user set status='online', date_logged_in='$date_log' WHERE username='$_SESSION[username]'");
            header('location:home');
        }
        else
        {
            echo '<div class="error_log">
                    <p>Wrong username or password. Please try again.</p>
                </div>';
        }
    }
    else
    {
        echo '
            <div class="error_log">
                <p>Username and password are required.</p>
            </div>
        ';
    }
}

コードの何が問題になっていますか?

4

4 に答える 4

3

それでは、15 行目にあるものを見てください。

最も可能性の高いシナリオは、次のステートメントが出力を引き起こしたことです。

$found=mysql_num_rows($login);

mysql_queryこれは、あなたが返品するという事実によって引き起こされますfalse

これを考慮して、エラーを報告できます。

if (false === ($login=mysql_query("SELECT username, password FROM user WHERE (username='$username' OR email='$username') AND password='$pass'"))) {
    die(mysql_error());
}

実稼働環境でこのようなステートメントを使用することはお勧めできないdie()ため、代わりにロガーの使用を検討してください

ところで、PDO / mysqli の使い方を学びましょう。PDO には、すべてのエラーを例外に変換できるモードがあり、バグをより迅速に見つけるのに役立ちました。

于 2012-10-11T08:56:20.373 に答える
0

ob_start();コードの先頭に置き、ob_flush();最後に置く

常にリダイレクトexit();後に配置header

于 2012-10-11T08:54:21.377 に答える
0

コードを

 ob_start();

...



ob_flush();

このエラーが発生する理由は、ヘッダー値を設定するリクエストが行われた時点で、Web ページの本文の一部がすでにユーザーに送信されているためです。

exit();また、header() 呼び出しの後の現在のページの残りのコードが実行されないように、常に header() ステートメントの後に配置します。

于 2012-10-11T08:54:58.757 に答える
0

header('Location: http://www.example.com/');

ナガ、このコードを試してください:

   session_start();
date_default_timezone_set("Asia/Jakarta");
include "config.php";

if(isset($_POST['username']) && isset($_POST['password']))
{
    function antiinjection($data)
    {
        $filter_sql = mysql_real_escape_string(stripslashes(strip_tags($data)));
        return $filter_sql;
    }

    $username = antiinjection($_POST['username']);
    $pass     = antiinjection($_POST['password']);

    $login = mysql_query("SELECT username, password FROM user WHERE (username='$username' OR email='$username') AND password='$pass'");
    $r     = mysql_fetch_array($login);

    if((!empty($username)) && (!empty($pass)) && is_array($r))
    {
        if (count($r) > 0)
        {
            $_SESSION['username'] = $r['username'];
            $_SESSION['password'] = $r['password'];
            $date_log = date("j-F-Y, G:i");
            mysql_query("UPDATE user SET status = 'online', date_logged_in = '$date_log' WHERE username = '$_SESSION[username]'");
            header('Location: http://domen.com/');
        }
        else
        {
            echo '<div class="error_log">
                    <p>Wrong username or password. Please try again.</p>
                </div>';
        }
    }
    else
    {
        echo '
            <div class="error_log">
                <p>Username and password are required.</p>
            </div>
        ';
    }
} else {
    // do some action
}
于 2012-10-11T09:13:00.543 に答える