checkbox unchecked как отловить событие?

265
14 апреля 2018, 17:24

Мне нужно отловить событие когда чекбоксы был отжаты (их может быть сколько угодно вставляются циклом в HTML таблицу), и занести его значение в таблицу MySQL. Так выглядит сама форма(лишнее убрал):

<form name="new_form" action="/admin/osvega_test" method="POST">        
    <input class="my_button" type="submit" name="upload_submit" value="save" style="width: 200px"/>
    <table style="width: 1000;" id="activeTable" class="editableTable" overflow = "scroll">
        <thead class="t_hdr">
            <tr class="header">
                <td><b>ID</b></td>
                <td><b>Печать</b></td>
            </tr>
        </thead>
        <tbody>
            <?php
            $i = 0;
            while ($row = $Result->fetch_assoc()) {
            $i++;
            ?>
            <tr  id="z_<?=$i?>">
                <td name = "post_id"><?=$row['id']?></td>
                <td>
                    <input type="checkbox" name="stamp[<?=$row['id']?>]" value="<?=$row['stamp']?>" <? if($row['stamp'] == 1)echo $check ?> id="chkbox" >
                </td>
            </tr>
            <? } ?> 
        </tbody>
    </table>
</form>

Так выглядит код обработчика:

<?php
foreach ($_POST['stamp'] as $id => $value)
{
    if (isset($_POST['stamp'])){
        $value = 1;
        $Database->query("UPDATE `izgotoviteli` SET stamp = $value WHERE id = $id");
    }
    else{
        $value = 0;
        $Database->query("UPDATE `izgotoviteli` SET stamp = $value WHERE id = $id");
    }
}
?>

То есть, если я ставлю галочки и нажимаю кнопку submit, они сохраняются в БД со значением 1(tinyint(1)), тут все работает. Нужно чтобы снятие галочки тоже отслеживалось (хотя должно) и в базу заносился 0 при ее снятии.

Answer 1

Для начала ты смотришь на массив $_POST['stamp'], а не на значение элемента массива $_POST['stamp'][$id]

if (isset($_POST['stamp'])) надо if (empty($_POST['stamp'][$id]))

Функция isset() всё равно вернёт TRUE даже если $_POST['stamp'][$id]=0, поэтому заменил на empty()

Попробуй так:

if (empty($_POST['stamp'][$id])) {
$value=0;
}
else {
$value=1;
}

Вроде так

Answer 2

А если так: в теле документа слушайте нажатие на checkbox формы, когда юзер его анчекает - value = 0, если снова чекает - value = data-value (новый атрибут чекбокса, просто дублирующий значение)

document.forms.new_form.addEventListener('click', function(event) { 
  if (event.target.type = 'checkbox') { 
    if (!event.target.checked) { 
      event.target.value = 0; 
    } else { 
      event.target.value = event.target.dataset.value; 
    } 
  } 
  console.log(event.target.value); 
});
<form name="new_form" action="/admin/osvega_test" method="POST"> 
  <input type="checkbox" name="stamp[1]" data-value="73457" value="73457" checked id="chkbox" /> 
  <input type="checkbox" name="stamp[2]" data-value="90356" value="90356" checked id="chkbox2" /> 
</form>

З.Ы. отредактируйте обработчик, он у вас какой-то "не такой":

if (isset($_POST['stamp'])) {
    foreach ($_POST['stamp'] as $id => $value) {
        $Database->query("UPDATE `izgotoviteli` SET stamp = $value WHERE id");
    }
}
READ ALSO
Ссылка на всю кнопку меню

Ссылка на всю кнопку меню

Помогите, не получаетсяКак сделать чтобы на всей кнопке в меню при наведении была бы ссылка?

186
В верстке появился символ, которого в ней нет

В верстке появился символ, которого в ней нет

Добрый деньВерстаем проект для личных целей и в мобильной версии между блоками на некоторых страницах проявляется цифра "1"

111
Цикличная замена картинки

Цикличная замена картинки

Здравствуйте, подскажите, пожалуйста, как реализовать таку задачку, нужно сделать анимацию, чтобы картинка периодически с каким-то заданным...

166