Php 行为不端的登录脚本

Php 行为不端的登录脚本,php,mysql,Php,Mysql,我有一个PHP登录脚本,它应该使用输入的用户名和密码,对照MySQL中的值进行检查(密码通过SHA1加密),然后如果登录成功,将用户重定向到“dash.PHP”,如果登录失败,则打印错误。然而,每当我提交表单时,它只是重新加载login.php。。。我是在什么地方犯了愚蠢的错误还是遗漏了什么?很抱歉,我的邮件太多了 login.php(包含表单): //表单操作 //网站HTML //形式 用户名: 密码: login_functions.php: <?php function red

我有一个PHP登录脚本,它应该使用输入的用户名和密码,对照MySQL中的值进行检查(密码通过SHA1加密),然后如果登录成功,将用户重定向到“dash.PHP”,如果登录失败,则打印错误。然而,每当我提交表单时,它只是重新加载login.php。。。我是在什么地方犯了愚蠢的错误还是遗漏了什么?很抱歉,我的邮件太多了

login.php(包含表单):

//表单操作
//网站HTML
//形式
用户名:
密码:
login_functions.php:

<?php

function redirect_user ($page = '../login.php') {
    $url = "http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);

    $url = rtrim($url, '/\\');

    $url .= '/' . $page;

    //Redirect User

    header("Location: $url");
    exit(); //Quit the script.

}


function check_login($dbc, $username = '', $password = '') {
    $errors = array();

    if(empty($username)) {
        $errors[] = 'You forgot to enter your username.';
    } else {
        $u = mysqli_real_escape_string($dbc, trim($username));
    }

    if(empty($password)) {
        $errors[] = 'you forgot to enter your passord.';
    } else {
        $p = mysqli_real_escape_string($dbc, trim($password));
    }

    if (empty($errors)) {

        $q = "SELECT username, password FROM users WHERE username='$u' AND password=sha1('$p')";
        $r = @mysqli_query ($dbc, $q);


        //Check Results

        if(mysqli_num_rows($r) == 1) {

            $row = mysqli_fetch_array ($r, MYSQLI_ASSOC);

            return array(true, $row);
        } else {
            $errors[] = 'The username/password combination is incorrect.';
        }
    }

}


?>

您没有返回错误:

    return array(true, $row);
} else {
    $errors[] = 'The username/password combination is incorrect.';
    $return array(false, $errors);
}
并且您没有显示您的错误:

// Website HTML

<?php if ($errors):?>    
    <?php echo '<p>' . implode('</p><p>', $errors) . '<p>';?>
<?php endif;?>
//Form
<form class="contact-form" method="post" action="login.php">
//网站HTML
//形式

。你应该在重定向之前打印一些东西吗?如果已发送标题,则无法发送redirect@JayBlanchardOP正在转义查询中的所有值。是的,他们应该使用绑定参数,但这并不像写的那样容易受到攻击。只是提醒一下,加密和散列是两个不同的主题。我发现如果出现错误,您不会从函数
check\u login
返回任何内容。在重定向之前,尝试对
$check
$data
变量执行
var\u dump
。另外,在
dash.php
中发生了什么?您可能正在正确地重定向到
dash.php
,这是返回的重定向。Steve的有用说明。首先检查错误。你们可以在浏览器上找到你们的开发者工具,点击网络部分,在那个里你们可以看到你们的电话和回应数据。
// Website HTML

<?php if ($errors):?>    
    <?php echo '<p>' . implode('</p><p>', $errors) . '<p>';?>
<?php endif;?>
//Form
<form class="contact-form" method="post" action="login.php">