[英]PHP: $_SESSION as an array doesn't work, won't let me add new items?
我有一個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']);
}
然后print_r(array_values($_SESSION['nombreRol']));
會話並再次開始,這次嘗試使用以下命令將其打印為數組: 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]);
}
然后嘗試打印會話數組:
print_r(array_values($_SESSION['nombreRol']));
表明:
數組([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
綁定變量。 如今,沒有任何理由制造SQL注入缺陷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.