it-roy-ru.com

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

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

231
Thew

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

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

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

isset($_POST['test'])

или же 

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

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

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

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

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

<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(...
48
rybo111

Пусть ваш 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
} 
37
Gautam3164
$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;
7
Hammad Khan

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

4
ZEESHAN ARSHAD

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

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

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

}
3
John Parker

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


//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
Hiram

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

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

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

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

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

Пример:

    if(isset($_POST["testvariabel"]))
     {
       echo "testvariabel has been set!";
     }
2
user2451511
$is_checked = isset($_POST['your_checkbox_name']) &&
              $_POST['your_checkbox_name'] == 'on';

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

1
Martin Thoma

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

<?php

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

?>

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

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

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

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

$check_value = $_POST['my_checkbox_name'] ?? 0;
1
Mazz
<?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

в 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
Elvis Technologies