Как получить значение флажка, если оно не проверено? [Дубликат]

Насколько я могу судить, нет никакого искажения (это было бы примерно так: (?<=prefix)). Но, возможно, помеченное совпадение не поддерживается ((?"<name>"...)). Попробуйте без этого и сравните совпадения по их числу:

/[\W"]*(.*?)[\"]*?\s*[<(]?(\S+@[^\s>)]+)[>)]?/

Имя будет первым, а электронная почта - второй захваченной группой

217
задан Thew 8 February 2015 в 23:26
поделиться

15 ответов

270
ответ дан Andrew Thompson 23 August 2018 в 02:47
поделиться

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

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

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

//Check if checkbox is checked    
if(!empty($_POST['checkbox']){
#Checkbox selected code
} else {
#Checkbox not selected code
}
1
ответ дан andy 23 August 2018 в 02:47
поделиться
<?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
ответ дан antelove 23 August 2018 в 02:47
поделиться

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

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

<input type="hidden" name="foo" value="0" />
<input type="checkbox" name="foo" value="1"> 
84
ответ дан Chuck Le Butt 23 August 2018 в 02:47
поделиться
  • 1
    Я также заметил об этом, но я уверен, что его можно использовать: Zend Framework тоже делает это! – HPM 3 September 2014 в 11:49
  • 2
    Это интересно. Но есть ли крошечная вероятность, что пользовательский агент может представить первое значение вместо последнего, если флажок установлен? – rybo111 9 December 2015 в 22:47
  • 3
    @ rybo111, для пользовательского агента я так не думаю, но для настраиваемого парсера формы javascript вам следует позаботиться. – regilero 9 December 2015 в 22:52
  • 4
    Извините, может кто-нибудь объяснить мне, как это работает? Я не понял. Почему это скрытое поле, если только последнее значение всегда отправлено (input[type="checkbox"])? – tonix 31 January 2016 в 21:34
  • 5
    когда флажок снят, он не передается в сообщении (поэтому передается только скрытый). Когда он проверяется, он передается и перезаписывает скрытое значение. – regilero 1 February 2016 в 22:07

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

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

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

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

    // Checkbox is selected
} else {

   // Alternate code
}

Предполагая, что check1 должен быть вашим checkbox name.And, если ваш метод отправки формы GET, вам нужно проверить с помощью $_GET переменных, таких как

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

   // Checkbox is selected
} 
36
ответ дан Gautam3164 23 August 2018 в 02:47
поделиться
$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;
7
ответ дан Hammad Khan 23 August 2018 в 02:47
поделиться

Ну, приведенные выше примеры работают только тогда, когда вы хотите INSERT значение, не полезное для UPDATE разных значений для разных столбцов, так что вот мой маленький трюк для обновления:


//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[]" />

....

Секрет только сначала обновляет все значения VALUES (в данном случае до 0), а так как только отправляет отмеченные значения, это означает, что все, что вы получаете, должно быть установлено равным 1, поэтому все вы устанавливаете его в 1.

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

Удачи:)

2
ответ дан Hiram 23 August 2018 в 02:47
поделиться

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

т.е.: с формой POST с использованием name of «test» (т.е.: <input type="checkbox" name="test">, вы должны использовать:

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

}
2
ответ дан John Parker 23 August 2018 в 02:47
поделиться
$is_checked = isset($_POST['your_checkbox_name']) &&
              $_POST['your_checkbox_name'] == 'on';

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

1
ответ дан Martin Thoma 23 August 2018 в 02:47
поделиться

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

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

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

$check_value = $_POST['my_checkbox_name'] ?? 0;
1
ответ дан Mazz 23 August 2018 в 02:47
поделиться
<?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']);
} 

?>
-3
ответ дан rbr94 23 August 2018 в 02:47
поделиться

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

<?php

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

?>

<input type="checkbox" name="foo" value=" checked"<?=$_POST['foo']?>>
1
ответ дан Rembo 23 August 2018 в 02:47
поделиться

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

<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(...
39
ответ дан rybo111 23 August 2018 в 02:47
поделиться

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

. Пример:

    if(isset($_POST["testvariabel"]))
     {
       echo "testvariabel has been set!";
     }
2
ответ дан Venkateshwaran Selvaraj 23 August 2018 в 02:47
поделиться

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

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

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

Подсказка: удалите «флажок», если вы хотите показать его как непроверенный по умолчанию

Код HTML: (для Edit Page)

<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 для базы данных.

0
ответ дан ZEESHAN ARSHAD 23 August 2018 в 02:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: