PHP isset для формы отправки с оператором или

Можно ли добавить оператор «ИЛИ» в код формы отправки php isset, когда есть две кнопки отправки с разными именами? Например:

if (!isset($_POST['submitRequest'] || $_POST['submit']))

Приведенный выше код подсказок и ошибка. Пожалуйста посоветуй.


person Chamara Keragala    schedule 20.06.2012    source источник
comment
Вы хотите TRUE, когда оба установлены, оба не установлены или что еще? То, как вы показываете код, сбивает с толку.   -  person Alvin Wong    schedule 20.06.2012
comment
я хочу, чтобы одна из вещей была правдой   -  person Chamara Keragala    schedule 20.06.2012
comment
пожалуйста, не редактируйте свой вопрос таким образом, чтобы исходный вопрос был потерян. Это сбивает с толку пользователя, который найдет этот вопрос позже - ответы не будут соответствовать новому вопросу.   -  person cypherabe    schedule 20.06.2012


Ответы (7)


пытаться:

if(isset($_POST['submitRequest']) || isset($_POST['submit'])){
   //do something
}
person mgraph    schedule 20.06.2012

Нет, это невозможно. Вам нужна каждая переменная в своей собственной функции isset. Вы не можете их комбинировать.

person Madara's Ghost    schedule 20.06.2012

Это не то, как использовать оператор or. Вы должны поместить его между двумя вызовами isset.

if ( ! isset($_POST['submitRequest']) || isset($_POST['submit']) ) { }

Вы всегда должны внимательно смотреть на синтаксис. Помните, что оператор или используется для того, чтобы все условие оценивалось как истинное, если левое условие или правое условие истинно. Таким образом, вам всегда нужно использовать оператор или с двумя условиями.

Кроме того, если вы хотите сделать это с помощью оператора and, вы можете просто использовать один вызов isset.

if ( isset($_POST['username'], $_POST['password']) ) { }
person Tino van der Laan    schedule 20.06.2012
comment
Вторая строка кода возвращает true, только если установлены оба. Это будет соответствовать and, а не or. - person Bailey Parker; 20.06.2012
comment
Да, прочитайте комментарий, который я сделал выше. Это именно то, что я сказал. - person Tino van der Laan; 20.06.2012
comment
@TinovanderLaan Извинения. Я почему-то прочитал "или" вместо "и". - person Bailey Parker; 20.06.2012
comment
@PhpMyCoder нет проблем :) И Салман А, оба были просто примерами используемой логики. И нет, второй на самом деле рассматривает оба. Посмотрите php.net/isset для подтверждения. - person Tino van der Laan; 20.06.2012
comment
if (!isset($_POST['submitRequest']) || !isset($_POST['submit'])) я пробовал это, и это не работает:/ - person Chamara Keragala; 20.06.2012
comment
@chamzor В комментариях вы можете (и должны) заключать свой код в обратные кавычки (`), чтобы он был выделен. - person Bailey Parker; 20.06.2012
comment
@chamzor Ответ, который предложили mgraph, многие другие и я, работает. - person Bailey Parker; 20.06.2012

Вам нужно вызвать функцию isset для соответствующих переменных по отдельности. У вас есть возможность использовать любой из двух синтаксисов, в зависимости от соглашения, которому вы следуете.

if(isset($_POST['submitRequest']) || isset($_POST['submit'])){
   //do something
}

if(isset($_POST['submitRequest']) OR isset($_POST['submit'])){
   //do something
}
person Rishabh    schedule 20.06.2012

Вы можете использовать isset() для нескольких переменных:

if(isset($_POST['submitRequest']) || isset($_POST['submit'])) {
    // One of them was pushed
}

Будьте осторожны при передаче нескольких аргументов в isset(). Как документы руководства:

Если указано несколько параметров, то isset() вернет TRUE, только если установлены все параметры. Оценка идет слева направо и останавливается, как только встречается неустановленная переменная.

Таким образом, isset($_POST['submitRequest'], $_POST['submit']) будет эквивалентно isset($_POST['submitRequest']) && isset($_POST['submit']). Однако это второе предложение может быть полезно, если вы хотите проверить !isset($_POST['submitRequest']) || !isset($_POST['submit']). Поскольку при передаче нескольких аргументов isset() вернет false для первого неустановленного, вы можете использовать !isset($_POST['submitRequest'], $_POST['submit']).

person Bailey Parker    schedule 20.06.2012

немного уточнить:

isset(), empty() и некоторые другие — это не функции, а языковые конструкции. Таким образом, они не работают во всех отношениях, как можно было бы ожидать, исходя из того, что они выглядят как функции.

Важная часть здесь заключается в следующем: они проверяют только переменные, они не могут и не оценивают результаты выражений. Использование || делает $_POST['submitRequest'] || $_POST['submit'] выражением. Результат рассчитывается только временно, а не сохраняется в определенной переменной, которая может быть установлена ​​или пуста.

person cypherabe    schedule 20.06.2012

Я знаю, что неправильно понял исходный пост.

if(isset($_POST['submitRequest'])||isset($_POST['submit'])){
    // you can do something here
}

Исходный (неверный)

Вы можете использовать это:

if(!isset($_POST['submitRequest'], $_POST['submit'])){
    die("Fail");
}

Если указано несколько параметров, функция проверит их все. Это вернет TRUE, только если установлены все параметры.

Ссылка: http://php.net/manual/en/function.isset.php

person Alvin Wong    schedule 20.06.2012
comment
Это приведет к ошибке, если какая-либо из переменных не установлена. Это должно привести к ошибке, если ОБЕ переменные не установлены. - person Salman A; 20.06.2012
comment
Я хочу, чтобы это было правдой, если установлен один из параметров - person Chamara Keragala; 20.06.2012