为什么我从复选框中获取字符串而不是数组?

时间:2012-03-12 07:36:54

标签: codeigniter

我的表单中有复选框,它会返回字符串而不是数组,就像它应该的那样。谁能告诉我我的代码有什么问题?

以下是视图中的代码:

    <?php echo form_open('backOfficeUsers/deleteMoreUsers');?>
            <table border="0" cellpadding="4" cellspacing="1" bgcolor="#02659E" width="500">
                <tr bgcolor="#E9E8ED">
                    <td align="center">
                        <b>User ID</b>
                    </td>
                    <td align="center">
                        <b>User Name</b>
                    </td>
                    <td align="center">
                        <b>Password</b>
                    </td>
                    <td align="center">
                        <b>Select for delete</b>
                    </td>
                    <td align="center">
                        <b>Delete</b>
                    </td>
                </tr>

<?php

    foreach ($users as $key => $user) 
    {
        echo form_open('backOfficeUsers/deleteUser');
        echo form_hidden('dpage', 'backOfficeUsers/displayAllUsers');
        echo form_hidden('rid', $user['id']);
        echo"<tr bgcolor='#E9E8ED'>";
        echo "<td>" . anchor("backOfficeUsers/displayEditUserForm/$user[id]/", $user['id']) . "</td>";
        echo "<td>" . $user['username'] . "</td>  ";
        echo "<td>" . $user['password'] . "</td>  ";
         echo "<td>" . form_checkbox('userdelete[]', $user['id']) . "</td>  ";
        $confirm = "onclick='return confirmSubmit();'";
        echo"<td>";
        echo form_submit('submit', 'Delete', $confirm);
        echo"</td></tr>";
        echo form_close();
    }
?>
            </table>
            <?php echo form_submit('submit', 'Delete All Selected Users');?>
            <?php echo form_close();?>
        </div> 

当我从我的控制器进行var转储时,我得到字符串string(3)“200”(而200是行id。

以下是控制器的代码:

foreach ($this->input->post('userdelete') as $row){
   $deleteWhat = $row;  
   var_dump($deleteWhat);
   die(); 
}

此打印字符串(3)和第一行的ID。

1 个答案:

答案 0 :(得分:1)

编辑:我刚抓到这个:

您有嵌套的<form>标记,这些标记无效且容易出现意外行为,您必须先修复(高优先级)。我不知道你需要删除哪一个,因为我不知道你的应用程序,但看起来foreach里面的那些不应该在那里,否则你不需要发布一个价值数组。

无论如何,假设不是的情况......


如果这是您的代码:

foreach ($this->input->post('userdelete') as $row){
    $deleteWhat = $row;
}

然后每次迭代中的$deleteWhat包含已发布的字符串,无论该复选框的value中是什么。

这个数组:

$this->input->post('userdelete')

它包含从form_checkbox('userdelete[]', $user['id'])

发布的所有内容

您的代码运行正常。

请记住以下几点:

    由于括号,
  • <input name="somename[]">将作为值数组发布。
  • $_POST['somename']等于$this->input->post('somename'),除非未设置该值(第一个生成未定义的变量通知,第二个返回FALSE
  • 您可以指定以下键:<input name="somename[hello]">
  • <input name="somename[hello][]">将发布一系列数组等
  • 复选框除非经过检查,否则不会发布任何内容。