Получение значений флажка при отправке
У меня есть 6 вариантов, я хочу, чтобы проверенные значения сохраняли их в переменной на второй странице. Как мне это сделать?
<form action="third.php" method="get">
<!-- Choices -->
Red <input type="checkbox" name="color[]" id="color" value="Red">
Green <input type="checkbox" name="color[]" id="color" value="Green">
Blue <input type="checkbox" name="color[]" id="color" value="Blue">
Cyan <input type="checkbox" name="color[]" id="color" value="Cyan">
Magenta <input type="checkbox" name="color[]" id="color" value="Magenta">
Yellow <input type="checkbox" name="color[]" id="color" value="Yellow">
Black <input type="checkbox" name="color[]" id="color" value="Black">
<!-- Submit -->
<input type="submit" value="submit">
</form>
И third.php
страница:
$color = $_GET['color'];
echo 'The color is '.$color;
Если я удалю []
, я получаю, что цвет включен, когда мне это нравится color[]
Я получаю уведомление о том, что:
Преобразование массива в строку
То, что я хочу, это значение check, checkboxes, поэтому я могу сохранить его в переменной.
Ответы
Ответ 1
Хороший метод, который является моим любимым, и для многих, я уверен, это использовать foreach
который будет выводить каждый выбранный вами цвет и отображаться на экране один под другим.
Когда дело доходит до использования флажков, у вас вроде нет выбора, кроме как использовать foreach
, и именно поэтому вы получаете только одно значение, возвращаемое из вашего массива.
Вот пример использования $_GET
. Однако вы можете использовать $_POST
и для правильной работы необходимо, чтобы обе директивы совпадали в обоих файлах.
HTML ФОРМА
<form action="third.php" method="get">
Red<input type="checkbox" name="color[]" id="color" value="red">
Green<input type="checkbox" name="color[]" id="color" value="green">
Blue<input type="checkbox" name="color[]" id="color" value="blue">
Cyan<input type="checkbox" name="color[]" id="color" value="cyan">
Magenta<input type="checkbox" name="color[]" id="color" value="Magenta">
Yellow<input type="checkbox" name="color[]" id="color" value="yellow">
Black<input type="checkbox" name="color[]" id="color" value="black">
<input type="submit" value="submit">
</form>
PHP (с использованием $ _GET), использующий third.php
качестве вашего обработчика
<?php
$name = $_GET['color'];
// optional
// echo "You chose the following color(s): <br>";
foreach ($name as $color){
echo $color."<br />";
}
?>
Предполагая, что вы выбрали красный, зеленый, синий и голубой в качестве цветов, будет выглядеть так:
красный
зеленый
синий
циан
ВАРИАНТ № 2
Вы также можете проверить, был ли выбран цвет. Если ни один не выбран, то появится отдельное сообщение.
<?php
$name = $_GET['color'];
if (isset($_GET['color'])) {
echo "You chose the following color(s): <br>";
foreach ($name as $color){
echo $color."<br />";
}
} else {
echo "You did not choose a color.";
}
?>
Дополнительные опции:
Для отображения в виде списка: (<ul></ul>
можно заменить на <ol></ol>
)
<?php
$name = $_GET['color'];
if (isset($_GET['color'])) {
echo "You chose the following color(s): <br>";
echo "<ul>";
foreach ($name as $color){
echo "<li>" .$color."</li>";
}
echo "</ul>";
} else {
echo "You did not choose a color.";
}
?>
Ответ 2
(Это не action="get"
или action="post"
it method="get"
или method="post"
Попробуйте сделать это с помощью метода post:
<form action="third.php" method="POST">
Red<input type="checkbox" name="color[]" id="color" value="red">
Green<input type="checkbox" name="color[]" id="color" value="green">
Blue<input type="checkbox" name="color[]" id="color" value="blue">
Cyan<input type="checkbox" name="color[]" id="color" value="cyan">
Magenta<input type="checkbox" name="color[]" id="color" value="Magenta">
Yellow<input type="checkbox" name="color[]" id="color" value="yellow">
Black<input type="checkbox" name="color[]" id="color" value="black">
<input type="submit" value="submit">
</form>
и в third.php
или для отдельного поля, которое вы colud получаете в:
$_POST['color'][0] //for RED
$_POST['color'][1] // for GREEN
Ответ 3
Что я предлагаю, лучше использовать пост, чем получить. вот какая разница между post VS get
Некоторые заметки о запросах GET:
- Запросы GET можно кэшировать
- Запросы GET остаются в истории браузера
- Запросы GET можно добавить в закладки
- Запросы GET никогда не должны использоваться при работе с конфиденциальными данными.
- Запросы GET имеют ограничения по длине
- Запросы GET должны использоваться только для извлечения данных.
Некоторые примечания по запросам POST:
- Запросы POST никогда не кэшируются
- Запросы POST не сохраняются в истории браузера
- Запросы POST не могут быть отмечены закладкой
- Запросы POST не имеют ограничений на длину данных
Код HTML
<html>
<head></head>
<body>
<form action="output.php" method="post">
Red<input type="checkbox" name="color[]" id="color" value="red">
Green<input type="checkbox" name="color[]" id="color" value="green">
Blue<input type="checkbox" name="color[]" id="color" value="blue">
Cyan<input type="checkbox" name="color[]" id="color" value="cyan">
Magenta<input type="checkbox" name="color[]" id="color" value="Magenta">
Yellow<input type="checkbox" name="color[]" id="color" value="yellow">
Black<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 "You chose the following color(s): <br>";
foreach ($name as $color){
echo $color."<br />";
}} // end brace for if(isset
else {
echo "You did not choose a color.";
}
?>
Ответ 4
Просто для печати вы можете использовать, как показано ниже:
print_r($_GET['color']);
или
var_dump($_GET['color']);
Ответ 5
Я думаю, что значение для $_POST['color']
должно быть прочитано только после проверки его набора.
<?php
if(isset($_POST['color'])) {
$name = $_POST['color'];
echo "You chose the following color(s): <br>";
foreach ($name as $color){
echo $color."<br />";
}} // end brace for if(isset
else {
echo "You did not choose a color.";
}
?>
Ответ 6
Возможно, лучший способ - использовать php-функцию in_array() следующим образом:
$style='V';//can be 'V'ertical or 'H'orizontal
$lineBreak=($style=='V')?'<br>':'';
$name='colors';//the name of your options
$Legent="Select your $name";//dress it up in a nice fieldset with a ledgent
$options=array('red','green','blue','orange','yellow','white','black');
$boxes='';//innitiate the list of tickboxes to be generated
if(isset($_REQUEST["$name"])){
//we shall use $_REQUEST but $_POST would be better
$Checked=$_REQUEST["$name"];
}else{
$Checked=array();
}
foreach($options as $option){
$checkmark=(in_array($option,$Checked))?'checked':'';
$nameAsArray=$name.'[]';//we would like the returned data to be in an array so we end with []
$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" >Submit Form</button>
</form>
<body>
</html>
EOF
;
Для начала мы создали переменную $style
, чтобы установить, хотим ли мы варианты горизонтальным или вертикальным способом. Это будет неточно, как мы показываем наши флажки. Затем мы устанавливаем $name
для наших параметров, это необходимо как имя массива, где мы хотим сохранить наши параметры.
Я создал цикл здесь, чтобы построить каждый параметр, заданный в массиве $options
, затем мы проверяем каждый элемент, если он должен быть проверен в нашей возвращенной форме. Я считаю, что это должно упростить способ воспроизведения формы с помощью флажков.
Ответ 7
Если вы хотите включить определенные значения в новые переменные, если они были выбраны:
// Retrieve array color[] and set as variable
$colors = $_GET['color'];
// Use array_search to find the key for "red"
$key_red = array_search('red', $colors);
// If "red" exists, the key will be an integer (or FALSE)
if (is_int($key_red)) {
$red_color = 'Red was selected';
}
Ответ 8
foreach - лучший способ получить массив значений.
вот пример кода: HTML-код:
<form action="send.php" method="post">
Red<input type="checkbox" name="color[]" id="color" value="red">
Green<input type="checkbox" name="color[]" id="color" value="green">
Blue<input type="checkbox" name="color[]" id="color" value="blue">
Cyan<input type="checkbox" name="color[]" id="color" value="cyan">
Magenta<input type="checkbox" name="color[]" id="color" value="Magenta">
Yellow<input type="checkbox" name="color[]" id="color" value="yellow">
Black<input type="checkbox" name="color[]" id="color" value="black">
<input type="submit" value="submit">
</form>
phpcode:
<?php
$name = $POST['color'];
foreach ($name as $color){
echo $color."<br />";
}
?>
Ответ 9
Это очень просто.
Поле флажка похоже на вводимый текст. Если вы ничего не напишите в поле, оно скажет, что поле не существует.
<form method="post">
<input type="checkbox" name="check">This is how it works!<br>
<button type="submit" name="submit">Submit</button>
</form>
<?php
if(isset($_POST['submit'])) {
if(!isset($_POST['check'])) {
echo "Not selected!";
}else{
echo "Selected!";
}
}
?>
Ответ 10
//retrive check box and gender value
$gender=$row['gender'];
$chkhobby=$row['chkhobby'];
<tr>
<th>GENDER</th>
<td>
Male<input type="radio" name="gender" value="1" <?php echo ($gender== '1') ? "checked" : "" ; ?>/>
Female<input type="radio" name="gender" value="0" <?php echo ($gender== '0') ? "checked" : "" ; ?>/>
</td>
</tr>
<tr>
<th>Hobbies</th>
<td>
<pre><?php //print_r($row);
$hby = @explode(",",$row['chkhobby']);
//print_r($hby);
?></pre>
read<input id="check_1" type="checkbox" name="chkhobby[]" value="read" <?php if(in_array("read",$hby)){?> checked="checked"<?php }?>>
write<input id="check_2" type="checkbox" name="chkhobby[]" value="write" <?php if(in_array("write",$hby)){?> checked="checked"<?php }?>>
play<input id="check_4" type="checkbox" name="chkhobby[]" value="play" <?php if(in_array("play",$hby)){?> checked="checked"<?php }?>>
</td>
</tr>
//update
$gender=$_POST['gender'];
$chkhobby = implode(',', $_POST['chkhobby']);