Как читать, если в 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.