PHP如果/ else切换不起作用

时间:2010-09-29 21:10:59

标签: php if-statement

目标: 当URL等于“enhanced.php”时,尝试将翻转按钮状态保持为“ON”。

问题: 当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>

当前网址为“enhanced.php”时,任何人都会看到为什么按钮状态不会保持“ON”的原因。 TIA

5 个答案:

答案 0 :(得分:12)

strpos在成功时返回int,在失败时返回FALSE。

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

===运算符会比较值和类型。因此,成功strpos返回一个int,它可能具有与TRUE相同的值,但它的类型不同。

编辑:正如其他人所说,你应该改变:

$enhancedstate = OFF$enhancedstate = 'OFF'

PHP非常宽容,并允许你使用未引用的字符串,但你应该尽量不要,除非ON和OFF实际上是常量。

答案 1 :(得分:1)

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

因此,通过执行以下操作:

if($pos === true)

您基本上在寻找永远不会发生的bool(true)值(===检查类型和值)。

将其更改为:

if($pos !== false)

请勿使用$pos == true,因为如果字符串以enhanced.php开头,则会失败。

答案 2 :(得分:0)

你的字符串需要引号。没有它们,“ON”被视为常数。

$enhancedstate = 'ON';

答案 3 :(得分:0)

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

我从未使用过script_name,但试试这个,看它是否有效。

答案 4 :(得分:0)

使用

if ($pos !== false) {

作为测试而不是。请参阅manual page for strpos中的示例#2(使用!==。