Отправка непроверенных флажков в PHP

#php #javascript #mysql #forms #checkbox

#php #javascript #mysql #формы #флажок

Вопрос:

У меня есть поле флажка в моей HTML-таблице. Таблица генерируется динамически, а поле сохраняется в массиве следующим образом:

<input type="checkbox" name="checked[]" value="1">

В PHP я вставляю отмеченные строки в таблицу, но мне также нужно отобразить строки, которые не были проверены пользователем после отправки, но нет способа узнать, какие строки не были переданы, поскольку checked[] для непроверенных флажков не отправляются.

Чего я хочу добиться, так это того, что пользователю отображается таблица с несколькими строками, он проверяет, какие строки он хочет добавить в базу данных. После отправки формы на странице должно отображаться, какие строки были вставлены, а какие строки не были выбраны пользователем. Непроверенные строки не обязательно вставлять в какую-либо базу данных, они должны отображаться пользователю только ОДИН РАЗ, сразу после отправки, чтобы он мог распечатать страницу для записи.

Каков наилучший способ решения этой проблемы?

Комментарии:

1. отправить форму с помощью ajax? Таким образом, пользователь может просто оставаться на той же странице даже после отправки формы.

2. @Damchey если в любом случае вы хотите сделать это в javascript, вы можете сделать это, чтобы получить непроверенный флажок, затем проверьте их состояние перед отправкой. Таким образом, вы должны прикрепить событие к событию отправки, если вы используете какой-либо механизм выбора, сделайте это $("input[type=checkbox]:not(:checked)").each(function(){//check these checkbox})

Ответ №1:

поскольку вы создаете флажок в первую очередь, поэтому вы знаете общее количество флажков.

Общий флажок минус установленный флажок даст вам то, что вы хотите, т.е. непроверенный флажок.

 unchecked boxes = total checkboxes -  checked checkboxes ;
  

Ответ №2:

Используйте 3 массива, 1 из которых содержит отправляемые вами параметры, один с ответами пользователя и один пустой, который будет содержать разницу. Разница между ними приведет к появлению непроверенных полей.

 <?php

$myOptions = array('option1', 'option2', 'option3');
$userArray = array('option2'); // This is your $_POST['checkboxes'] array
$leftOptions = array();

foreach ($myOptions as $value){
  if (!in_array($value, $userArray)){
    $leftOptions[] = $value;
  }
}

?>
  

Примечание: вы можете заменить foreach на array_diff, как @deceze, упомянутый в комментарии.

Комментарии:

1. @dAngelov Как я собираюсь получить option1? Количество строк будет генерироваться динамически и будет меняться каждый раз. Если пользователь не отметит это, строка вообще не будет передана PHP-скрипту.

2. @Damchey, вы изначально создаете параметры, поэтому просто воссоздайте тот же набор.