php: составной оператор if (игнорируется) - PullRequest
2 голосов
/ 18 мая 2011

Я хочу что-то повторить, если субдомен не «мобильный» и имя файла не «дизайн» или «фотография», поэтому эхо, если (не «мобильный» и не «дизайн») или (не «мобильный») а не "фото").

Код, который я написал:

<?php
    if ( ($subdomain != mobile) && ($currentFileName != design || $currentFileName != photo) ) {
        echo ('code')
    }
?>

но ему не нравится сложное утверждение. если я просто сделаю ($subdomain!=mobile), это сработает; если я просто сделаю ($currentFileName!=design), это сработает; и если я просто сделаю ($currentFileName!=photo), это сработает ... Приведенный выше код не приводит к ошибке ... он просто ничего не делает.

Есть ли какой-то особый способ объединить / сгруппировать утверждение, которое я просто не получаю? Я чувствую, что это не должно быть сложно (и я сделал гораздо более сложные вещи с php без этой большой проблемы ...). Я смоделировал свое заявление после этого: http://www.php.net/manual/en/control-structures.if.php#101724

Спасибо!

EDIT: FYI:

$subdomain = implode(array_slice(array_reverse(explode('.', $baseURL)),2)); //resolves to "test"
$basename = basename($_SERVER['REQUEST_URI']); //resolves to "design.php"
$currentFileName = basename($basename, ".php"); //resolves to "design"

новая проблема заключается в том, что все в поддомене "mobile" теперь перехватывается, поэтому ни одна страница в нем не получает "код" из echo (даже те, которые не "design" или "photo").

самый последний код, который я пробовал:

if ( ($subdomain != 'test' && $currentFileName != 'design') && ($subdomain!='test' && $currentFileName != 'photo') ) {
    echo ('ajax code');
}

но все еще нет игры в кости: (

Ответы [ 4 ]

5 голосов
/ 18 мая 2011

В вашей логике есть изъян. Скорее всего, вы хотите && не ||. Если вы подумаете об утверждении на минуту, оно станет очевидным. Допустим, следующий сценарий: $ currentFileName - это 'design'. Это пройдет, так как это не «фото». Если мы сделаем $ currentFileName равным 'photo', он все равно пройдет, так как он не будет равен 'design'.

EDIT: И, пожалуйста, используйте кавычки при сравнении строк. PHP попытается сначала найти константу с этим именем, а затем предположить, что это строка, потому что она не находит ее.

1 голос
/ 18 мая 2011

Заменить || на && - должно быть 'AND'

if ( ($subdomain != 'mobile') && ($currentFileName != 'design' && $currentFileName != 'photo') ) {
        echo ('code');
    }
0 голосов
/ 18 мая 2011

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

Попытка:

<?php
if ( ($subdomain != 'mobile') && ($currentFileName != 'design' || $currentFileName != 'photo') ) {
  echo 'code';
}
?>

Если это по-прежнему не работает должным образом, отладьте $subdomain и $currentFileName, чтобы убедиться, что они соответствуют вашим ожиданиям.

Примечание: по комментариям может показаться, что ваша логика также неверна.

0 голосов
/ 18 мая 2011

Я понимаю, что это должно быть:

<?php
    if ($subdomain != 'mobile' && $currentFileName != 'design' && $currentFileName != 'photo') {
        echo ('code');
    }
?>

Потому что 'или' сделать так, чтобы оно соответствовало любому имени файла, включая 'design' и 'photo'.добавлено:)

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