2013-03-19 3 views
9

Я пытаюсь показать сообщение (1), если текущая ссылка не содержит слов «index» или «/?».Строка PHP не содержит

Я нашел это делать прямо противоположное: «? /»

$page = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; 
if (strpos($page, 'index.php') !== false xor strpos($page, '/?') !== false) 
{ 
echo"1"; 
} 
else 
{ 
echo"2"; 
} 

Этот код отображается «2» на страницах, где нет никакого «индекса» или в ссылке, но мне нужно обратное: отобразить «1», где нет «индекса» или «/?» в ссылке.

BTW Я пробовал все комбинации:! Strpos, TRUE,! ==, но, похоже, это не работает для меня. Мне нужен способ без «else» в коде, иначе я мог бы просто изменить эхо.

+0

Булева Comparision 'xor' должен сделать это. – hjpotter92

+0

try === false || === false {один или оба отсутствуют} – Waygood

ответ

20
$page = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; 
if (strpos($page, 'index.php') === false && strpos($page, '/?') === false) 
{ 
    echo"1"; 
} 
else 
{ 
    echo"2"; 
} 

Если отобразить 1 если нет index.php или /? в $page

+0

no 'index.php' __OR__' /? 'Но вы используете __AND__ && – Waygood

+0

@stu отлично работает. Как узнать, когда использовать xor, || или &&? && был единственным, кого я не пробовал, и это было решением lol. Спасибо чувак. Кстати, почему он работает с И, если верно только одно из двух? – 10now

+1

@Waygood Я предположил, что url будет '/ index.php' или' /? 'Не содержать обоих, поэтому, если url является'/index.php', тогда 'strpos ($ page, '/?')' Вернется false, и 1 будет возвращен, если url является '/?', тогда 'strpos ($ page, 'index.php')' вернет false, а 1 будет возвращен, если в URL-адресе нет ни одного из них, оба оператора вернет false и 1 будет возвращен, поэтому, если вы используете * OR *, код всегда будет возвращать 1, если URL не был 'index.php /?'? – Stu

2

Условием в вашем случае утверждение

if(<<COND 1>> xor <<COND 2>>) 

где функция xor «s является

возвращение TRUE если <<COND 1>> или <<COND 2>>TRUE, но не оба.

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

if(strpos($page, 'index.php') !== false OR strpos($page, '/?') !== false) 

Проверьте эту страницу для получения дополнительной информации о logical operators.

+1

+1 для объяснения XOR, а также для комментария выше относительно закона Де Моргана ;-) – Havelock

+0

да, но мне нужно решение без него. В ваших решениях говорилось обратное: «если индекс в ссылке делает это». Мне нужно «если индекс не в ссылке, сделайте это». – 10now

0

Попробуйте это:

$page = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; 

if (strpos($page, 'index.php') === false || strpos($page, '/?') === false) 

{ 

echo"1"; 

} 

else 

{ 

echo"2"; 

} 
2
$page = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; 
if (strpos($page, '/?') === false && strpos($page, 'index.php') === false) 
{ 
    echo "1"; 
} 
else 
{ 
    echo "2"; 
} 
Смежные вопросы