2

您好,我正在 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 东西都很陌生,所以.. 如果你像孩子一样对我说话,我不会被冒犯.. 事实上它很感激。

谢谢。

4

2 回答 2

0

这是我的代码:

function user_exists($username) {
  $username = sanitize($username); 
  return (mysql_result(mysql_query("SELECT * FROM `users` WHERE `username` = '$username' "),0) ==1) ? true : false; 
}
于 2014-01-09T07:38:48.487 回答
0

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

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

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

此外,使用“LIKE”而不是“=”来测试查询可能是值得的

例如。

.....FROM `users` WHERE `username` LIKE '$username'.....
于 2012-09-03T00:03:07.583 回答