2010-09-29 65 views
2

目標: 當URL等於「enhanced.php」時,試圖獲得翻轉按鈕狀態以保持「ON」。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」。 TIA

回答

12

strpos成功返回int,失敗返回FALSE。

更改if($pos === true)if($pos !== false)

===運算符比較值和類型。因此,在成功strpos時會返回一個int,它可能與TRUE具有相同的值,但它不是相同的類型。

編輯:正如其他人所說,你應該改變:

$enhancedstate = OFF$enhancedstate = 'OFF'

PHP是非常寬容的,而且會讓你使用未引用的字符串,但你應該儘量不要,除非和OFF實際上是常數。

+2

正確答案中速度最快的點數;) – Wrikken 2010-09-29 21:15:39

+1

我責備我的片狀連接,+1 – BoltClock 2010-09-29 21:16:10

+1

有史以來最好的網站。 TY從一個noob。 :-) – lashrew 2010-09-30 13:48:47

1

strpos()永不返回bool(true)作爲值。它可以是bool(false)int

因此,通過執行以下操作:

if($pos === true) 

你基本上是尋找一個bool(true)值永遠不會發生(===檢查類型和值)。

將其更改爲:如果字符串以enhanced.php開始

if($pos !== false) 

不要使用$pos == true,因爲這將失敗。

0

你需要引用你的字符串。沒有它們,「ON」被視爲一個常量。

$enhancedstate = 'ON'; 
+2

它們可以是使用'define'定義的常量(例如'define(「ON」,「ON」)',在這種情況下可以用'ON'代替'ON''' – 2010-09-29 21:16:47

0

$ enhancedstate = stripos($ _ SERVER ['PHP_SELF'],'enhanced.php')!== false? '開關';

我從來沒有使用script_name,但嘗試這一個,看看它是否工作。

+0

我改變了它:第 – Ascherer 2010-09-29 21:15:52

0

使用

if ($pos !== false) { 

的測試來代替。請參閱manual page for strpos中的示例#2(使用!==)。