数组不是从多个复选框php创建的

时间:2012-05-18 13:23:51

标签: php arrays post checkbox

我在复选框输入中遇到特定数组的问题。

$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,名称显示为更改[1],更改[2]等等。这有效。

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

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

我收到此消息:

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

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

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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.'][]" ... 

答案 2 :(得分:0)

您需要设置复选框名称=更改[]

值= $ uid

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

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

答案 3 :(得分:0)

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

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

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

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