что я должен использовать && или || - PullRequest
0 голосов
/ 01 марта 2012

Вот мой код

<?php

if( $_SERVER['REQUEST_URI']!="/index.php?task=join&" || $_SERVER['REQUEST_URI']!="/index.php?task=join&step=1" 
|| $_SERVER['REQUEST_URI']!="/index.php?task=join&step=2" ) {
    include ("inc/js/script.php");
}

?>

Мне нужно сказать "if REQUEST_URI! = /Index.php?task=join& 'или' /index.php?task=join&step=1 'или' /index.php? task = join & step = 2 >>> include inc / js / script.php

Когда я использую &&, он работает правильно, но я думаю, что правильный ответ должен быть ||

Чтоне так, пожалуйста?

Ответы [ 6 ]

3 голосов
/ 01 марта 2012

Мне кажется, что вы хотите «И» - или вы можете изменить смысл всего этого на:

if (! (uri == first || uri == second || uri == third) )

Если подумать, URI не может быть одновременно "/index.php?task=join&" и"/index.php?task=join&step=1", поэтому он должен быть не равно одному из них - поэтому использование || в вашем текущем коде всегда вернет true.

2 голосов
/ 01 марта 2012

|| означает or, && означает and.Если вы ищете or, используйте ||.

Однако, если вы используете ||, условие всегда оценивается как true, так как $_SERVER['REQUEST_URI'] всегда будет либоотличается от "/index.php?task=join&" или "/index.php?task=join&step=1", поскольку не может быть и того и другого.

Так что я думаю, что вы на самом деле ищете условие and - &&.

Также, вы должны использовать strcmp для сравнения строк.

1 голос
/ 02 марта 2012

Ваше английское описание того, что вы хотите сделать, прекрасно, но когда вы переходите к коду, появляется ошибка перевода.

Вот поведение, которое вы сказали, что хотите:

if REQUEST_URI! = /Index.php?task=join& 'или' /index.php?task=join&step=1 'или' /index.php?task=join&step=2 >>> include inc / js / script.php

Когда вы так говорите, становится ясно, что «not» (! In! =) Применяется ко всем URI. Итак, давайте разберемся с этим НЕ и используем скобки, чтобы указать, что это относится ко всему:

если нет (REQUEST_URI = /index.php?task=join& 'или' /index.php?task=join&step=1 'или' /index.php?task=join&step=2) >>> include inc / js / script.php

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

if ! (REQUEST_URI == /index.php?task=join& or
        REQUEST_URI == /index.php?task=join&step=1 or
        REQUEST_URI == /index.php?task=join&step=2) 
    include inc/js/script.php

По сути, это решение, предложенное Джоном Скитом.

В качестве дальнейшего примечания, вот почему ваш код работает, если вы измените || s на && s. По сути, вы заново открыли хорошо известное логическое правило, называемое законом Де Моргана (упоминаемое в комментарии Салмана А.), которое имеет две формы (где «<==>» означает «тогда и только тогда»):

  1. ! (A || B) <==>! A &&! B
  2. ! (A && B) <==>! A || ! B

В соответствии с формой 1 закона де Моргана приведенный выше код, таким образом, такой же, как

if (!REQUEST_URI == /index.php?task=join& and
        !REQUEST_URI == /index.php?task=join&step=1 and
        !REQUEST_URI == /index.php?task=join&step=2) 
    include inc/js/script.php

, что совпадает с

if (REQUEST_URI != /index.php?task=join& and
        REQUEST_URI != /index.php?task=join&step=1 and
        REQUEST_URI != /index.php?task=join&step=2) 
    include inc/js/script.php
1 голос
/ 01 марта 2012

Если бы я понял, что вы хотите: я бы предложил использовать $ _GET и сделать это так:

<?php
 if ($_SERVER["PHP_SELF"] == "/index.php" && $_GET['task'] == "join" && (isset($_GET['step'] && ($_GET['step'] == 1 || $_GET['step'] == 2)))
 include_once("inc/js/script.php");



?>
1 голос
/ 01 марта 2012

Ответ &&, потому что вы хотите, чтобы оно было AND, поскольку вы сравниваете одну и ту же переменную , равную , не равную различным значениям.

Вы хотите, чтобы переменная была not this, not that, *AND* not the other.

Если он использует OR (||), то ему разрешено быть одним из них, но пока это не все из них (что, очевидно, не может быть).

0 голосов
/ 01 марта 2012

Хотите ли вы, чтобы uri запроса был:

а) Не равно ни одной из этих вещей (&&)

или

b) Не равно одной или нескольким (или всем) из этих вещей (||)

Вы хотите && Я подозреваю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...