Этот вопрос фактически означает « был проверен» (когда форма была отправлена). PHP определение , если флажок будет проверен, потребует вызов Ajax после того , как элемент был переключен.
rybo111
Ответы:
342
Если ваша HTML-страница выглядит так:
<inputtype="checkbox"name="test"value="value1">
После отправки формы вы можете проверить ее с помощью:
Флажки также могут иметь значение 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
Я также заметил об этом, но я чувствую себя безопасным в использовании: Zend Framework делает это тоже!
hpaknia
Это интересно. Но есть ли крошечная вероятность того, что пользовательский агент может передать первое значение вместо последнего, при условии, что флажок установлен?
rybo111
@ rybo111, для пользовательского агента я так не думаю, но для пользовательского анализатора форм javascript вы должны позаботиться.
Regilero
Извините, может кто-нибудь объяснить мне, как это работает? Я не поняла Зачем это скрытое поле, если всегда передается только последнее значение (это input[type="checkbox"]одно)?
tonix
6
когда флажок снят, он не передается в сообщении (поэтому передается только скрытое). Когда это проверено, это передано, и перезапишет скрытое значение.
Я использовал этот трюк в течение нескольких лет, и он отлично работает без каких-либо проблем с состоянием отмеченных / не отмеченных флажков при использовании с PHP и базой данных.
Подсказка: всегда будет пустое значение, если пользователь не проверил его. Итак, у нас уже есть код PHP для его перехвата, в противном случае оставьте значение 0. Затем просто используйте переменную $ status для базы данных.
это действительно хорошая форма, чтобы сделать это в чистом простом php. но нужно отметить, что значение флажка является строкой, когда оно активировано, и несуществующим значением, если оно отмечено.
Элвис Технологии
4
Чтобы проверить, установлен ли флажок, используйте empty ()
Когда форма отправлена, флажок ВСЕГДА будет установлен, потому что ВСЕ переменные POST будут отправлены вместе с формой.
Проверьте, отмечен ли флажок пустым, следующим образом:
//Check if checkbox is checked if(!empty($_POST['checkbox'])){#Checkbox selected code}else{#Checkbox not selected code}
Ну, приведенные выше примеры работают только тогда, когда вы хотите ВСТАВИТЬ значение, бесполезно для ОБНОВЛЕНИЯ разных значений для разных столбцов, поэтому вот мой маленький трюк для обновления:
//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();}}}
Секрет в том, чтобы сначала обновить все ЗНАЧЕНИЯ (в данном случае на 0), и, поскольку он будет отправлять только проверенные значения, это означает, что все, что вы получите, должно быть установлено в 1, поэтому для всего, что вы получаете, установлено в 1.
Когда вы даете ответ, желательно дать какое-то объяснение, ПОЧЕМУ ваш ответ тот. Это особенно верно, когда отвечаешь на ОЧЕНЬ старый пост 11 других ответов.
Стивен Раух
Хорошо, что вы признаете необходимость того, чтобы флажок сохранял свое состояние. Тем не менее, ваш код для этого не является правильным.
Добро пожаловать в стек переполнения! Хотя этот фрагмент кода может решить проблему, он не объясняет, почему и как он отвечает на вопрос. Пожалуйста, включите объяснение вашего кода , так как это действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код. Флаггеры / рецензенты: для ответов только с кодом, таких как этот, downvote, не удаляйте!
Ответы:
Если ваша HTML-страница выглядит так:
После отправки формы вы можете проверить ее с помощью:
или
источник
on
, когда они отмечены. Поэтому для совместимости проще в использованииisset($_POST['checkboxName'])
.value1
если флажок установлен. Если это не проверено,$_POST['test']
просто не существует.Zend Framework использует полезные опции для галочек, которые вы также можете сделать самостоятельно:
Каждый сгенерированный флажок связан со скрытым полем с тем же именем, помещенным непосредственно перед флажком, и со значением «0». Затем, если ваш флажок в качестве значения «1», вы всегда получите значение «0» или «1» в результате GET или POST
источник
input[type="checkbox"]
одно)?При использовании флажков в качестве массива:
Вы должны использовать
in_array()
:Не забудьте проверить, что массив установлен первым, например:
источник
foreach ($_POST['food'] as $selected_food)
работать на проверенных один хорошо, спасибоПусть ваш HTML для вашего флажка будет как
Затем после отправки формы вам необходимо проверить, как
Предполагая, что это
check1
должно быть ваше имя флажка. И если ваш метод отправки формы,GET
то вам нужно проверить с$_GET
переменными, такими какисточник
источник
Я использовал этот трюк в течение нескольких лет, и он отлично работает без каких-либо проблем с состоянием отмеченных / не отмеченных флажков при использовании с PHP и базой данных.
HTML-код: (для страницы добавления)
Подсказка: снимите флажок, если вы хотите, чтобы он был отключен по умолчанию
HTML-код: (для страницы редактирования)
Код PHP: (используйте для добавления / редактирования страниц)
Подсказка: всегда будет пустое значение, если пользователь не проверил его. Итак, у нас уже есть код PHP для его перехвата, в противном случае оставьте значение 0. Затем просто используйте переменную $ status для базы данных.
источник
Чтобы проверить, установлен ли флажок, используйте empty ()
Когда форма отправлена, флажок ВСЕГДА будет установлен, потому что ВСЕ переменные POST будут отправлены вместе с формой.
Проверьте, отмечен ли флажок пустым, следующим образом:
источник
Вы можете проверить соответствующее значение как установленное и непустое в массиве $ _POST или $ _GET в зависимости от действия вашей формы.
то есть: с формой POST, использующей
name
«test» (то есть<input type="checkbox" name="test">
, вы бы использовали:источник
Узнать о
isset
какая встроенная «функция» может использоваться в операторах if, чтобы определить, была ли переменная использована или установленаПример:
источник
Ну, приведенные выше примеры работают только тогда, когда вы хотите ВСТАВИТЬ значение, бесполезно для ОБНОВЛЕНИЯ разных значений для разных столбцов, поэтому вот мой маленький трюк для обновления:
....
Секрет в том, чтобы сначала обновить все ЗНАЧЕНИЯ (в данном случае на 0), и, поскольку он будет отправлять только проверенные значения, это означает, что все, что вы получите, должно быть установлено в 1, поэтому для всего, что вы получаете, установлено в 1.
Примером является PHP, но он применим ко всему.
Радоваться, веселиться :)
источник
Вы можете сделать это с коротким, если:
или с новым PHP7
Null coalescing operator
источник
Оценка короткого замыкания позаботится о том, чтобы вы не
your_checkbox_name
получили доступ, когда она не была отправлена.источник
Минималистическая логическая проверка с сохранением положения переключателя
источник
источник
в BS3 можно поставить
Обратите внимание на использование
isset($datosOrdenCompra[0]['exenta'])
источник
вход фильтра (INPUT_POST, 'checkbox_name', FILTER_DEFAULT, FILTER_FORCE_ARRAY)
источник
WordPress имеют
checked()
функцию. Ссылка: https://developer.wordpress.org/reference/functions/checked/Описание Сравнивает первые два аргумента и, если они совпадают, отмечены
Параметры $ проверено (смешано) (обязательно) Одно из значений для сравнения
$ current (mixed) (необязательно) (true) Другое значение для сравнения, если не просто true Значение по умолчанию: true
$ echo (bool) (необязательно): выводить или возвращать строку Значение по умолчанию: true
Вернуть html атрибут #Return (string) или пустую строку
источник
источник