2010-09-29 4 views
2

Цель: Попытка получить состояние кнопки опрокидывания, чтобы оставаться включенным, когда URL равняется «Enhanced.php».PHP if/else не работает

Проблема: Состояние кнопки не остается «включено», когда URL-адрес равен «Enhanced.php».

(кнопка правильно действует как опрокидывание)


sidemenu.php sidemenu.php используется как PHP включают в себя на всех страницах (я не знаю, если это делает разницу

<?php 

$script = $_SERVER['SCRIPT_NAME']; 


//Set the default state to OFF and only turn ON if we are on the current URL. 

$enhancedstate = OFF; 


$pos = strpos($script, "enhanced.php"); 
if($pos === true) { 
$enhancedstate = ON; 
} 


?> 


<div class="sideMenu"> 

    <a href="enhanced.php" 
     onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image1','','/images/Button_ON_01.gif',1)"> 
     <img src="/images/Button_<? echo $enhancedstate; ?>_01.gif" name="Image1" border="0"> 
    </a> 

Кто-нибудь видел причин, почему состояние кнопки не остаться «ON», когда текущий URL является «enhanced.php». ТИА

ответ

12

strpos возвращает int на успех, а FALSE - при сбое.

Изменить if($pos === true)if($pos !== false).

Оператор === сравнивает значения и типы. Таким образом, при успехе strpos возвращает значение int, которое может иметь то же значение, что и TRUE, но это не тот же тип.

EDIT: Как уже сказал, вы должны изменить:

$enhancedstate = OFF в $enhancedstate = 'OFF'

PHP очень снисходителен, и позволит вам использовать не-кавычках, но вы должны стараться не делать, если не ON и OFF на самом деле являются константами.

+2

Очки за то, что они были самыми быстрыми в количестве правильных ответов;) – Wrikken

+1

Я обвиняю свое flaky connection, +1 – BoltClock

+1

Лучший сайт когда-либо. TY из noob. :-) – lashrew

1

strpos() не возвращает bool(true) в качестве значения. Это либо bool(false), либо int.

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

if($pos === true) 

Вы в основном ищете значение bool(true), которое никогда не произойдет (=== проверяет тип и значение).

Изменить это:

if($pos !== false) 

Не используйте $pos == true, как это будет ошибкой, если строка начинается с enhanced.php.

0

Вам нужны цитаты вокруг ваших строк. Без них «ВКЛ» рассматривается как константа.

$enhancedstate = 'ON'; 
+2

Они могут быть константами, определенными с помощью 'define' (например,' define ("ON", "ON") ', и в этом случае было бы нормально ссылаться на' ON' вместо '' ON''. –

0

$ enhancedstate = stripos ($ _ SERVER [ 'PHP_SELF'], 'enhanced.php!') == ложь? 'ВКЛ ВЫКЛ';

У меня никогда не было имени script_name, но попробуйте это и посмотрите, работает ли он.

+0

я изменил его: p – Ascherer

0

Использование

if ($pos !== false) { 

как тест вместо. См. Пример №2 (Использование! ==) в manual page for strpos.

Смежные вопросы