2015-08-24 30 views
0

我無法將用戶名從列表發送到不同的php頁面。這是我的代碼:如何在while循環的每次迭代中發送不同的Session Array?

$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 

當我點擊第一個加學分鏈接,它開闢了測試。 php,但爲event2打印event2name和member1。當我點擊第二個添加信用點鏈接時,它會打開test.php,並打印相同的事件名稱和成員。 事件和成員的數量取決於在數據庫中創建了多少個事件,因此可能有2個事件,每個事件有2個成員,或者20個事件,所有成員的數量都不相同。

所以我的問題是,我怎麼能得到第一個鏈接顯示的第一個事件的成員和事件的名稱,第二個鏈接顯示的第二個事件的成員和事件名稱?

+0

從哪裏$ eventName的是越來越值?請分享您的代碼。 –

+0

對不起,我感到困惑。所有上面的代碼是另一個查詢內部while循環: 而($行= mysqli_fetch_array($結果)) –

回答

0

您目前覆蓋_SESSION [「事件」]和_SESSION [「用戶」]的元素,因此只有最後一個事件及其相關聯的用戶將被保存。
一種解決方案是使$ _SESSION [「事件」]的陣列,每個元件是所述數據爲一個事件。關鍵是事件名稱(不是事件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查詢代替嵌套查詢將是一個不錯的主意。
*爲一個刪除操作中的數據/參數不應當通過GET, but rather via POST轉移。

+0

感謝您的幫助,但我的問題是明確有關Add署名按鈕,不刪除,因爲已經工作它的方式,但我會聽取你的意見。如果我重寫$ _SESSION變量,是不是顯示最後添加信用點擊按鈕的信息?如果沒有將所有東西都存儲在一個大陣列中,是否有辦法做到這一點?因爲有些事件可以容納多達200人?感謝您提供的任何輸入! –

+0

我只是試圖實現你的代碼,而且我仍然遇到同樣的問題,它只會打印出第二個事件的ID。 –

相關問題