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

266

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

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

Ответы:

342

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

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

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

isset($_POST['test'])

или

if ($_POST['test'] == 'value1') ...
m_vitaly
источник
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"> 
regilero
источник
Я также заметил об этом, но я чувствую себя безопасным в использовании: 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(...
rybo111
источник
флажки в виде массива и 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
} 
Gautam3164
источник
15
$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;
Хаммад хан
источник
очень быстро и очень умно
Тарек Каладжи
лучшее решение, которое я видел
Дебби Курт
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!";
     }
user2451511
источник
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;
Mazz
источник
1
$is_checked = isset($_POST['your_checkbox_name']) &&
              $_POST['your_checkbox_name'] == 'on';

Оценка короткого замыкания позаботится о том, чтобы вы не your_checkbox_nameполучили доступ, когда она не была отправлена.

Мартин Тома
источник
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>
antelove
источник
Вы можете объяснить свою цель здесь?
Элвис Технологии
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

вход фильтра (INPUT_POST, 'checkbox_name', FILTER_DEFAULT, FILTER_FORCE_ARRAY)

Thowfeek
источник
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) или пустую строку

Aliqua
источник
-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']);
} 

?>
Grzegorz
источник
Добро пожаловать в стек переполнения! Хотя этот фрагмент кода может решить проблему, он не объясняет, почему и как он отвечает на вопрос. Пожалуйста, включите объяснение вашего кода , так как это действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код. Флаггеры / рецензенты: для ответов только с кодом, таких как этот, downvote, не удаляйте!
Скотт Уэлдон