0

このログイン スクリプトについて助けが必要です。ユーザーが登録すると、データベース内の列activeがゼロ (0) に設定され、提供された電子メールにアクティベーション リンクが送信されます。アクティベーション リンクがクリックされ、成功すると、それぞれのactive列が 1 に設定されます。

しかし、ユーザー名とパスワードの正しい組み合わせは、送信ボタンを 2 回クリックした場合にのみ機能します。

最初のクリックで、次の行が表示されます

Notice: 未定義のインデックス: C:\wamp\www\church\login.php の 37 行目に覚えておいてください

まだ確認されていません

しかし、2回目にクリックすると、ログインが機能します。

<?php
if (isset($_POST['submit'])) {
    $username = trim($_POST['username']);
    $username = strip_tags($_POST['username']);
    $username = htmlentities($_POST['username']);
    $username = stripslashes($_POST['username']);
    $username = mysql_real_escape_string($_POST['username']);
    $password = sha1($_POST['password']);

    if (isset($_POST['username']) && isset($_POST['password'])) {
        $query = mysql_query("SELECT username, password
                           FROM USERS
                           WHERE username = '$username'
                           AND password = '$password'") or die (mysql_error());

        $user = mysql_num_rows($query);
        if ($user == 1) {
            $row = mysql_fetch_assoc($query);
            if ($row['active'] == 1) {
                $_SESSION['logged_username'] = $username;
                if ($_POST['remember']) {
                    setcookie("CookieUser", $_SESSION['logged_username'], time() + 60 * 60 * 24 * 100, "/");
                    setcookie("CookiePass", $password, time() + 60 * 60 * 24 * 100, "/");

                    header('Location: http://127.0.0.1/church/index.php?id=1');
                }
            }
            if ($row['active'] !== 1) {
                echo "Not Verified Yet";
            }
        }
        else {
            echo "<div id='content' >";
            echo "<div class='OpenError' >";
            echo "Username & Password Combination Is Wrong";
            echo "</div>";
            echo "</div>";

        }
    }
}
?>
4

2 に答える 2

1

if ($_POST['remember']) {に変更if (isset($_POST['remember']) && $_POST['remember']) {

正直なところ、それはエラーメッセージ、特にから非常に明白であるはずです。issetスクリプト内の他の場所にテストコードがあることを確認します。

于 2012-05-19T23:19:34.193 に答える
0

問題、ログインしていないことではありません。die()リダイレクトヘッダーを送信した後、コードが送信されないため、そのページでコードを実行し続けることが問題です。また、ユーザーがを選択しない場合remember、何も起こりません。die(); (最初の問題)を修正するには、の直後に 追加するだけheader("location: ...");です。

なぜdie();後で必要なのheader("location: ...");ですか?

このheader()関数は、文字列(テキスト)をブラウザ(またはページを要求する他のプログラム)に送信します。header("location: ...");ただし、サーバーはとの違いを認識しないheader("somerandomthing: ...");ため、スクリプトの最後に到達するか、エラーが発生するか、クライアントが切断されるまで、コードの実行を継続します。したがって、コードの実行が続行されないようにするには、すべての呼び出しのdie();後に追加するだけです。 header("location: ...");

チェックしないことに関する更新'覚えている'

<?php
if ($user == 1) {
        $row = mysql_fetch_assoc($query);
        if ($row['active'] == 1) {
            $_SESSION['logged_username'] = $username;
            if ($_POST['remember']) {
                setcookie("CookieUser", $_SESSION['logged_username'], time() + 60 * 60 * 24 * 100, "/");
                setcookie("CookiePass", $password, time() + 60 * 60 * 24 * 100, "/");

            }
            // Redirect even if not 'remembered'
            header('Location: http://127.0.0.1/church/index.php?id=1');
            die;
        }
        if ($row['active'] !== 1) {
            echo "Not Verified Yet";
        }
    }
于 2012-05-19T23:24:17.173 に答える