登录仅在单击“提交”按钮时工作两次

时间:2012-05-19 23:16:40

标签: php mysql

我需要您的帮助才能使用此登录脚本。当用户注册时,数据库中的列active被设置为零(0),并且激活链接被发送到他们提供的电子邮件。单击激活链接后如果成功,则其各自的active列将设置为1。

但只有当我点击两次提交按钮时,才能正确组合用户名和密码。

在第一次点击时,我得到以下行

注意:未定义的索引:请记住第37行的C:\ wamp \ www \ church \ login.php

尚未验证

但是当我第二次点击登录时。

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

        }
    }
}
?>

2 个答案:

答案 0 :(得分:1)

if ($_POST['remember']) {更改为if (isset($_POST['remember']) && $_POST['remember']) {

老实说,从错误消息中,它应该是非常明显的,尤其是。看到你的脚本中的其他地方都有isset测试代码。

答案 1 :(得分: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";
        }
    }