不确定sql或php是否出错

不确定sql或php是否出错,php,mysql,Php,Mysql,我目前正在Youtube上关注Phpacademy的Alex编写的名为Register&Login/PHP教程的教程。。我在第5部分,这里是login.php <?php include 'core/init.php'; if (empty($_POST) === false) { $username = $_POST['username']; $password = $_POST['password']; if (empty($username) ==

我目前正在Youtube上关注Phpacademy的Alex编写的名为Register&Login/PHP教程的教程。。我在第5部分,这里是login.php

<?php
include 'core/init.php';

if (empty($_POST) === false) { 

    $username = $_POST['username']; 
    $password = $_POST['password']; 

    if (empty($username) === true || empty($password) ===   true) {

        $errors[]  = 'You need to enter a username and password ';

    } else if (user_exists($username) === false) {
        $errors[] = 'We couldn\'t find that username. Have you registered?';
    } 
    else if (user_active($username) === false){
        $errors[] = 'You havn\'t activated your account!';  
    } 
    else  { 
        $login = login($username, $password);
        if ($login === false) {
            $error[] = 'That username/password combination is incorrect';
        } else {
        $_SESSION['user_id'] = $login;
        header('Location: index.php');
        exit();
        }
    } 

}

print_r($errors);

?>

下面是users.php

<?php

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

function user_active($username) { 
$username = sanitize($username); 
return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '.$username'  AND `active` = 1 ") , 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);
    return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '.$username' AND `password` = '.$password'"), 0) == 1) ? $user_id : false;
}
?>


删除点

您的SQL查询将返回错误结果。否则,如果他们输入的用户名是
jond
,您将在数据库中搜索
.jond

return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '.$username'"), 0) == 1) ? true : false;
删除查询中
$username
$password
之前的

"SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'"

您的查询需要稍微调整一下。删除用户名前面的句点,因为它位于双引号内

return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'"), 0) == 1) ? true : false;

该文件中的其他查询也是如此。正如在评论中提到的,您确实应该从不推荐的mysql_*函数切换到PDO/mysqli,这样您的代码在未来的PHP版本中仍然可以工作,并且您不会受到注入黑客的攻击。

您的代码总体上相当糟糕。你应该不要像那样嵌套你的mysql调用。这样的嵌套意味着您认为DB操作永远不会失败。这是一个非常糟糕的假设

话虽如此,你的问题至少有一个根源:

return (...snip ... WHERE `username` = '.$username'"), 0) == 1) ? true : false;
                                        ^--- here

您在该查询中嵌入了一个
,使您的所有用户名看起来都像
.foo
,而不仅仅是
foo
。问题存在于
user\u exists()
user\u active()
login()

警告您的代码容易受到sql注入攻击。此外,不要只使用md5存储密码。包括盐。@DanielAWhite你怎么知道的?他还没有分享他的消毒方法,也没有找到更新的教程。mysql_*函数已弃用,即将从该语言中删除。@Chris Brown,我同意。。仅用于教育目的..我故意这么做,因为它向我显示了以下警告:mysql_result()希望参数1是资源,布尔值在第10行数组中的C:\xampp\htdocs\Core\users.php中给出([0]=>您尚未激活您的帐户!)我已经将该值更改为1I,我是故意这样做的,因为它向我显示了以下警告:mysql_result()希望参数1是资源,布尔值在第10行数组中的C:\xampp\htdocs\Core\users.php中给出([0]=>您尚未激活您的帐户!)我已经将该值更改为1
return (...snip ... WHERE `username` = '.$username'"), 0) == 1) ? true : false;
                                        ^--- here