Как вставить несколько значений флажка в таблицу?

Кажется, я не могу найти или найти рабочее решение для вставки нескольких значений флажка из формы в таблицу. Я пришел к закрытию, вставив значение только одного значения флажка в таблицу. Пожалуйста, укажите, как я могу вставить несколько значений флажка, а не только одно.

Найдите ниже то, что у меня есть до сих пор:

Моя форма:

<html>
<body>
<form method="post" action="chk123.php">
Flights on: <br/>
<input type="checkbox" name="Days" value="Daily">Daily<br>
<input type="checkbox" name="Days" value="Sunday">Sunday<br>
<input type="checkbox" name="Days" value="Monday">Monday<br>
<input type="checkbox" name="Days" value="Tuesday">Tuesday <br>
<input type="checkbox" name="Days" value="Wednesday">Wednesday<br>
<input type="checkbox" name="Days" value="Thursday">Thursday <br>
<input type="checkbox" name="Days" value="Friday">Friday<br>
<input type="checkbox" name="Days" value="Saturday">Saturday <br>
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>

Мой файл php для чтения и вставки значений в таблицу:

<?php

// Make a MySQL Connection
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());

$checkBox = $_POST['Days'];

if(isset($_POST['submit']))
{
    for ($i=0; $i<sizeof($checkBox); $i++)
        {
            $query="INSERT INTO example (orange) VALUES ('" . $checkBox[$i] . "')";     

            mysql_query($query) or die (mysql_error() );
        }
    echo "Complete";

}

?>

person SirBT    schedule 24.11.2013    source источник
comment
каждый вызов mysql_query стоит дорого, рассмотрите возможность объединения запроса с одной вставкой путем объединения () после значений. такие как ('a'), ('b'), ('c'), ...   -  person ohmusama    schedule 24.11.2013
comment
Все функции mysql_*() официально объявлены устаревшими (больше не поддерживаются)< /i> и будет удален в будущем. Вы должны обновить свой код, используя PDO или MySQL для обеспечения будущей функциональности. Также ваш код уязвим для SQL-инъекций.   -  person cryptic ツ    schedule 24.11.2013


Ответы (4)


Вы должны указать

<input type="checkbox" name="Days[]" value="Daily">Daily<br>

как массив.

Добавляем [] ко всем именам Days и работаем на php с этим как с массивом.

После этого вы можете INSERT значения в разных столбцах в db или использовать implode и сохранить значения в один столбец.


Не проверял, но можно попробовать так. Не забудьте заменить mysql на mysqli.

<html>
<body>
<form method="post" action="chk123.php">
Flights on: <br/>
<input type="checkbox" name="Days[]" value="Daily">Daily<br>
<input type="checkbox" name="Days[]" value="Sunday">Sunday<br>
<input type="checkbox" name="Days[]" value="Monday">Monday<br>
<input type="checkbox" name="Days[]" value="Tuesday">Tuesday <br>
<input type="checkbox" name="Days[]" value="Wednesday">Wednesday<br>
<input type="checkbox" name="Days[]" value="Thursday">Thursday <br>
<input type="checkbox" name="Days[]" value="Friday">Friday<br>
<input type="checkbox" name="Days[]" value="Saturday">Saturday <br>
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>

<?php

// Make a MySQL Connection
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());

$checkBox = implode(',', $_POST['Days']);

if(isset($_POST['submit']))
{       
    $query="INSERT INTO example (orange) VALUES ('" . $checkBox . "')";     

    mysql_query($query) or die (mysql_error() );

    echo "Complete";

}

?>
person Viacheslav Kondratiuk    schedule 24.11.2013
comment
Замечательно! Я проверил это, и это экономит несколько дней в одной колонке. Как мне вместо этого сохранить каждый день в каждой строке? - person SirBT; 24.11.2013
comment
Я ужасно извиняюсь, виакондратюк, я имел в виду по каждой строке, а не по столбцу - person SirBT; 24.11.2013
comment
В этом случае просто измените свой html, и ваш код должен работать. - person Viacheslav Kondratiuk; 24.11.2013
comment
SirBT, Не могли бы вы поделиться решением сохранения значений флажков в MySql в отдельных строках? Это помогло бы мне понять, как написать это правильно. - person user1690536; 01.03.2014

Вам нужно объявить массив в HTML через

<input type="checkbox" name="Days[]" value="Daily">

Также вы можете вставить несколько элементов с помощью одного запроса, подобного этому

$query = "INSERT INTO example (orange) VALUES ";
for ($i=0; $i<count($checkBox); $i++)
    $query .= "('" . $checkBox[$i] . "'),";
$query = rtrim($query,',');
mysql_query($query) or die (mysql_error() );

Также имейте в виду, что mysql_* функции официально объявлены устаревшими и, следовательно, должны не использоваться в новом коде. Вместо этого вы можете использовать PDO или MySQLi. См. этот ответ на SO для получения дополнительной информации.

person kero    schedule 24.11.2013

Я думаю, это должно сработать.. :)

<input type="checkbox" name="Days[]" value="Daily">Daily<br>
<input type="checkbox" name="Days[]" value="Sunday">Sunday<br>
person Drudge Rajen    schedule 24.11.2013
comment
пожалуйста, будьте немного более конкретным. - person SirBT; 24.11.2013
comment
думаю поймёте.. :( - person Drudge Rajen; 24.11.2013

Я думаю, вам следует $_POST[][], я попробовал, и это сработало :)), спасибо

person Bear    schedule 29.04.2020
comment
Пожалуйста, предоставьте полный ответ с примером кода, чтобы помочь ответить на вопрос. Спасибо! - person Michael Bordash; 29.04.2020