gpt4 book ai didi

PHP:$_SESSION 作为数组不起作用,不允许我添加新项目?

转载 作者:行者123 更新时间:2023-11-29 11:23:51 25 4
gpt4 key购买 nike

我有一个从用户检索信息的 SELECT 查询:

网站内的一些个人数据及其分配的用户角色可能不止一个(在示例中有两个)。

我想检索这些用户角色并将它们添加到 $_SESSION 全局变量中。

这是查询(在 phpMyAdmin 中测试它,它按预期工作:检索两行结果,因为用户是相同的,但他有两个角色 ROLE1 和 ROLE2):

$conectar = mysqli_connect(localhost, USER, PASS, DATABASE);
$consulta = "SELECT usuarios.userID, usuarios.userEmail, usuarios.userPass, usuarios.userFechaGeneracion, usuarios.userNombres, rolesUsuarios.nombreRol
FROM rolesUsuarios, usuarios
WHERE usuarios.userEmail='$email'
";
$buscarUsuario = mysqli_query($conectar,$consulta);
if ($buscarUsuario) {
$row = mysqli_fetch_array($buscarUsuario);
[here I have some pass check in place]
$_SESSION['usuario'] = $email;
$_SESSION['nombre'] = $row['userNombres'];
$_SESSION['uid'] = $row['userID'];
$_SESSION['nombreRol'] = $row['nombreRol'];
....

现在,$_SESSION['nombreRol'] 是一个字符串。当我打印它时,它只显示ROLE1。

所以我尝试将其转换为数组并通过它循环添加以下内容:

$_SESSION['nombreRol'] = array();
for ($i=0; $i < 3; $i++) {
array_push($_SESSION['nombreRol'], $row['nombreRol']);
}

然后终止 session 并再次开始,这次尝试将其打印为数组:print_r(array_values($_SESSION['nombreRol']));

结果显示:

Array ( [0] => ROLE1 [1] => ROLE1 [2] => ROLE1 )

我应该如何拥有数组中的所有角色才能使用它?

在 Shrikant Mavlankar 发表评论后,我尝试了以下方法:

                $rolesAsignados = array();
while($row = mysqli_fetch_array($buscarUsuario)){
array_push($rolesAsignados, $row['nombreRol']);
}

$_SESSION['nombreRol'] = array();
for ($i=0; $i < count($rolesAsignados); $i++) {
array_push($_SESSION['nombreRol'], $rolesAsignados[$i]);
}

然后尝试打印 session 数组:

print_r(array_values($_SESSION['nombreRol']));

它显示:

Array ( [0] => ROLE2 )

最佳答案

您的 WHERE 中没有加入。您将一个用户的记录与角色表中的每一行连接起来,因此您的结果集将会很大,但您只读取第一行。

$consulta = "SELECT usuarios.userID, usuarios.userEmail, usuarios.userPass, usuarios.userFechaGeneracion, usuarios.userNombres, GROUP_CONCAT(rolesUsuarios.nombreRol SEPARATOR '|') AS roles
FROM rolesUsuarios, usuarios
WHERE usuarios.userEmail='$email'
AND rolesUsarios.userID = usarios.userID
GROUP BY usarios.userID
";

然后像这样更改您的分配:

$_SESSION['nombreRol'] = explode('|', $row['roles']);

此外,切勿将未转义的变量放入 SQL 语句中。您应该使用 mysqli_real_escape_string() 或 mysqli::prepare 来绑定(bind)变量。现在没有任何借口可以创建 SQL 注入(inject)缺陷。

关于PHP:$_SESSION 作为数组不起作用,不允许我添加新项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38542024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com