Web

Получение значений флажков при отправке формы

У меня есть 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-запросам:

  1. GET-запросы можно кэшировать

  2. GET-запросы остаются в истории браузера

  3. GET-запросы могут быть помещены в закладки

  4. GET-запросы никогда не следует использовать при работе с конфиденциальными данными

  5. GET-запросы имеют ограничения по длине

  6. GET-запросы должны использоваться только для получения данных

Некоторые замечания по POST-запросам:

  1. POST-запросы никогда не кэшируются

  2. POST-запросы не сохраняются в истории браузера

  3. POST-запросы не могут быть помещены в закладки

  4. 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

Ошибка при открытии потока в PHP: отсутствует файл или каталог

Web

Как я могу добавить динамически созданный URL-адрес в переменную PHP?

Float CSS: что это такое и как работают адаптивные блоки Div в CSS?
Web

Float CSS: что это такое и как работают адаптивные блоки Div в CSS?

Web

Как я могу измерить скорость кода, написанного на PHP