簡體   English   中英

如何在while循環的每次迭代中發送不同的會話數組?

[英]How to send a different Session Array each iteration of a while loop?

我在將用戶ID從列表發送到其他php頁面時遇到問題。 這是我的代碼:

$eventName = $row['Name'];
$_SESSION['event'] = $eventName;
$users= array();
    while($row2 = mysqli_fetch_array($result2)){

        echo "<li>".$row2['FirstName']." ".$row2['LastName']; // print the members

        $userID = $row2['ID'];
        $users[] = $row2['ID'];             
        $_SESSION['users'] = $users; //creates session array
        echo "<a href ='removeFromEvent.php?id=$userID&event=$eventName'><span class = 'REMOVE'>Remove</span></a></li><br>";

    }


    echo implode('<br>',$_SESSION['users']); //prints the IDs
    echo "<br>". $_SESSION['event'];
    echo "<a href ='test.php'><span class = 'REMOVE'>ADD CREDITS</span></a>";

因此,使用此代碼,它將在頁面上每個名稱列表的末尾打印出ID和事件的名稱。 但是,當我單擊鏈接轉到test.php時,它僅顯示列表中最后一個事件的ID和事件名稱。 這是test.php中的所有代碼:

<?php
    session_start();
    echo implode('<br>',$_SESSION['users']);
    echo $_SESSION['event'];

?>

該頁面在網站上的外觀如下:

 EVENT1 NAME 1. Member1 REMOVE 2. Member2 REMOVE ADD CREDITS (call this the first link) member1ID member2ID event1name EVENT2 NAME 1. Member1 REMOVE ADD CREDITS (and this is the second) member1ID event2name 

當我單擊第一個“添加積分”鏈接時,它將打開test.php,但會輸出event2name和member1作為event2。 當我單擊第二個“添加積分”鏈接時,它將打開test.php,並打印相同的事件名稱和成員。 事件和成員的數量取決於在數據庫中創建的事件數,因此可能有2個事件,每個事件具有2個成員,或者20個事件,而所有事件的成員數均不同。

所以我的問題是,如何獲得顯示第一個事件的成員和事件名稱的第一個鏈接,以及顯示第二個事件的成員和事件名稱的第二個鏈接?

當前,您正在覆蓋_SESSION ['event']和_SESSION ['users']元素,因此僅將存儲最后一個事件及其關聯的用戶。
一種解決方案是使$ _SESSION ['events']成為數組,每個元素都是一個事件的數據。 關鍵是事件名稱(不是事件ID?),每個值又是一個數組,其中包含與此特定事件關聯的所有用戶。

// initialize the 'events' array in _SESSION
$_SESSION['events'] = array();
while( $row=mysqli_fetch_array($result) ) {
    // $user will store the userIDs for this event
    $users = array();
    while($row2 = mysqli_fetch_array($result2)) {
        $users[] = $row2['ID'];
        printf('<li>%s %s <a href="removeFromEvent.php?id=%s&event=%s"><span class="REMOVE">Remove</span></a></li>'
            htmlspecialchars($row2['FirstName']),
            htmlspecialchars($row2['LastName']),
            urlencode($row2['ID']),
            urlencode($row['name'])
        );
    }
    // store the userIDs under the event name in the array $_SESSION['events']
    $_SESSION['events'][ $row['Name'] ] = $users;
}

在removeFromEvent.php中,您可以像這樣訪問數據:

if ( !isset($_GET['event'],$_GET['id']) ) {
    echo 'missing GET parameter';
}
else {
    $event = $_GET['event'];
    $id = $_GET['id'];
    if ( !isset($_SESSION['events'][$event]) ) {
        echo 'no such event in _SESSION';
    }
    else if ( !isset($_SESSION['events'][$event][$id]) ) {
        echo 'no such user in event';
    }
    else {
        ...
  }

筆記:
*也許用JOIN查詢而不是嵌套查詢是一個好主意。
* DELETE操作的數據/參數不應通過GET傳輸,而應通過POST傳輸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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