Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 登录表单总是需要多次尝试_Php_Html - Fatal编程技术网

Php 登录表单总是需要多次尝试

Php 登录表单总是需要多次尝试,php,html,Php,Html,我的PHP登录脚本有点问题。当用户登录时,它只在第二次尝试后工作,没有错误,但看起来用户在第一次尝试时输入了错误的密码 有时,当我测试站点时,在我第一次尝试登录后,它会将我发送回登录页面。然后我手动输入主页的url,它有时会让我去那里。(顶部有一些php检查用户是否已经登录,所以我猜有时登录脚本会将会话设置为true) 但大多数情况下,它不会这样做。它只会将我重定向回登录,而不会打印错误消息。我相信问题出在主页的顶部,而不是登录脚本,因为在删除重定向后,如果mysql没有返回一行与用户/密码匹配

我的PHP登录脚本有点问题。当用户登录时,它只在第二次尝试后工作,没有错误,但看起来用户在第一次尝试时输入了错误的密码

有时,当我测试站点时,在我第一次尝试登录后,它会将我发送回登录页面。然后我手动输入主页的url,它有时会让我去那里。(顶部有一些php检查用户是否已经登录,所以我猜有时登录脚本会将会话设置为true)

但大多数情况下,它不会这样做。它只会将我重定向回登录,而不会打印错误消息。我相信问题出在主页的顶部,而不是登录脚本,因为在删除重定向后,如果mysql没有返回一行与用户/密码匹配的内容,它将引导我进入登录页面

这是我的登录脚本

<?php
session_start();
// Include required MySQL configuration file and functions



// Check if user is already logged in
if (isset($_SESSION['logged_in'])) {
    // If user is already logged in, redirect to main page
    redirect('home.php');
}
else {
        // Make sure that the user submitted a username/password and username
        // only consists of alphanumeric Chars

        if ( (!isset($_POST['username'])) || (!isset($_POST['password'])) OR
             ( !ctype_alnum($_POST['username'])) ) {

                redirect('login.php');
            }

        // Connect to database

        $mysqli = @new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

        if (mysqli_connect_errno()) { printf ("Unable to connect to database %s",
                                        mysqli_connect_error());
                                        exit();
            }
        //Escape any unsafe characters before querying database
        $username = $mysqli->real_escape_string($_POST['username']);
        $password = $mysqli->real_escape_string($_POST['password']);

        // construct SQL statement for query & execute
        $sql = "SELECT * FROM peeps WHERE name = '" . $username . "'
                AND pword = SHA1('" . $password . "') ";

        $result = $mysqli->query($sql);

        // If one row is returned, username and password are valid.
        if ($result->num_rows == 1 ) {
            // Set the session variable for login status to true
            $_SESSION['logged_in'] = true;
            $_SESSION['name'] = $username;
            echo "successfull ";
            redirect('home.php');
        }
        else { 
                echo "didnt return row<hr>";
                 redirect back to login page.
                redirect('loginPage.php');
            }
    }
?>

这是我主页顶部的代码

<?php
// Start session
session_start();
// Include required functions file
require_once('functions.php');
// Check login status... if not logged in redirect to login screen
    if (check_login_status() == false) {
        redirect('loginPage.php');
    }
$username = $_SESSION['name'];

?>

任何帮助都将不胜感激,如果你想进一步澄清我的意思,你可以注册,看看我在说什么

此外,这是我的第一个问题,因此,如果您对我的提问方式有任何评论,我们将不胜感激


谢谢

我假设第一个页面是处理loginPage.php(或loginPage.php本身)表单的脚本,第二个页面是经过身份验证后访问的页面


如果我没有弄错的话,问题似乎是有时你没有正确识别,这会再次将你重定向到登录。您能告诉我们check\u login\u status()函数的代码是如何运行的吗?

尝试通过替换

 if (check_login_status() == false) {
        redirect('loginPage.php');
    }


或者在主页顶部打印($\u会话)。

重定向()功能是什么样子的?一个潜在的问题是,在调用该函数之前,您正在回显内容,因此如果您在那里执行
标题
重定向,则可能会失败,因为标题已经发送。是的,这非常有效!谢谢你的帮助。你知道把它放在函数中是不是更好的做法吗?或者把if语句放在里面是正常的吗?不客气。通常,我放这行代码只是为了看看哪个会话没有被存储,然后我将从那里着手解决这个问题。如果一切正常,我将删除/注释它。
 if (!isset($_SESSION['name'])) { #could be any session variables that you like..
    redirect('loginPage.php');
}