用户名和密码正确时无法登录


cannot login when username and password are correct

你好,我在php学院做这篇教程,学习php和mysql登录和注册表格。一切都很顺利。。他展示了如何识别正确的表达方式,但要创建函数来回应错误。。是的,听起来不错。因此,前两个错误正确响应,但实际验证user_id和whatknot的错误不起作用。它显示了我在用户名和密码组合不正确时创建的错误,即使我提交了正确的信息。我创建了一些虚拟用户,但他们都无法通过。

这是我的密码。。

include 'core/init.php';
include 'includes/overall/header.php';
if (empty($_POST) === false) {
$username = $_POST['username'];
$password = $_POST['password'];
if (empty($username) === true || empty($password) === true) {
$errors[] = 'Uh oh! You forgot to enter your username and password';
} else if (user_exists($username) === false) {
$errors[] = 'Who is that? Have you registered?';
} else if (user_active($username) === false) {
$errors[] = 'Account is not activated.';
} else {
$login = login($username, $password);
if ($login === false) {
$errors[] = 'That username and password combination is incorrect';
} else {
    $_SESSION['user_id'] = $login;
    header('Location:index.php');
    exit();
    }
}
print_r($errors);
}
include 'includes/overall/footer.php';

function logged_in() {
return (isset($_SESSION['user_id'])) ? true : false;
}
function user_exists($username) {
$username = sanitize($username);
$query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'");
return (mysql_result($query, 0) == 1) ? true : false;
}

function user_active($username) {
$username = sanitize($username);
$query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `active` = 1");
return  (mysql_result($query, 0) == 1) ? true : false;
}
function user_id_from_username($username) {
$username = sanitize($username);
return mysql_result(mysql_query("SELECT `user_id` FROM `users` WHERE `username` = '$username'"), 0, 'user_id');
}
function login($username, $password) {
$user_id = user_id_from_username($username);
$username = sanitize($username);
$password = md5($password);
$query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'");
return (mysql_result($query, 0) == 1) ? $user_id : false;
}

有人知道我做错了什么吗?我试过一些东西,但都不管用。例如,在视频中,他做的有点不同,并将他的查询排成一行,但这给了我错误,所以我按照他最初的方式做了,并使查询变为变量(我只知道我到底在说什么,哈哈)。。但这修复了错误。我试着对其他函数(未显示)这样做,但这导致了很多错误:(

这真的很愚蠢吗?我之前也遇到过类似的问题,我发现是因为缺少分号,但我盯着这个愚蠢的代码看了这么久,什么都没找到。。我重新看了教程系列中的视频,每个视频解释了这一切大约10次。。我的眼睛感觉要流血或爆炸了。一些评论表明,其他人也有类似的问题。。帮助

我对所有这些php-mysql的东西都是新手,所以…如果你像个孩子一样对我说话,我不会被冒犯。。事实上,这是值得赞赏的。

谢谢。

我是否正确理解您现在无法登录?

我过去也遇到过类似的问题。我看不出你的错误,但我会分享一种让我发现错误的方法。

  1. 将MySQL查询存储在一个变量中,作为字符串和从表单输入的数据
  2. 回显那个变量
  3. 在phpMyAdmin中测试输出的字符串-如果查询是错误的,它会提示您它有什么问题

此外,可能值得用"LIKE"而不是"="测试查询

例如。

.....FROM `users` WHERE `username` LIKE '$username'.....

这是我的代码:

function user_exists($username) {
  $username = sanitize($username); 
  return (mysql_result(mysql_query("SELECT * FROM `users` WHERE `username` = '$username' "),0) ==1) ? true : false; 
}