У меня есть 6 вариантов, я хочу получить значения установленных флажков, чтобы сохранить их в переменной на другой странице. Как мне это сделать?
<form action="third.php" method="get">
<!-- Выбор -->
Красный <input type="checkbox" name="color[]" id="color" value="Red">
Зеленый <input type="checkbox" name="color[]" id="color" value="Green">
Синий <input type="checkbox" name="color[]" id="color" value="Blue">
Голубой <input type="checkbox" name="color[]" id="color" value="Cyan">
Сереневый <input type="checkbox" name="color[]" id="color" value="Magenta">
Желтый <input type="checkbox" name="color[]" id="color" value="Yellow">
Черный <input type="checkbox" name="color[]" id="color" value="Black">
<!—Отправка формы t -->
<input type="submit" value="submit">
</form>
И страница third.php:
$color = $_GET['color'];
echo 'Выбранный цвет '.$color;
Если я удаляю [], я получаю, что цвет выбран; когда я делаю это как color[], я получаю уведомление, говорящее: Преобразование массива в строку.
Мне нужно значение отмеченных флажков, чтобы я мог сохранить его в переменной.
Ответ 1
Хорошим методом, который нравится мне и многим, я уверен, является использование foreach, который выводит каждый выбранный вами цвет и отображает их на экране один под другим. Когда дело доходит до использования флажков, у вас вроде как нет выбора, кроме как использовать foreach, и именно поэтому вы получите только одно значение, возвращаемое из вашего массива. Вот пример с использованием $_GET. Однако вы можете использовать $_POST, но для правильной работы необходимо, чтобы обе директивы совпадали в обоих файлах.
HTML FORM
<form action="third.php" method="get">
Красный <input type="checkbox" name="color[]" id="color" value="Red">
Зеленый <input type="checkbox" name="color[]" id="color" value="Green">
Синий <input type="checkbox" name="color[]" id="color" value="Blue">
Голубой <input type="checkbox" name="color[]" id="color" value="Cyan">
Сиреневый <input type="checkbox" name="color[]" id="color" value="Magenta">
Желтый <input type="checkbox" name="color[]" id="color" value="Yellow">
Черный <input type="checkbox" name="color[]" id="color" value="Black">
<input type="submit" value="submit">
</form>
###PHP (используя $_GET)
<?php
$name = $_GET['color'];
// опционально
// echo "Вы выбрали следующее color(s): <br>";
foreach ($name as $color){
echo $color."<br />";
}
?>
Предполагая, что в качестве цветов выбраны красный, зеленый, синий и голубой, результат будет выглядеть следующим образом:
красный
зелёный
синий
голубой
Можно также проверить, был ли выбран цвет. Если ни один из них не выбран, появится отдельное сообщение.
<?php
$name = $_GET['color'];
if (isset($_GET['color'])) {
echo "Вы выбрали следующий(ие) цвет(а): <br>";
foreach ($name as $color){
echo $color."<br />";
}
} else {
echo "Вы не выбрали цвет.";
}
?>
Или другой вариант:
<?php
$name = $_GET['color'];
if (isset($_GET['color'])) {
echo "Вы выбрали следующий(ие) цвет(а): <br>";
echo "<ul>";
foreach ($name as $color){
echo "<li>" .$color."</li>";
}
echo "</ul>";
} else {
echo "Вы не выбрали цвет.";
}
?>
Ответ 2
Я предлагаю использовать post, а не get. Вот некоторые различия между post и get.
Некоторые замечания по GET-запросам:
GET-запросы можно кэшировать
GET-запросы остаются в истории браузера
GET-запросы могут быть помещены в закладки
GET-запросы никогда не следует использовать при работе с конфиденциальными данными
GET-запросы имеют ограничения по длине
GET-запросы должны использоваться только для получения данных
Некоторые замечания по POST-запросам:
POST-запросы никогда не кэшируются
POST-запросы не сохраняются в истории браузера
POST-запросы не могут быть помещены в закладки
POST-запросы не имеют ограничений на длину данных
HTML код
<html>
<head></head>
<body>
<form action="output.php" method="post">
Красный <input type="checkbox" name="color[]" id="color" value="Red">
Зеленый <input type="checkbox" name="color[]" id="color" value="Green">
Синий <input type="checkbox" name="color[]" id="color" value="Blue">
Голубой <input type="checkbox" name="color[]" id="color" value="Cyan">
Сереневый <input type="checkbox" name="color[]" id="color" value="Magenta">
Желтый <input type="checkbox" name="color[]" id="color" value="Yellow">
Черный <input type="checkbox" name="color[]" id="color" value="Black">
<input type="submit" value="submit">
</form>
<body>
</html>
PHP код
<?php
if(isset($_POST['color'])) {
$name = $_POST['color'];
echo "Вы выбрали следующий(ие) цвет(а): <br>";
foreach ($name as $color){
echo $color."<br />";
}} // конец скобки для if(isset
else {
echo "Вы не выбрали цвет.";
}
?>
Ответ 3
Все очень просто. Поле флажка — это как текст для ввода. Если вы ничего не напишете в поле, будет сказано, что поле не существует.
<form method="post">
<input type="checkbox" name="check">Вот так это работает!<br>
<button type="submit" name="submit">Submit</button>
</form>
<?php
if(isset($_POST['submit'])) {
if(!isset($_POST['check'])) {
echo "Нет выбранного элемента!";
}else{
echo "Элемент выбран!!";
}
}
?>
Ответ 4
Возможно, лучшим способом является использование php-функции in_array() следующим образом:
$style='V';//может быть "V'ertical" или "H'orizontal".
$lineBreak=($style=='V')?'<br>':'';
$name='colors';//название ваших опций
$Legent="Select your $name";//одеть его в красивое полевое одеяние с леджентом
$options=array('red','green','blue','orange','yellow','white','black');
$boxes='';//инициировать список тикбоксов, которые должны быть созданы
if(isset($_REQUEST["$name"])){
//мы будем использовать $_REQUEST, но $_POST было бы лучше
$Checked=$_REQUEST["$name"];
}else{
$Checked=array();
}
foreach($options as $option){
$checkmark=(in_array($option,$Checked))?'checked':'';
$nameAsArray=$name.'[]';//мы хотели бы, чтобы возвращаемые данные были в массиве, поэтому в конце ставим [].
$boxes.=($style=='V')?"<span class='label2' align='right'><b>$option : </b></span>":"<b>$option </b>";
$boxes.="<input style='width:2em;' type='checkbox' name='$nameAsArray' id='$option' value='$option' $checkmark >$lineBreak";
}
echo<<<EOF
<html>
<head></head>
<body>
<form name="Update" method="GET" action="{$_SERVER['PHP_SELF']}">\n
<fieldset id="tickboxes" style="width:25em;">
<legend>{$Legent}</legend>
{$boxes}
</fieldset>
<button type="submit" >Отправка формы</button>
</form>
<body>
</html>
EOF
Для начала мы создали переменную $style, чтобы установить, в каком виде мы хотим отобразить опции — горизонтальном или вертикальном. От этого будет зависеть, как мы будем отображать наши флажки. Далее мы задаем $name для наших опций, это необходимо как имя массива, в котором мы хотим хранить наши опции. Я создал здесь цикл для создания каждой опции, заданной в массиве $options. Затем мы проверяем каждый элемент, если он должен быть отмечен в нашей возвращаемой форме. Я считаю, что это должно упростить способ воспроизведения формы с флажками.
Web