Як прочитати, якщо в 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
Значення "увімкнено" може підтримуватися деякими браузерами, коли атрибут значення не встановлений, але загалом краще встановити атрибут значення та перевірити його на подання.
m_vitaly

3
Чи змінюється значення "Value1", якщо прапорець встановлений?
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"]'s)?
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 та Database.

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. Тоді просто використовуйте змінну статусу $ для бази даних.


1
це дійсно гарна форма зробити це в чистому простому php. але потрібно зауважити, що значення прапорця рядок увімкнено, коли він активований, неіснуюче значення, якщо воно встановлено.
Elvis Technologies

4

Щоб встановити прапорець, поставте прапорець ()

Коли форма буде подана, прапорець ЗАВЖДИ буде встановлений, тому що ВСІ змінні POST будуть надсилатися разом із формою.

Поставте прапорець, чи встановлено прапорець із порожнім:

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

3
Якщо прапорець не встановлений, він не буде розміщений, тому він буде встановлений ЗАРАЗ.
Вессам Ель Махді

^ НЕ * встановлюйте завжди
The Codesee

3

Ви можете перевірити відповідне значення як встановлене і не порожнє в масиві $ _POST або $ _GET залежно від дії вашої форми.

тобто: із формою POST, використовуючи name"тест" (тобто:, <input type="checkbox" name="test">ви б використовували:

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

}

2

Дізнайтеся про те, issetщо є вбудованою "функцією", яку можна використовувати, якщо заяви заявляють, чи використовувалась чи встановлена ​​змінна

Приклад:

    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 інших відповідей.
Стівен Рауч

Добре, що ви визнаєте необхідність того, щоб прапорець зберігав його стан. Однак ваш код для цього не є правильним.
Vern Jensen

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>

чи можете ви пояснити свою мету тут?
Elvis Technologies

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

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

Опис Порівняє перші два аргументи та якщо вони ідентичні позначкам, як перевірено

Параметри $ перевірено (змішано) (Обов’язково) Одне із значень для порівняння

$ current (змішане) (Необов’язково) (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.