Флажок в цикле while

Я пытаюсь создать функцию, в которой пользователи могут проверить сообщение для удаления. Очевидно, что если будет проверено более одного сообщения, все они будут удалены.

У меня есть следующий код

<form action="process.php" method="post">
    <input type="hidden" name="deleteMessages" />
    <?php
    while($row=mysql_fetch_assoc($q))
    {
        if($row['to_viewed'] == 0)
        {
        ?>
        <tr>
            <td><input type="hidden" name="check_box_1" value="0" />
                <input type="checkbox" name="check_box_1" value="1" />
            </td>
            <td><b><a href='<?php echo $_SERVER['PHP_SELF']; ?>?p=view&mid=<?php echo $row['id']; ?>'><?php echo $row['title'] ?></a></b></td>
            <td><b><a href='<?php echo $_SERVER['PHP_SELF']; ?>?p=view&mid=<?php echo $row['id']; ?>'><?php echo $row['from']; ?></a></b></td>                
            <td><b><?php echo $row['created']; ?></b></td>
        </tr>
        <?php
        }
        else if($row['to_viewed'] == 1)
        {
        ?>
        <tr>
            <td><input type="hidden" name="check_box_1" value="0" />
                <input type="checkbox" name="check_box_1" value="1" />
            </td>
            <td><a href='<?php echo $_SERVER['PHP_SELF']; ?>?p=view&mid=<?php echo $row['id']; ?>'><?php echo $row['title'] ?></a></td>
            <td><a href='<?php echo $_SERVER['PHP_SELF']; ?>?p=view&mid=<?php echo $row['id']; ?>'><?php echo $row['from']; ?></a></td>                
            <td><?php echo $row['created']; ?></td>
        </tr>
        <?php
        }
    }
    ?>
    <input type="submit" value="Delete All" />
    </form>

Я хочу передать флажок, и если значение равно 1, обработать его и удалить. Но как мне добиться этого с несколькими сообщениями, независимо от того, есть ли одно сообщение или десять? Спасибо


php
person sark9012    schedule 05.12.2010    source источник


Ответы (3)


В вашей форме укажите:

<input type="checkbox" name="check_box_delete[]" value="<?php echo $row['id']; ?>" /> 

Затем обработать:

if(isset($_POST['check_box_delete']))
{
    foreach($_POST['check_box_delete'] as $id)
    {
        // Delete $id
    }
}
person fred    schedule 05.12.2010
comment
Отлично спасибо. Я просто не мог понять, как использовать здесь массив! - person sark9012; 06.12.2010
comment
Я бы не стал использовать foreach. Вы можете сделать это в одном SQL-запросе. - person mpen; 06.12.2010
comment
Хотя вы могли бы сделать это без foreach (или любого метода цикла), было бы очень сложно выполнить все необходимые проверки аутентификации и т. д. Было бы хорошо создать один запрос на удаление после того, как все проверки были выполнены. - person fred; 06.12.2010
comment
Все сделано, реализовано и работает на славу. Спасибо за подсказку бутон. - person sark9012; 06.12.2010

Вы можете позволить php хранить несколько значений в массиве, назвав поля ввода суффиксом обозначения массива []. Например, все флажки с именем checkbox[] будут сохранены в $_POST['checkbox'][]. Обратите внимание, что это может быть неприменимо к флажкам, поскольку их значение $_POST существует только в том случае, если они были отмечены.

person Cobra_Fast    schedule 05.12.2010

<input type="checkbox" 
       name="mid_to_delete[]" 
       value="some message id"
       id="mid_to_delete_some_message_id">
<label for="mid_to_delete_some_message_id">Delete "Some subject"</label>

а потом

<?php
    foreach ($_POST['mid_to_delete'] as $mid) {
        delete_some_message_id($mid);
    }
?>

Поскольку отправляются только успешные элементы управления, а снятые флажки не являются успешными, все полученные вами значения будут выбраны для удаления. (Очевидно, что вам все равно нужно выполнить auth/authz, чтобы убедиться, что удаляемые сообщения — это те, которые пользователю разрешено удалять)

person Quentin    schedule 05.12.2010