#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, вы изначально создаете параметры, поэтому просто воссоздайте тот же набор.