Обработка пустых чекбоксов в php

216
08 июля 2017, 10:59

Есть следующий html-код:

<form action="#" method="post">
    <div class="ingridients">
        <div class="ingridient">
            <input type="text" class="product_count" name="ing[]" placeholder="Название продукта">
            <label><input type="checkbox" name="ing_to_product[]">Добавить одноименный продукт?</label>
        </div>
    </div>
    <p id="add_ing">Добавить ингредиент</p>
    <button name="submit">Отправить</button>
</form>
<script src="/template/js/libs.min.js"></script>
<script>
    $('#add_ing').click(function(){
        $('.ingridients').append("<div class='ingridient'><input type='text' class='product_count' name='ing[]' placeholder='Название продукта'><label><input type='checkbox' name='ing_to_product[]'>Добавить одноименный продукт?</label></div>");
    });
</script>

По клику на "добавить ингредиент" добавляет еще один div ingridient. Нужно отслеживать чекбокс у каждого ингредиента, т.е. если не отмечен - передаем 0, если отмечен - передаем 1. Как правильно это сделать? PHP код обработчика:

$ingridients = $_POST['ing'];
$ing_to_product = $_POST['ing_to_product'];
for ($i=0; $i < count($ingridients); $i++) { 
  $ing[$i]['ingridient'] = $ingridients[$i];
  $ing[$i]['to_product'] = $ing_to_product[$i];
}

Пока что он только склеивает эти 2 массива, но пустое значение checkbox не передается. Видел подобие решения со скрытым input'ом, который передает 0, если чекбокс неактивен. Кто знает решение этой проблемы?

Answer 1

Сейчас не могу вспомнить точно, как это реализовавыл, но, точно помню, что я отслеживал активность check-box. Было примерно так:

if (isset($_POST['ing_to_product[]'])) 
   foreach($_POST['ing_to_product[]'] as $key=>$value) 
      echo $value.'<BR>'; 
Answer 2

Думаю так получится:

<div class="ingridients">
        <div class="ingridient">
            <input type="text" class="product_count" name="ing[]" placeholder="Название продукта">
            <input type="hidden" name="ing_to_product[]" value="0">
            <label><input type="checkbox" onchange="$(this).parents('.ingridient').find('input[name^=ing_to_product]').val($(this).is(':checked')?1:0)">Добавить одноименный продукт?</label>
        </div>
</div>
READ ALSO
Достать все сообщения с публичного чата Telegram

Достать все сообщения с публичного чата Telegram

Как спарсить заданное пользователем количество сообщений с публичного чата Telegram?

332
Уникализация массива

Уникализация массива

Есть массив из двух элементов такого вида:

219