簡體   English   中英

PHP:$ _SESSION作為數組不起作用,不會讓我添加新項目嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM