Discussion:
incomprehension
(trop ancien pour répondre)
Axelar
2007-02-09 11:19:43 UTC
Permalink
Bonjour

une page nouvelles.php appele une page module.php (via un include)
dans laquelle figure le code suivant :

$appel = substr(array_shift(explode(".",$_SERVER['REQUEST_URI'])),1) ;
if ($appel == nouvelles) ;
{
echo $appel . ' active<br />' ;
$active = ' active' ;
}
if ($appel != nouvelles) ;
{
echo $appel . ' inactive<br />' ;
$active = '' ;
}

Logiquement la variable $appel deverait contenir nouvelles quand c'est
la page nouvelles.php qui appele ma page modules.

Or bizarrement les deux conditions sont remplies alors qu'à mon sens
soit $appel == nouvelles soit $appel != nouvelles.

Pour une raison que j'ignore j'ai deux lignes qui sortent :
nouvelles active
nouvelles inactive

J'ai essayé avec $appel == "nouvelles" $appel == 'nouvelles' sans plus
de succès...

Je m'en remets à vous !

Merci
Olivier Miakinen
2007-02-09 11:54:08 UTC
Permalink
Post by Axelar
$appel = substr(array_shift(explode(".",$_SERVER['REQUEST_URI'])),1) ;
if ($appel == nouvelles) ;
^
Si $appel est égal à la constante nouvelles, ne rien faire.
Post by Axelar
{
echo $appel . ' active<br />' ;
$active = ' active' ;
}
Ce code est exécuté dans tous les cas.
Post by Axelar
if ($appel != nouvelles) ;
^
Si $appel est différent de la constante nouvelles, ne rien faire.
Post by Axelar
{
echo $appel . ' inactive<br />' ;
$active = '' ;
}
Ce code est exécuté dans tous les cas.
Post by Axelar
nouvelles active
nouvelles inactive
Le problème vient de l'instruction vide (un point-virgule) qui suit
chacun de tes deux tests.
Post by Axelar
J'ai essayé avec $appel == "nouvelles" $appel == 'nouvelles' sans plus
de succès...
Ah, parce que tu n'as pas fait de define("nouvelles", ...qqch...) ? Dans
ce cas il faut les guillemets (simples ou doubles).
Post by Axelar
Je m'en remets à vous !
if ($appel == 'nouvelles') {
echo $appel . ' active<br />' ;
$active = ' active' ;
}
if ($appel != 'nouvelles') {
echo $appel . ' inactive<br />' ;
$active = '' ;
}

Voire :

if ($appel == 'nouvelles') {
echo $appel . ' active<br />' ;
$active = ' active' ;
} else {
echo $appel . ' inactive<br />' ;
$active = '' ;
}

Note qu'avec cette deuxième syntaxe plus simple (et plus efficace car tu
ne testes qu'une seule fois) l'interprète PHP aurait râlé si tu avais
laissé tes « ; » en trop.
Olivier Miakinen
2007-02-09 12:07:46 UTC
Permalink
Post by Olivier Miakinen
if ($appel == 'nouvelles') {
echo $appel . ' active<br />' ;
$active = ' active' ;
} else {
echo $appel . ' inactive<br />' ;
$active = '' ;
}
Note en outre que si tu n'as pas besoin du « echo » tu peux encore
simplifier l'écriture :
$active = ($appel == 'nouvelles') ? ' active' : '';
Axelar
2007-02-09 14:03:02 UTC
Permalink
Merci :)

une faute d'inattention, j'ai des tas de if qui jalonnent mon code et
j'ai bien pensé à ne pas mettre de point-virgules....

décidément qu'elles coutent cher les erreurs d'inattention !

merci également pour la syntaxe à la fin, je ne la connaissais pas :)
Thief13
2007-02-10 17:01:33 UTC
Permalink
Post by Axelar
une faute d'inattention, j'ai des tas de if qui jalonnent mon code et
j'ai bien pensé à ne pas mettre de point-virgules....
Depuis que j'utilise l'environnement de dev Zend, je n'ais plus ce genre
de problème grace à l'analyseur de code, qui est vraiment génial, et qui
releve quasiment tout les erreurs d'innatention ! (assignation dans une
condition, oubli de ;, utilisation de variable non sécuritaire...) je le
conseil tres vivement, c'est un gain de temps extraordinaire !

Continuer la lecture sur narkive:
Loading...