Вставка значений флажков в базу данных - PullRequest
1 голос
/ 28 октября 2008

Мне нужна помощь для решения этой проблемы, которую я пытаюсь решить некоторое время (я новичок в 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());
     }
}


?>

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

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

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

Ответы [ 6 ]

3 голосов
/ 28 октября 2008

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

0 голосов
/ 29 октября 2008

Это цикл, который мне был нужен. Я понял, что мне нужен цикл через каждый ключ с переменной $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++;
    }
}
0 голосов
/ 29 октября 2008

Также кое-что, что мало кто использует, но в HTML это очень приятно, это то, что вы можете иметь:

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

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

0 голосов
/ 28 октября 2008

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-учебник / с использованием PHP-forms.php-

0 голосов
/ 28 октября 2008

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

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

0 голосов
/ 28 октября 2008

Ха!

Ну, как писал Илай, 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
  }
}

Надеюсь, это поможет! :)

С наилучшими пожеланиями, Бастиан

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...