У меня возникли проблемы с попыткой сделать приведенное ниже выражение так, как я этого хочу.
Я пытаюсь отобразить сообщение об ошибке для формы заказа, если хотя бы одно текстовое поле не заполнено. Ниже приведен фрагмент моего PHP-кода. "CookieGiftBox" - это имя флажка, который пользователи могут выбрать, и если он выбран, они должны ввести количество файлов cookie в соответствии с их желаемыми вкусами в текстовых полях. Как я могу отобразить сообщение об ошибке, которое будет отображаться при выборе флажка IS, но никакие текстовые поля не были заполнены?
<?php
if (isset($_POST['cookieGiftBox'])
&& (!isset($_POST['sugar'])
|| ($_POST['chocolateChip'])
|| ($_POST['chocolateChipPecan'])
|| ($_POST['whiteChocolateRaspberry'])
|| ($_POST['peanutChocolateChip'])
|| ($_POST['peanutButter'])
|| ($_POST['tripleChocolateChip'])
|| ($_POST['whiteChocolateChip'])
|| ($_POST['oatmealRaisin'])
|| ($_POST['cinnamonSpice'])
|| ($_POST['candyChocolateChip'])
|| ($_POST['butterscotchToffee'])
|| ($_POST['snickerdoodle']))) {
$error.="<br />Please enter an Amount for Cookie Flavors";
}
?>
&& имеет приоритет над ||, поэтому вам нужно будет использовать круглые скобки для получения ожидаемого результата:
if (isset($_POST['cookieGiftBox']) && (!isset($POST['sugar']) ||...)
На самом деле, чтобы проверить, выбрано ли ничего, вы сделали бы что-то вроде этого: if checkbox is checked and not (sugar is checked or chocolatechip is checked)
или эквивалент: if checkbox is checked and sugar is not entered and chocolatechip is not entered...
Если вы хотите узнать больше, найдите информацию о булевой алгебре.
Обновление: в вашем примере и в правильном синтаксисе предложение, которое я принял в качестве примера, должно понравиться (для первого предложения обратите внимание на не (!) И круглые скобки вокруг полей, а не на флажок):
if (isset($_POST['cookieGiftBox']) &&
!(
isset($_POST['sugar']) ||
isset($_POST['chocolatechip'])
)
) { error ...}
Или второе предложение, которое может быть проще понять (обратите внимание на && вместо ||):
if (isset($_POST['cookieGiftBox']) &&
!isset($_POST['sugar']) &&
!isset($_POST['chocolatechip'])
) { error...}
Использование ands гарантирует, что это правда (и, таким образом, показывает ошибку), если ни один из полей сахара, шоколада и т.д. Не установлен, когда флажок подарочного флажка установлен. Поэтому, если флажок установлен, и никакие поля не заданы, он выглядит так: (true && !false && !false)
что эквивалентно (true && true && true)
которое true
, поэтому оно показывает ошибку. Если флажок установлен и введен сахар, он будет выглядеть так: (true && !true && !false)
, equ. to (true && false && true)
, equ. на false
и, таким образом, ошибка не отображается. Если введены как сахар, так и шоколад, также ошибка не будет показана.
У меня проблема simillar:
Я стараюсь использовать:
if (isset($this->context->controller->php_self) && ($this->context->controller->php_self != 'category') || ($this->context->controller->php_self != 'product') || ($this->context->controller->php_self != 'index')){... }
То не работало, я изменяю его к:
if (isset($this->context->controller->php_self) && ($this->context->controller->php_self != 'category') && ($this->context->controller->php_self != 'product') && ($this->context->controller->php_self != 'index')){... }
Я не знаю, что это правильно?
Редактировать. Это неверно, но пока я не знаю, как это исправить.
if (isset($_POST['cookieGiftBox']) && (!$_POST['sugar']) || (!$_POST['chocolateChip'])) {
вот сокращенная версия того, что у меня есть. Этот код отображает ошибку, если флажок установлен и текст не введен в поля. Однако для очистки сообщения об ошибке необходимо заполнить оба текстовых поля 'sugar' и 'chocolateChip'. Я хотел бы иметь его, где нужно заполнить только одно поле. Итак, один ИЛИ другой ... Как я могу это сделать? Спасибо