OVH Cloud OVH Cloud

incomprehension

4 réponses
Avatar
Axelar
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

4 réponses

Avatar
Olivier Miakinen

$appel = substr(array_shift(explode(".",$_SERVER['REQUEST_URI'])),1) ;
if ($appel == nouvelles) ;
^

Si $appel est égal à la constante nouvelles, ne rien faire.

{
echo $appel . ' active<br />' ;
$active = ' active' ;
}


Ce code est exécuté dans tous les cas.

if ($appel != nouvelles) ;
^

Si $appel est différent de la constante nouvelles, ne rien faire.

{
echo $appel . ' inactive<br />' ;
$active = '' ;
}


Ce code est exécuté dans tous les cas.

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


Le problème vient de l'instruction vide (un point-virgule) qui suit
chacun de tes deux tests.

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).

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.

Avatar
Olivier Miakinen
Le 09/02/2007 12:54, je répondais à Axelar :

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' : '';

Avatar
Axelar
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 :)
Avatar
Thief13
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 !