Сделать флажок возвращать false при снятии флажка

У меня есть форма, похожая на:

<form> <input type"checkbox" name="checked[(unique_id)]"> <input type"checkbox" name="checked[(unique_id)]"> <input type"checkbox" name="checked[(unique_id)]"> <input type"checkbox" name="checked[(unique_id)]"> </form> 

Количество флажков будет меняться время от времени, поэтому при обработке этих данных с PHP мне нужно _POST['checked'] массив _POST['checked'] .

Моя проблема в том, что я хочу принимать меры, когда флажок установлен, а когда нет. Но только отмеченные флажки будут добавлены в массив _POST['checked'] .

 <form> <input type="checkbox" key="1"/> <input type="hidden" name="checked[1]" value="false"> <input type="checkbox" key="2"/> <input type="hidden" name="checked[2]" value="false"> <input type="checkbox" key="3"/> <input type="hidden" name="checked[3]" value="false"> <input type="checkbox" key="4"/> <input type="hidden" name="checked[4]" value="false"> </form> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script> $(document).ready(function () { $('[key]').change(function () { var key = $(this).attr('key'); $($('[name="checked[' + key + ']"]')).val($(this).is(':checked') ? 'true' : 'false'); }); }); </script> 

вот что я делаю

Я использую два входа: один флажок без имени, поэтому он не будет отправлен на php, другой скрыт, пользователю не будет показываться, но это то, что будет отправлено на php

затем с jquery, когда пользователь установит флажок jquery, измените значение скрытого ввода на значение true, и если снимите флажок, измените значение на false

поэтому значение всегда будет отправляться на php со значением true или false как string

вы можете изменить значение, которое хотите отправить на php, изменив это .is(':checked')?'true':'false') на что-то подобное .is(':checked')?1:0) для отправки 1 и 0 вместо true и false

другим решением является решение rybo111

 <input type="hidden" name="check" value="false"> <input type="checkbox" name="check" value="true"> 

он отправит два варианта, но если флажок установлен, он переопределит первый вариант

но он не является надежным 100%, и он отправит больше данных на сервер

Узнайте больше об этом в POSTing Form Fields с одинаковым атрибутом имени

поэтому, если вы хотите использовать простое решение без js, используйте только «html», если вы хотите, чтобы 100% -ное надежное решение использовало «js»,

Вот техника, которую я видел раньше:

 <input type="hidden" name="check" value="false"> <input type="checkbox" name="check" value="true"> 

Причина этого в том, что, когда значения с одинаковым именем отправляются более одного раза, принимается только последнее значение.

На мой взгляд, лучший способ – просто использовать isset($_POST['...']) или in_array($_POST['...']) .

Добавьте value="true" к каждому элементу ввода флажка. И измените свой PHP-код на:

 $checked_arr = []; foreach($_POST["checked"] as $checked){ if($checked == "true"){ // do what you want to do } } 

Еще одно решение – это серверное решение, которое, я думаю, слишком быстро и просто.

клиентская сторона: просто используйте свежий HTML:

 <input type="checkbox" name="checked1" value="value_checked" ... /> 

сторона сервера:

сделать глобальную функцию следующим образом:

 function getVal(&$var, $default = '') { if (!isset($var) || empty($var) || is_null($var)) $var = $default; return $var; } 

затем используйте, где вы хотите прочитать значение, которое вы не знаете, установлено или нет. как это:

 $checked_value = getVal($_POST["checked1"],false); 

или

 $checked_value = getVal($_POST["checked1"],"value_not_checked"); 

Надеюсь, полезен еще один.