从查询中获取结果并返回值?PHP&;MySQLi

从查询中获取结果并返回值?PHP&;MySQLi,php,database,mysqli,associative-array,Php,Database,Mysqli,Associative Array,当我单击submit时,输入验证会起作用,但即使我正确输入了用户名和密码,该用户名和密码存储在我的数据库中,并考虑到散列,但我得到的只是错误消息,告诉我组合不正确 这是我的登录脚本: $username = $_POST['username']; $password = $_POST['password']; if (isset($_POST['submit']) === true) { $login = login($username, $password); if (empty($us

当我单击submit时,输入验证会起作用,但即使我正确输入了用户名和密码,该用户名和密码存储在我的数据库中,并考虑到散列,但我得到的只是错误消息,告诉我组合不正确

这是我的登录脚本:

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

if (isset($_POST['submit']) === true) {

$login = login($username, $password);

if (empty($username) === true || empty($password) === true) {
    $errors[] = "Please fill in all fields";
} elseif ($login === false) {
    $errors[] = "That username and password combination is incorrect";
} else {
    $_SESSION['login'] = $login;
    echo 'Logged in';
}
}
以下是功能:

function login($username, $password) {
    global $conn;
    $query = "SELECT userId FROM users where userName = '$username' AND userPass = '$password'";
    $result = mysqli_query($conn, $query);
    $row_count = mysqli_num_rows($result);
    if ($row_count >= 1) {
        return $query['userId'];
    } else {
        return false;
    }
}

我建议您尝试的第一件事是手动比较md5哈希密码和表中显示的密码。如果您绝对确定它们相等,请使用toad或phpmyadmin中的该值运行手动查询,看看是否得到结果。如果不是,问题可能在查询中。如果得到一个结果,请检查mysqli_num_rows函数,而不是返回用户id,在测试环境中回显它


您还做了哪些调试工作?

您可以将其简化为以下内容,但是我不建议在没有XSS清理的情况下获取用户输入。特别是对于登录之类的表

function login($username, $password) {
    global $conn;
    $password = md5($password);
    $query = "SELECT userId FROM users where userName = '$username' AND userPass = '$password' LIMIT 1";
    $result = mysqli_query($conn, $query);
    $row_count = mysqli_num_rows($result);
    if ($row_count >= 1) {
        return $query['userId'];
    } else {
        return false;
    }
}

我想您的代码需要一些修复,因为在查询数据库后检查参数是否为空,在检查其密码是否正确之前获取用户ID。。等等

但首先,在排队之后

    $query = "SELECT userId FROM users where userName = '$username' AND      userPass = '$password'";
你为什么不把它放进去

die($query);

运行页面,复制结果,将其粘贴到phpMyAdmin查询框中,然后查看结果是否符合您的需要。

Yeah仍然不起作用:/为什么您甚至有函数getUserId?你根本没有使用这些信息。我是说你是,但你以后再打。只需返回$query['userId']就不应该
$user\u id=$get\u user\u id['user\u id']
be
$user\u id=$get\u user\u id['userId']
@AndrewWilson没有返回该值,因此当我设置会话时,该值是稍后的用户iduse@SamLane对但是你不是在验证过程中请求相同的信息吗?查询在PhpMyAdmin中工作,并尝试在不搜索用户ID的情况下返回true,但仍然是相同的问题在这种情况下调试mysqli_num_rows语句,回显它并查看它返回的内容我只是尝试了一下,没有返回任何内容,这是否意味着它不工作,如果是0行,它会显示0吗?请从mysqli_num_rows函数中删除连接变量。您只需向其提供结果参数,通过回显查询字符串和mysqli_错误调试结果这很有意义,谢谢,但仍然是同一个问题,我完全删除了get user id函数并使用了您的代码,但问题仍然是一样的,查询在phpmyadmin中手动工作,为了方便起见,我现在还将其存储为纯文本密码。也没有消毒,因为我想我应该先让它工作,然后再添加它。我现在就更新代码,你能把它放在这里吗?您是否也在验证您的
md5($password)
是否与数据库的值相同?