我想随机化管理员选择的一些用户。
首先,我有一个页面可以读取“Users”表中的所有名称。然后我显示名称旁边的复选框,以便管理员可以取消选择不参加的名称。
<input name="User<? echo $rows['UserID']; ?>" type="checkbox" value="1" checked/>
所以,它会设置像User1 = 1这样的值; User2 = 0; User3 = 1,依此类推......
接下来,我想向数据库写入在表单中选择的用户,以便我可以再次读取该表以随机化参与者。如何从上一个表单中读取动态变量?我正在尝试从POST中读取变量并将其存储在变量Player中(即:User1值存储在Player1变量中)......但这似乎不起作用:
$x = 1;
while ($x <= $total_records) {
${"Player" . $x} = $_POST[ ${"User" . $x} ];
$x++;
echo "Player" . $x . " = " . ${"Player" . $x} . "<BR>";
}
结果是“Player1 =”,“Player2 =”。永远是空的。
任何想法,或更简单的方法吗? ;) 谢谢!
答案 0 :(得分: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)
您可以将列表存储在db,会话变量等中。如果存储在会话变量中,也可以直接存储数组(以较简单的方式为P)。