У меня есть форма с несколькими флажками, значения которых извлекаются из базы данных. Мне удалось отобразить их в форме, присвоить каждому соответствующее значение, но не могу вставить их значения в другую базу данных.
Вот код:
<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.






Вы можете определить, установлен ли флажок, потому что он будет иметь значение. Если он не выбран, он вообще не будет отображаться в запросе / получении / публикации в PHP.
Что вы можете сделать, так это проверить его ценность и работать, исходя из этого. По умолчанию значением является строка 'on', но ее можно изменить с помощью атрибута 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)
Да, но это легко читаемый пример кода для тех, кто мало что знает об isset.
Ну, как писал Эли, 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>. Атрибут "for" <label> должен указывать на идентификатор, а не на значение. Вам также понадобятся уникальные идентификаторы для каждого элемента. Опубликованный вами код не прошел проверку.
Кроме того, вы вообще не проверяете свой код. По крайней мере, сделайте 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 в виде массива. Если вы использовали разные имена, то у каждого была бы своя собственная пара ключ / значение записи.
Это тоже может помочь:
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++;
}
}
Ничего себе ... вы можете реорганизовать это, чтобы: $ showCloseWindowLink = isset ($ _ POST ["ShowCloseWindowLink"]); ?