Мы пытаемся использовать приведенную ниже часть кода
if (($_GET['1'] != "1") || ($_GET['1'] != "2")) {
Когда мы пробуем это независимо от того, какое значение имеет переменная, оно будет оцениваться как истинное, даже если данные введены как ложные. Когда мы используем
if (($_GET['1'] == "1") || ($_GET['1'] == "2")) {
и помещать данные, которые заставят его возвращать false, он работает правильно. Мы изменили способ выполнения инструкции if, чтобы мы могли получить эту работу, но я хотел бы знать, почему это не работает, если это то, что я делаю неправильно или ограничение в php с операторами или и не равными
благодаря
Ваш первый тест говорит следующее:
Если
$_GET['1']
является чем-то другим, кроме"1"
ИЛИ$_GET['1']
это что-то иное, чем"2"
Выражение всегда будет проходить: если оно равно 1
оно будет проходить тест != '2'
во второй половине вашего оператора if. Если он равен 2
он пройдет тест != '1'
в первом тайме и никогда не попадет во вторую половину теста.
Второй тест просто говорит:
Если
$_GET['1']
равно"1"
ИЛИ$_GET['1']
равно"2"
тогда выражение должно пройти
Вы, вероятно, захотите это выражение, которое пройдет, только если ни один из параметров не имеет правильное значение:
if(($_GET['1'] != '1') && ($_GET['1'] != '2'))
Выражение ниже всегда будет равно TRUE, потому что либо x не равно 1, либо x не равно 2. Невозможно, чтобы x мог одновременно равняться как 1, так и 2!
($x != 1) || ($x != 2)
Противоположно
($x == 1) || ($x == 2)
является
($x != 1) && ($x != 2)
Обратите внимание, что вы должны изменить || к &&.
если ваш код:
if (($_GET['1'] != "1") || ($_GET['2'] != "2")) {
любое значение или даже нулевое значение может ввести это условие. вы можете изменить || to && означает, что любая строка, не равная «1» и «2», может ввести условие
Не зная намерения заявления или того, с чего вы начали (или как вы его переработали), я не могу точно сказать, в чем проблема.
Тем не менее, первый оператор будет оценивать только FALSE
если $_GET['1']
равно 1, а $_GET['2']
равно 2.
Второй оператор будет оценивать только FALSE
если $_GET['1']
не равно 1, а $_GET['2']
не равно 2.
Я предполагаю, что вы хотели в своем первом заявлении
if (($_GET['1'] != "1") && ($_GET['2'] != "2")) {
который равен FALSE
если $_GET['1']
равно 1, а $_GET['2']
равно 2.
Пытаться:
if (($ _GET ['1']! = "1") && ($ _GET ['2']! = "2")) {
Если вы используете! = В обоих утверждениях, тогда вам нужно использовать && вместо || чтобы оба утверждения оценивались.
По существу, используя || означает, что первый оператор получает оценку, и если он является ложным, тогда PHP игнорирует второй оператор, потому что вы используете OR. Но если вы используете &&, то PHP обязательно оценят оба оператора! =.