我的SQL函数是返回正确的结果,还是只返回列中的第一个条目



我正在开发一个网站,我正在尝试检查用户级别并显示结果。我使用的函数从数据库中选择user_lvl并返回结果(user_lvl是一个int(。当用户登录时,我有一个等于这个函数的变量。然后,用户的会话变量被设置为这个。我遇到的问题是,当我为用户回显数据时,结果并不正确。我很确定它选择的是数据库中的第一个条目,而不是当前登录的用户。我知道我可能缺少一些简单的东西,但我如何获得我想要的结果?

这是代码:

// here is the function to get the user level from the databse 
function getUserLvl() {
global $conn;
$sql = "SELECT user_lvl FROM users";
$Lvl = mysqli_query($conn, $sql);
$getUserLvl = mysqli_fetch_assoc($Lvl);
return $getUserLvl;
}

这是登录脚本,我添加了所有这些,只是为了更容易理解,但涉及的主要部分将在顶部分开。

$userLvl = getUserLvl();
session_start();
$_SESSION['userLvl'] = $userLvl;
<h3 class="ui center aligned header">User Level: <?php echo implode(',', $_SESSION['userLvl']) ?></h3>

<?php
require_once 'publicFunction.php'; // load functions script to access user variables e.g getUserLvl
if (isset($_POST['login-submit'])) {
require 'config.php';
$userMail = $_POST['user'];
$pass = $_POST['password'];
$userLvl = getUserLvl();
if (empty($userMail) || empty($pass)) {
header("Location: ../index.php?error=emptyFields");
exit();
} else {
$sql = "SELECT * FROM users WHERE username=? OR email=?";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
header("Location: ../index.php?error=sqlError");
exit();
} else {
mysqli_stmt_bind_param($stmt, "ss", $userMail, $userMail);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if ($row = mysqli_fetch_assoc($result)) {
$passCheck = password_verify($pass, $row['password']);
if ($passCheck == false) {
header("Location: ../index.php?error=invalidPassword");
exit();
} else if ($passCheck == true) {
session_start();
$_SESSION['userId'] = $row['userID'];
$_SESSION['username'] = $row['username'];
$_SESSION['userLvl'] = $userLvl;
header("Location: ../index.php?login=Success");
exit();
} else {
header("Location: ../index.php?error=invalidPassword");
exit();
}
} else {
header("Location: ../index.php?error=invalidUsername");
exit();
}
}
}
} else {
header("Location: ../index.php");
exit();
}

您当前的SQL语句没有任何where条件来指定正确的用户。假设您有一个用户ID列(我们称之为user_id(,那么您应该将查询调整为如下所示:

$sql = "SELECT user_lvl FROM users WHERE user_id = " . $userID;

其中,$userID是当前用户的ID。