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