2010-09-29 8 views
2

Objectif: Si vous souhaitez que l'état d'un bouton de survol reste sur "ON" lorsque l'URL est égale à "enhanced.php", procédez comme suit:Le commutateur PHP if/else ne fonctionne pas

Problème: L'état du bouton ne reste pas "activé" lorsque l'URL est égale à "enhanced.php".

(bouton agit correctement comme un roulement)


sidemenu.php sidemenu.php est utilisé comme PHP include sur toutes les pages (je ne sais pas si cela fait une différence

<?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> 

Quelqu'un voit aucune raison pour laquelle l'état du bouton ne reste pas « ON » lorsque l'URL actuelle est « enhanced.php ». TIA

Répondre

12

strpos renvoie un int en cas de succès et FALSE en cas d'échec.

Remplacez if($pos === true) par if($pos !== false).

L'opérateur === compare les valeurs et les types. Ainsi, en cas de succès, strpos renvoie un int, qui peut avoir la même valeur que TRUE, mais ce n'est pas le même type.

EDIT: Comme d'autres l'ont dit, vous devez changer:

$enhancedstate = OFF à $enhancedstate = 'OFF'

PHP est très indulgent, et vous permettra d'utiliser des chaînes de l'ONU entre guillemets, mais vous devriez essayer de ne pas, à moins que ON et OFF sont en fait des constantes.

+2

Points pour être le plus rapide dans un tas de bonnes réponses;) – Wrikken

+1

Je blâme ma connexion floconneuse, +1 – BoltClock

+1

Meilleur site jamais. TY d'un noob. :-) – lashrew

1

strpos() ne renvoie jamais bool(true) en tant que valeur. C'est soit bool(false) ou int.

Ainsi, en procédant comme suit:

if($pos === true) 

Vous êtes à la recherche d'une valeur essentiellement bool(true) qui ne se produira jamais (=== chèques pour le type et la valeur).

Modifier à:

if($pos !== false) 

Ne pas utiliser $pos == true car cela échouera si la chaîne commence par enhanced.php.

0

Vous avez besoin de guillemets autour de vos chaînes. Sans eux, "ON" est traité comme une constante.

$enhancedstate = 'ON'; 
+2

Ils pourraient être des constantes définies en utilisant 'define' (par exemple' define ("ON", "ON") ', auquel cas il serait bon de se référer à' ON' au lieu de '" ON "'. –

0

$ enhancedstate = strpos ($ _ SERVER [ 'PHP_SELF'], 'enhanced.php')! == false? 'ALLUMÉ ÉTEINT';

ive n'a jamais utilisé script_name, mais essayez celui-ci et voyez si cela fonctionne.

+0

je l'ai changé: p – Ascherer

0

Utilisez

if ($pos !== false) { 

comme le test à la place. Voir l'exemple n ° 2 (Using! ==) dans le manual page for strpos.