2013-10-15 79 views
0

我想隨機化管理員選擇的許多用戶。從POST中獲取動態變量

首先,我有一個從「用戶」表中讀取所有名稱的頁面。然後我用旁邊的複選框顯示名稱,以便管理員可以取消選擇不會參與的名稱。

<input name="User<? echo $rows['UserID']; ?>" type="checkbox" value="1" checked/> 

因此,它會設置像User1 = 1; User2 = 0; User3 = 1,依此類推......

接下來,我想向數據庫中寫入在表單中選擇的用戶,以便我可以再次讀取該表以隨機化參與者。我如何從前面的表單讀取動態變量?我試圖從POST讀取變量並將其存儲在變量播放器(即:用戶1的值存儲在PLAYER1變量)......這一點,但似乎並沒有工作:

$x = 1; 
while ($x <= $total_records) { 
    ${"Player" . $x} = $_POST[ ${"User" . $x} ]; 
    $x++; 
    echo "Player" . $x . " = " . ${"Player" . $x} . "<BR>"; 
} 

結果是「Player1 =」,「Player2 =」。總是空着。

任何想法,或更簡單的方法來做到這一點? ;) 謝謝!

回答

2

我會推薦一個單獨的方法。而不是爲每個複選框創建一個不同的名稱,如何使他們成爲一個數組,它們的值是用戶的ID?

例如:

<input type="checkbox" name="User[]" value="<? echo $rows['UserID']; ?>" /> 

然後,你只需要重複提交陣列上:

if (isset($_POST['User']) && is_array($_POST['User'])) { 
    foreach ($_POST['User'] as $userId) { 
     // do something with the user id! 
    } 
} 

如果你想保持列表作爲,那麼,一個「清單」被重用,你可以implode()該公司發佈的數組和explode()當你需要再次使用它:

$combinedIds = implode(',', $_POST['User']); 
// now you have 1,3,17 

$splitIds = explode(',', $combinedIds); 
// now you have array(1, 3, 17) 

您可以將列表存儲在數據庫,會話變量等中。如果您存儲在會話變量中,則還可以直接存儲數組(無論哪個更容易= P)。

+0

+1。這更清潔。 –

+0

這聽起來很棒。因此,如果我不需要在數據庫中編寫參與者,就可以處理arry,我想直接用「UserName」替換「UserID」會更好,因爲我不需要用戶ID來隨機播放列表。因此,如果我更改表單以將值設置爲UserName而不是UserID,它是否仍然有效?我只是不確定User []正在做什麼... – Andrewww

+0

@Andrewww是的,你可以用你想要的任何唯一標識符替換UserId;我會建議不要使用他們的實際名稱,除非這些名稱是嚴格獨特的。就HTML表單元素而言,User []'表示所有共享該名稱的元素都是名爲'User'的「數組」的一部分。當提交表單時,它將作爲一個可用數組提交,以便爲您節省創建一個工作的空間=] – newfurniturey