Как читать, если в PHP установлен флажок?


266

Как читать, если в PHP установлен флажок?


8
Этот вопрос фактически означает « был проверен» (когда форма была отправлена). PHP определение , если флажок будет проверен, потребует вызов Ajax после того , как элемент был переключен.
rybo111

Ответы:


342

Если ваша HTML-страница выглядит так:

<input type="checkbox" name="test" value="value1">

После отправки формы вы можете проверить ее с помощью:

isset($_POST['test'])

или

if ($_POST['test'] == 'value1') ...

57
Флажки также могут иметь значение on, когда они отмечены. Поэтому для совместимости проще в использовании isset($_POST['checkboxName']).
Дамикиб

13
Значение "on" может поддерживаться некоторыми браузерами, когда атрибут value не установлен, но в целом лучше установить атрибут value и проверить его при отправке.
m_vitaly

3
Меняется ли «Значение1», если флажок установлен?
MoralCode

10
@Developer_ACE Если я не понимаю вас, значение в этом примере будет, value1если флажок установлен. Если это не проверено, $_POST['test']просто не существует.
rybo111

104

Zend Framework использует полезные опции для галочек, которые вы также можете сделать самостоятельно:

Каждый сгенерированный флажок связан со скрытым полем с тем же именем, помещенным непосредственно перед флажком, и со значением «0». Затем, если ваш флажок в качестве значения «1», вы всегда получите значение «0» или «1» в результате GET или POST

<input type="hidden" name="foo" value="0" />
<input type="checkbox" name="foo" value="1"> 

Я также заметил об этом, но я чувствую себя безопасным в использовании: Zend Framework делает это тоже!
hpaknia

Это интересно. Но есть ли крошечная вероятность того, что пользовательский агент может передать первое значение вместо последнего, при условии, что флажок установлен?
rybo111

@ rybo111, для пользовательского агента я так не думаю, но для пользовательского анализатора форм javascript вы должны позаботиться.
Regilero

Извините, может кто-нибудь объяснить мне, как это работает? Я не поняла Зачем это скрытое поле, если всегда передается только последнее значение (это input[type="checkbox"]одно)?
tonix

6
когда флажок снят, он не передается в сообщении (поэтому передается только скрытое). Когда это проверено, это передано, и перезапишет скрытое значение.
Regilero

53

При использовании флажков в качестве массива:

<input type="checkbox" name="food[]" value="Orange">
<input type="checkbox" name="food[]" value="Apple">

Вы должны использовать in_array():

if(in_array('Orange', $_POST['food'])){
  echo 'Orange was checked!';
}

Не забудьте проверить, что массив установлен первым, например:

