Обработка HTML-форм флажков с помощью PHP - PullRequest
2 голосов
/ 11 января 2012

Я создаю контрольный список на основе данных MySQL в форме HTML.При нажатии кнопки «Отправить» скрипт php меняет поле «завершить» в базе данных mysql.Как я могу обрабатывать более одного элемента одновременно со списками, которые имеют переменную длину?В настоящее время, когда я нажимаю более двух полей, обрабатывается только одно.

Вот форма HTML:

<form method='post' action='listprocessor.php'>
<input style="float:right" type='checkbox' name='complete_goal' value='61'>Milk</input>
<input style="float:right" type='checkbox' name='complete_goal' value='117'>Eggs</input>
<input style="float:right" type='checkbox' name='complete_goal' value='118'>Bread</input>
<input style="float:right" type='submit' name='submitbtn' value='Completed'></input>   
</form>

и вот упрощенный php:

$_POST['submitbtn'];

$completed_goal = $_POST['complete_goal'];

$query = mysql_query("UPDATE notes SET complete='1' where note_id='$completed_goal'");

Ответы [ 4 ]

3 голосов
/ 11 января 2012

Должно работать и надеюсь, что это поможет. Afaik все входы с одинаковым именем обрабатываются как радиокнопки. Таким образом, вы должны создать массив со всеми флажками.

<form method='post' action='listprocessor.php'>
  <input style="float:right" type='checkbox' name='complete_goal[]' value='61'>Milk</input>
  <input style="float:right" type='checkbox' name='complete_goal[]' value='117'>Eggs</input>
  <input style="float:right" type='checkbox' name='complete_goal[]' value='118'>Bread</input>

  <input style="float:right" type='submit' name='submitbtn' value='Completed'></input>   
</form>

<?php
  if(isset($_POST['complete_goal']))
  {
    $query = mysql_query("UPDATE `notes` SET `complete`='1' WHERE `note_id` IN ('".implode("','", array_values($complete_goal))."');");
  }
?>

РЕДАКТИРОВАТЬ: Добавлено Chris N 'идея обновления MySQL.

3 голосов
/ 11 января 2012

Ваше имя входного элемента должно быть массивом, таким как complete_goal[].

<input style="float: right;" type="checkbox" name="complete_goal[]" value="61">Milk</input>

Вы можете обновить их все в одном запросе, используя WHERE note_id IN (<?php echo implode( ',', $_POST['completed_goal'] ); ?>).

$query = mysql_query( "UPDATE `notes` SET `complete` = '1' WHERE `note_id` IN (" . implode( ',', $_POST['completed_goal'] ) . ")" );
0 голосов
/ 11 января 2012

Я бы использовал уникальный атрибут имени для каждого флажка, затем взял все флажки в сценарии, который вы используете для обработки отправки, и сделал бы

foreach($post_fields as $post_field_name) {
  if(isset($_POST[$post_field_name])) {
    // do your query
  }
}
0 голосов
/ 11 января 2012

Возможно, это сработает (возможно, придется проверить синтаксис, так как он был у меня в голове).все флажки, которые не отмечены, не должны быть перечислены в массиве $ complete_goals, поэтому вы можете безопасно обработать их все:)

foreach ($_REQUEST['complete_goal'] as $key) {
    $query = mysql_query("UPDATE notes SET complete='1' where note_id='$key'");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...