Вставка значений флажка в базу данных

Мне нужна помощь для этой проблемы, которую я пытаюсь решить некоторое время (я новичок в PHP). У меня есть форма с несколькими флажками, значения которых извлекаются из базы данных. Мне удалось отобразить их в форме, присваивать каждому из них соответствующее значение, но не могут вставлять их значения в другую базу данных.

Вот код:

<form id="form1" name="form1" method="post" action=""> <?php $info_id = $_GET['info_id']; $kv_dodatoci = mysql_query("SELECT * FROM `dodatoci`") or die('ERROR DISPLAYING: ' . mysql_error()); while ($kol = mysql_fetch_array($kv_dodatoci)){ $id_dodatoci = $kol['id_dodatoci']; $mk = $kol['mk']; echo '<input type="checkbox" name="id_dodatoci[]" id="id_dodatoci" value="' . $id_dodatoci . '" />'; echo '<label for="' . $id_dodatoci.'">' . $mk . '</label><br />'; } ?> <input type="hidden" value="<?=$info_id?>" name="info_id" /> <input name="insert_info" type="submit" value="Insert Additional info" /> </form> <?php if (isset($_POST['insert_info']) && is_array($id_dodatoci)) { echo $id_dodatoci . '<br />'; echo $mk . '<br />'; // --- Guess here's the problem ----- // foreach ($_POST['id_dodatoci'] as $dodatok) { $dodatok_kv = mysql_query("INSERT INTO `dodatoci_hotel` (id_dodatoci, info_id) VALUES ('$dodatok', '$info_id')") or die('ERROR INSERTING: '.mysql_error()); } } ?> 

моя проблема состоит в том, чтобы перебирать все флажки, а для каждого из них – заполнять отдельную запись в базе данных. на самом деле я не знаю, как распознать, какая ячейка проверена, и поместите соответствующее значение в db.

Надеюсь, кто-то может помочь мне решить эту проблему или дать мне некоторые рекомендации.

Заранее спасибо.

Вы можете определить, установлен ли флажок, потому что он будет иметь значение. Если он не выбран, он вообще не появится в request / get / post в PHP.

То, что вы, возможно, захотите сделать, это проверить его ценность и работать на основе этого. Значение по умолчанию является строкой «включено», но может быть изменено атрибутом value = '' в HTML.

Вот пара фрагментов кода, которые могут помочь (не точно качество продукции, но это поможет проиллюстрировать):

HTML:

 <input type='checkbox' name='ShowCloseWindowLink' value='1'/> Show the 'Close Window' link at the bottom of the form. 

PHP:

 if (isset($_POST["ShowCloseWindowLink"])) { $ShowCloseWindowLink=1; } else { $ShowCloseWindowLink=0; } ..... $sql = "update table set ShowCloseWindowLink = ".mysql_real_escape_string($ShowCloseWindowLink)." where ..." 

(предполагая таблицу с столбцом ShowCloseWindowLink, которая примет 1 или 0)

Ха!

Ну, как писал Эли, POST не установлен, когда флажок не установлен.

Я иногда использую дополнительное скрытое поле (-array), чтобы убедиться, что у меня есть список всех флажков на странице.

Пример:

 <input type="checkbox" name="my_checkbox[<?=$id_of_checkbox?>]"> <input type="hidden" name="array_checkboxes[<?=$id_of_checkbox?>]" value="is_on_page"> 

Таким образом, я получаю $ _POST:

 array(2){ array(1){"my_checkbox" => array(1){[123]=>"1"}} array(1){"array_checkboxes" => array(1){[123]=>"is_on_page"}} } 

Я даже получаю вторую строку, когда флажок НЕ установлен, и я могу пропустить все флажки с чем-то вроде этого:

 foreach ($_POST["array_checkboxes"] as $key => $value) { if($value=="is_on_page") { $value_of_checkbox[$key] = $_POST["my_checkbox"][$key]; //Save this value } } 

Надеюсь это поможет! 🙂

С уважением, Бастиан

В качестве дополнительной заметки: вы используете неправильный синтаксис HTML для идентификаторов и <label> . Атрибут <label> 's "for" должен указывать на идентификатор, а не на значение. Вам также нужны уникальные идентификаторы для каждого элемента. Код, который вы опубликовали, не будет проверяться.

Кроме того, вы не проверяете свой код вообще. По крайней мере, сделайте htmlspecialchars() или htmlentities() на входе перед его выводом и mysql_real_escape_string() прежде чем вставлять данные в БД.

2-й ответ:

Вы можете сделать что-то вроде этого:

HTML:

 echo '<input type="checkbox" name="id_dodatoci[]" value="'.$id_dodatoci.'" />'; 

PHP:

 if ( !empty($_POST["id_dodatoci"]) ) { $id_dodatoci = $_POST["id_dodatoci"]; print_r($id_dodatoci); // This should provide an array of all the checkboxes that were checked. // Any not checked will not be present. } else { // None of the id_dodatoci checkboxes were checked. } 

Это связано с тем, что вы используете одно и то же имя для всех флажков, поэтому их значения будут переданы в php в виде массива. Если вы использовали разные имена, каждый из них будет иметь собственную пару post / value.

Это также может помочь:

http://www.php-mysql-tutorial.com/php-tutorial/using-php-forms.php

Кроме того, что-то, что мало кто использует, но это довольно хорошо в HTML, заключается в том, что вы можете иметь:

 <input type="hidden" name="my_checkbox" value="N" /> <input type="checkbox" name="my_checkbox" value="Y" /> 

и вуаля! – значения по умолчанию для флажков …!

Это цикл, который мне нужен. Я понял, что мне нужен цикл через каждый ключ с переменной $i .

 if(isset($_POST['id_dodatoci'])){ $id_dodatoci=$_POST['id_dodatoci']; $arr_num=count($id_dodatoci); $i=0; while ($i < $arr_num) { $query="INSERT INTO `dodatoci_hotel`(id_dodatoci,info_id) VALUES ('$id_dodatoci[$i]','$info_id')"; $res=mysql_query($query) or die('ERROR INSERTING: '.mysql_error()); $i++; } }