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

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

Вот код:

<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 в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
14 128
6

Ответы 6

Вы можете определить, установлен ли флажок, потому что он будет иметь значение. Если он не выбран, он вообще не будет отображаться в запросе / получении / публикации в 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)

Ничего себе ... вы можете реорганизовать это, чтобы: $ showCloseWindowLink = isset ($ _ POST ["ShowCloseWindowLink"]); ?

Huppie 28.10.2008 11:35

Да, но это легко читаемый пример кода для тех, кто мало что знает об isset.

Eli 28.10.2008 22:20

Ну, как писал Эли, 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++;
    }
}

Другие вопросы по теме