if(isset($_POST['food']) && in_array(...

флажки в виде массива и foreach ($_POST['food'] as $selected_food)работать на проверенных один хорошо, спасибо
bcag2

42

Пусть ваш HTML для вашего флажка будет как

<input type="checkbox" name="check1">

Затем после отправки формы вам необходимо проверить, как

if (isset($_POST['check1'])) {

    // Checkbox is selected
} else {

   // Alternate code
}

Предполагая, что это check1должно быть ваше имя флажка. И если ваш метод отправки формы, GETто вам нужно проверить с $_GETпеременными, такими как

if (isset($_GET['check1'])) {

   // Checkbox is selected
} 


6

Я использовал этот трюк в течение нескольких лет, и он отлично работает без каких-либо проблем с состоянием отмеченных / не отмеченных флажков при использовании с PHP и базой данных.

HTML-код: (для страницы добавления)

<input name="status" type="checkbox" value="1" checked>

Подсказка: снимите флажок, если вы хотите, чтобы он был отключен по умолчанию

HTML-код: (для страницы редактирования)

<input name="status" type="checkbox" value="1" 
<?php if ($row['status'] == 1) { echo "checked='checked'"; } ?>>

Код PHP: (используйте для добавления / редактирования страниц)

$status = $_POST['status'];
if ($status == 1) {
$status = 1;
} else {
$status = 0;
}

Подсказка: всегда будет пустое значение, если пользователь не проверил его. Итак, у нас уже есть код PHP для его перехвата, в противном случае оставьте значение 0. Затем просто используйте переменную $ status для базы данных.


1
это действительно хорошая форма, чтобы сделать это в чистом простом php. но нужно отметить, что значение флажка является строкой, когда оно активировано, и несуществующим значением, если оно отмечено.
Элвис Технологии

4

Чтобы проверить, установлен ли флажок, используйте empty ()

Когда форма отправлена, флажок ВСЕГДА будет установлен, потому что ВСЕ переменные POST будут отправлены вместе с формой.

Проверьте, отмечен ли флажок пустым, следующим образом:

//Check if checkbox is checked    
if(!empty($_POST['checkbox'])){
 #Checkbox selected code
} else {
 #Checkbox not selected code
}

3
Если флажок снят, он не будет опубликован, поэтому он будет установлен ВСЕГДА.
Вессам Эль Махди

^ НЕ * всегда будет установлен
Codesee

3

Вы можете проверить соответствующее значение как установленное и непустое в массиве $ _POST или $ _GET в зависимости от действия вашей формы.

то есть: с формой POST, использующей name«test» (то есть <input type="checkbox" name="test">, вы бы использовали:

if(isset($_POST['test']) {
   // The checkbox was enabled...

}

2

Узнать о isset какая встроенная «функция» может использоваться в операторах if, чтобы определить, была ли переменная использована или установлена

Пример:

    if(isset($_POST["testvariabel"]))
     {
       echo "testvariabel has been set!";
     }

2

Ну, приведенные выше примеры работают только тогда, когда вы хотите ВСТАВИТЬ значение, бесполезно для ОБНОВЛЕНИЯ разных значений для разных столбцов, поэтому вот мой маленький трюк для обновления:


//EMPTY ALL VALUES TO 0 
$queryMU ='UPDATE '.$db->dbprefix().'settings SET menu_news = 0, menu_gallery = 0, menu_events = 0, menu_contact = 0';
            $stmtMU = $db->prepare($queryMU);
            $stmtMU->execute();
if(!empty($_POST['check_menus'])) {
    foreach($_POST['check_menus'] as $checkU) {
try {
//UPDATE only the values checked
    $queryMU ='UPDATE '.$db->dbprefix().'settings SET '.$checkU.'= 1';
            $stmtMU = $db->prepare($queryMU);
            $stmtMU->execute();  
        } catch(PDOException $e) {
          $msg = 'Error: ' . $e->getMessage();}

        }
}
<input type="checkbox" value="menu_news" name="check_menus[]" />
<input type="checkbox" value="menu_gallery" name="check_menus[]" />

....

Секрет в том, чтобы сначала обновить все ЗНАЧЕНИЯ (в данном случае на 0), и, поскольку он будет отправлять только проверенные значения, это означает, что все, что вы получите, должно быть установлено в 1, поэтому для всего, что вы получаете, установлено в 1.

Примером является PHP, но он применим ко всему.

Радоваться, веселиться :)


2

Вы можете сделать это с коротким, если:

$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;

или с новым PHP7 Null coalescing operator

$check_value = $_POST['my_checkbox_name'] ?? 0;


1

Минималистическая логическая проверка с сохранением положения переключателя

<?php

$checked = ($_POST['foo'] == ' checked');

?>

<input type="checkbox" name="foo" value=" checked"<?=$_POST['foo']?>>

1
Когда вы даете ответ, желательно дать какое-то объяснение, ПОЧЕМУ ваш ответ тот. Это особенно верно, когда отвечаешь на ОЧЕНЬ старый пост 11 других ответов.
Стивен Раух

Хорошо, что вы признаете необходимость того, чтобы флажок сохранял свое состояние. Тем не менее, ваш код для этого не является правильным.
Верн Дженсен

1
<?php

  if (isset($_POST['add'])) {

    $nama      = $_POST['name'];
    $subscribe = isset($_POST['subscribe']) ? $_POST['subscribe'] : "Not Checked";

    echo "Name: {$nama} <br />";
    echo "Subscribe: {$subscribe}";

    echo "<hr />";   

  }

?>

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" >

  <input type="text" name="name" /> <br />
  <input type="checkbox" name="subscribe" value="news" /> News <br />

  <input type="submit" name="add" value="Save" />

</form>

Вы можете объяснить свою цель здесь?
Элвис Технологии

0

в BS3 можно поставить

  <?php
                  $checked="hola";
                  $exenta = $datosOrdenCompra[0]['exenta'];
                  var_dump($datosOrdenCompra[0]['exenta']);
                  if(isset($datosOrdenCompra[0]['exenta']) and $datosOrdenCompra[0]['exenta'] == 1){

                      $checked="on";

                  }else{
                    $checked="off";
                  }

              ?>
              <input type="checkbox" id="exenta" name="exenta" <?php echo $checked;?> > <span class="label-text"> Exenta</span>

Обратите внимание на использованиеisset($datosOrdenCompra[0]['exenta'])



0

WordPress имеют checked()функцию. Ссылка: https://developer.wordpress.org/reference/functions/checked/

checked( mixed $checked, mixed $current = true, bool $echo = true )

Описание Сравнивает первые два аргумента и, если они совпадают, отмечены

Параметры $ проверено (смешано) (обязательно) Одно из значений для сравнения

$ current (mixed) (необязательно) (true) Другое значение для сравнения, если не просто true Значение по умолчанию: true

$ echo (bool) (необязательно): выводить или возвращать строку Значение по умолчанию: true

Вернуть html атрибут #Return (string) или пустую строку


-3
<?php

if(isset($_POST['nameCheckbox'])){
    $_SESSION['fr_nameCheckbox'] = true;
}

?>

<input type="checkbox" name="nameCheckbox" 

<?php 

if(isset($_SESSION['fr_nameCheckbox'])){
    echo 'checked'; 
    unset($_SESSION['fr_nameCheckbox']);
} 

?>

Добро пожаловать в стек переполнения! Хотя этот фрагмент кода может решить проблему, он не объясняет, почему и как он отвечает на вопрос. Пожалуйста, включите объяснение вашего кода , так как это действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код. Флаггеры / рецензенты: для ответов только с кодом, таких как этот, downvote, не удаляйте!
Скотт Уэлдон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.