почему я получаю строку вместо массива из моих флажков? - PullRequest
0 голосов
/ 12 марта 2012

В моей форме есть флажки, которые возвращают мне строку вместо массива, как и должно быть. Может кто-нибудь сказать мне, что не так с моим кодом?

Вот код из вида:

    <?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 dump из моего контроллера, я получаю строку string (3) «200» (а 200 - идентификатор строки.

Вот код контроллера:

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

Эта строка для печати (3) и идентификатор первой строки.

1 Ответ

1 голос
/ 12 марта 2012

РЕДАКТИРОВАТЬ: Я только что поймал это:

У вас есть вложенные теги <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][]"> опубликует массив массивов и т. Д.
  • Флажки вообще ничего не публикуют, если они не отмечены.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...