2013-10-15 74 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