1

我对复选框输入中的特定数组有疑问。

$insert .= '<tr>
<td>' .$uname. '</td>
<td>' .$fname. '</td>
<td>' .$lname. '</td>
<td>' .$email. '</td>
<td>'.(($admin == 'y') ? 'Admin':'User').'</td>
<td><input type="checkbox" name="change['.$uid.']" 
           value="'.(($admin == 'y')?'n':'y').'"/>'
                   .(($admin == 'y')?'Make a user':'Make an admin user').'</tr>';

从我一直在阅读的内容来看,如果有多个复选框,这应该创建一个可以运行的数组。$uid 是user id,名称显示为 change[1]、change[2] 等。这有效。

问题是当我通过这样的while语句运行它时:

while(list($key, $val) = each($_POST['change'])) {

我收到这条消息:

Warning: Variable passed to each() is not an array or object

有谁知道为什么会发生这种情况以及如何解决?

4

4 回答 4

0

复选框的名称不应包含索引值:

<td><input type="checkbox" name="change[]" value="'.(($admin == 'y')?'n':'y').'"/>'.(($admin == 'y')?'Make a user':'Make an admin user').'</tr>';

于 2012-05-18T13:26:31.700 回答
0
//$uid is unique, so you perhaps might use this
// make sure $uid is set correctly
// This is correct for multiple checkboxes

<input type="checkbox" name="change['.$uid.'][]" ... 
于 2012-05-18T13:32:37.050 回答
0

您需要使复选框名称 = change[]

并且值 = $uid

然后您可以遍历 $_POST['change'] 并检索 $uid

编辑请记住,仅发送选中的复选框值

于 2012-05-18T13:36:20.467 回答
0

提交时未创建您的数组。我拿了你的代码并制作了所需的表格等。

var_dump($_POST['change']);返回 NULL,即使我删除了 $uid。

我希望我能告诉你原因,但看起来它“应该”对我有用。我建议清理你的代码,将三元运算符取出来更美观,然后仔细检查你的引号。PHP 讨厌单引号,即使它们理论上应该可以工作,例如在 POST 数组 ('change') 的参数中,引号可能会混淆它。

好吧 PHP 不讨厌单引号,你只需要小心它们,就好像它们使用不正确,这意味着代码不会被解析......

于 2012-05-18T13:57:43.097 回答