[PHP] Problème condition: Parse error.

Résolu/Fermé
aymeric057 Messages postés 12 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 13 février 2012 - 25 janv. 2012 à 14:13
aymeric057 Messages postés 12 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 13 février 2012 - 27 janv. 2012 à 20:35
Bonjour,

Je codais un site (en m'aidant d'un modèle, je ne suis pas codeur confirmé), et j'ai voulu faire un menu évolutif en fonction de la page. Si c'est index, la balise li change et devient li id="active". Sauf que j'ai fait ça avec plusieurs conditions, et il s'avère que j'ai une erreur:

 Parse error: syntax error, unexpected T_ELSE in C:\wamp\www\rs14\header.php on line 35


Et voici le code concerné:

<?php if ($pageid == "index" || $pageid == "about" || $pageid == "products" || $pageid == "services" || $pageid =="news" || $pageid == "contact"){ ?>
<?php if($pageid == "index") { echo'<li id="active">'; ?><a href="index.php">Home</a></li>
<?PHP } else { ?>
<?php if($pageid == "about") echo'<li id="active">'; ?><a href="about.php">About</a></li>
<?PHP } else { ?>
<?php if($pageid == "products") echo'<li id="active">'; ?><a href="products.php">Products</a></li>
<?PHP } else { ?>
<?php if($pageid == "services") echo'<li id="active">'; ?><a href="services.php">Services</a></li>
<?PHP } else { ?>
<?php if($pageid == "news") echo'<li id="active">'; ?><a href="news.php">News</a></li>
<?PHP } else { ?>
<?php if($pageid == "index") echo'<li id="active">'; ?><a href="contact.php">Contact</a></li>
<?php } ?>
<?php } ?>


Bien évidemment j'ai créé la variable $pageid sur toutes les pages concernées:
<?php $pageid = "index" ?>


Merci de votre aide,
Cordialement,
A voir également:

14 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
27 janv. 2012 à 08:51
Désolé mais hier soir j'ai du partir précipitamment, le réponse que je t'ai donnée n'était pas celle prévue !

voici une solution en 4 lignes:

<li <?php if($pageid == "index") echo ' id="active"'; ?>><a href="index.php">Home</a></li>
<li <?php if($pageid == "about") echo ' id="active"'; ?>><a href="about.php">About</a></li>
<li <?php if($pageid == "products") echo ' id="active"'; ?>><a href="products.php">Products</a></li>
<li <?php if($pageid == "news") echo ' id="active"'; ?>><a href="news.php">News</a></li>
1
Bonjour

Ton code a la structure :

if (condition) {
... }
else {
...
}
else {
...
}

Or, un if ne peut avoir qu'un seul else !

Par contre, il peut avoir plusieurs elseif (et un else pour le dernier cas)
Si tu as l'impression que c'est ce que tu as fait, regarde bien : elseif, ce n'est pas la même chose que else { if
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 janv. 2012 à 14:41
il te manquait la { a chaque ligne if(....)

une solution plus "simplifiée":

<?php
if ($pageid == "index" || $pageid == "about" || $pageid == "products" || $pageid == "services" || $pageid =="news" || $pageid == "contact"){ 
	if($pageid == "index") {
		echo'<li id="active"><a href="index.php">Home</a></li>'; 
	} elseif($pageid == "about"){ 
		echo'<li id="active"><a href="about.php">About</a></li>';
	} elseif($pageid == "products"){
		echo'<li id="active"><a href="products.php">Products</a></li>'; 
	} elseif($pageid == "services"){
		echo'<li id="active"><a href="services.php">Services</a></li>'; 
	} elseif($pageid == "news"){
		echo'<li id="active"><a href="news.php">News</a></li>'; 
	} elseif($pageid == "contact"){
		echo'<li id="active"><a href="contact.php">Contact</a></li>';
	} 
 } 
?>
0
aymeric057 Messages postés 12 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 13 février 2012
25 janv. 2012 à 15:05
Merci à vous deux, je m'étais inspiré de ce code (but informatif):

	<?PHP if($pageid == "accueil" || $pageid == "option" || $pageid == "debug" || $pageid == "home" || $pageid == "online") { ?>
	<?PHP if($pageid == "accueil") { ?>
	<li class=" selected"> Accueil</li>
	<?PHP } else { ?>
	<li class=""><a href="<?PHP echo $url; ?>/me.php"> Accueil</a></li>
	<?PHP } ?>
	<?PHP if($pageid == "option") { ?>
	<li class="selected"><a href="<?PHP echo $url; ?>/profile.php"> Mes préferences</a></li>
	<?PHP } else { ?>
	<li class=""><a href="<?PHP echo $url; ?>/profile.php"> Mes préferences</a></li>
	<?PHP } ?>
	<?PHP if($pageid == "debug") { ?>
	<li class="selected"><a href="<?PHP echo $url; ?>/debuguser.php"> Debuguer mon compte</a></li>
	<?PHP } else { ?>
	<li class=""><a href="<?PHP echo $url; ?>/debuguser.php"> Debuguer mon compte</a></li>
	<?PHP } ?>
	<?PHP if($pageid == "home") { ?>
	<li class="selected"><a href="<?PHP echo $url; ?>/home.php?=<?PHP echo $user['username']; ?>"> Ta page perso</a></li>
	<?PHP } else { ?>
	<li class=""><a href="<?PHP echo $url; ?>/home.php?=<?PHP echo $user['username']; ?>"> Ta page perso</a></li>
	<?PHP } ?>	
	<?PHP if($pageid == "top.php") { ?>
	<li class="selected"><a href="<?PHP echo $url; ?>/online.php">Les joueurs en ligne</a></li>
	<?PHP } else { ?>
	<li class=""><a href="<?PHP echo $url; ?>/online.php">Les joueurs en ligne</a></li>	
        <?PHP } ?>
        <?PHP } ?>


pour réaliser le mien.

Autant poser le problème qui est lié à celui-ci ici pour éviter de créer un autre topic:

Voici l'erreur: NOTICE: UNDEFINED VARIABLE: PAGEID IN C:\WAMP\WWW\RS14\HEADER.PHP ON LINE 32


Je ne sais pas trop pourquoi, je vous explique la hiérarchie du site pour mieux comprendre:

Tous les fichiers sont au même endroit. Le code demandé plus haut est dans header.php qui est appelé dans toutes les pages par un include. Dans toutes les pages la variable est définie comme par exemple pour l'index:
<?php $pageid = "index"; ?>


Merci,
Cordialement,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Si le message d'erreur est bien celui que tu as donné, la variable $PAGEID n'est effectivement pas définie, c'est $pageid qui l'est. PHP tient compte de la casse dans les noms de variables.

Sinon, c'est peut-être que le code que tu montres est dans une fonction, et que tu n'as pas défini $pageid comme global dans cette fonction
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 janv. 2012 à 20:57
donc tu ne veux pas utiliser le code que je t'ai proposé ?
0
aymeric057 Messages postés 12 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 13 février 2012
25 janv. 2012 à 21:18
Le père, je viens de vérifier, tout est en minuscule, je ne vois pas pourquoi il me l'a mis en majuscule dans le message d'erreur.

Alain_42, si justement c'est ton code que j'ai utilisé.

Donc pour plus de clarté, voici le code du menu:

<?php
if ($pageid == "index" || $pageid == "about" || $pageid == "products" || $pageid == "services" || $pageid =="news" || $pageid == "contact"){ 
	if($pageid == "index") {
		echo'<li id="active"><a href="index.php">Home</a></li>'; 
	} elseif($pageid == "about"){ 
		echo'<li id="active"><a href="about.php">About</a></li>';
	} elseif($pageid == "products"){
		echo'<li id="active"><a href="products.php">Products</a></li>'; 
	} elseif($pageid == "services"){
		echo'<li id="active"><a href="services.php">Services</a></li>'; 
	} elseif($pageid == "news"){
		echo'<li id="active"><a href="news.php">News</a></li>'; 
	} elseif($pageid == "contact"){
		echo'<li id="active"><a href="contact.php">Contact</a></li>';
	} 
 } 
?>


Et le code PHP de par exemple index.php:

<?php include('./header.php'); ?>
<?php $pageid = "index"; ?>


Je suis persuadé que c'est une erreur toute bête, mais je ne vois pas laquelle...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 25/01/2012 à 21:55
he oui c'est une erreur toute bête
php s'exécute dans ton cas ligne après ligne donc
si tu définit la variable $pageid après ton include c'est pas bon, le code de l'include ne le trouve pas !

il faut:
<?php $pageid = "index"; ?> 
<?php include('./header.php'); ?> 


Concernant le message d'erreur c'est tout le message qui est en majuscule donc la variable aussi
0
aymeric057 Messages postés 12 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 13 février 2012
26 janv. 2012 à 18:23
Merci infiniment de l'attention que tu prêtes à mon problème, j'ai fait ce que tu m'as dit de faire, ça fonctionne au détail près (eh oui il y a le détail qui tue), ce n'est pas juste l'id du "li" qui change, mais le "li" qui apparaît en fonction de la page.

Pour mieux m'exprimer, je vais montrer ce que je veux dans du concret:
Onglet 1 | onglet 2 | (vert) Onglet 3 (vert) | Onglet 4

quand on est sur la page 3, et:
Onglet 1 | (vert) Onglet 2 (vert) | Onglet 3 | Onglet 4

quand on est sur la page 2.

Hors, moi j'ai:
(vert) Onglet 2 (vert)

Quand on est sur la page 2, et:
(vert) Onglet 3 (vert)

Quand on est sur la page 3, c'est l'onglet apparent qui change en fonction de la page, et pas la couleur de l'onglet (ce que je voudrai), car c'est un peu embêtant étant donné que c'est un menu ^^

Donc j'ai essayé (pour l'instant):

<?php
if ($pageid == "index" || $pageid == "about" || $pageid == "products" || $pageid == "services" || $pageid =="news" || $pageid == "contact"){ 
	 ?>
		<li <?php if($pageid == "index") { echo'id="active"'; } ?>> <a href="index.php">Home</a></li>
		<?php
	 elseif($pageid == "about"){ ?>
		<li <?php echo'id="active"'; ?>><a href="about.php">About</a></li>
		<?php
	} elseif($pageid == "products"){ ?>
		<li <?php echo'id="active"'; ?>> <a href="products.php">Products</a></li> 
		<?php
	} elseif($pageid == "services"){
		echo'<li id="active"><a href="services.php">Services</a></li>'; 
	} elseif($pageid == "news"){
		echo'<li id="active"><a href="news.php">News</a></li>'; 
	} elseif($pageid == "contact"){
		echo'<li id="active"><a href="contact.php">Contact</a></li>';
	} 
 } 
?>


(j'ai mi tout le code, mais uniquement ce qui est en gras nous intéresse) Et ça m'affiche l'erreur "Parse error: syntax error, unexpected T_ELSEIF in C:\wamp\www\rs14\header.php"

J'ai fait ça pour que peu importe la condition etc, <li><a href="index.php">Home</a></li> et que seulement il se transforme en <li id="active"><a href="index.php">Home</a></li> si $pageid = index.

Encore merci,
Cordialement,
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
26 janv. 2012 à 18:56
et si tu mets l'id=active dans le a au lieu du li ,

<li> <a <?php if($pageid == "index") { echo ' id="active"'; } ?> href="index.php">Home</a></li>
0
Nono_igo Messages postés 63 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 octobre 2016 3
26 janv. 2012 à 19:10
Je débarque un peu là mais je crois qu'il te faut simplement écrire les liens pour tes onglets qui manquent dans chacun de tes elseif. (Si j'ai bien compris ce que tu voulais obtenir)
 elseif($pageid == "ongletX"){ ?>
                <a href="onglet(X-1).php">onglet(X-1)</a>
		<li <?php echo'id="active"'; ?>> <a href="ongletX.php">ongletX</a></li> 
                <a href="onglet(X+1).php">onglet(X+1)</a>
//etc
0
aymeric057 Messages postés 12 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 13 février 2012
26 janv. 2012 à 19:37
Donc j'ai testé ton code alain, ce qui donne:

<?php
if ($pageid == "index" || $pageid == "about" || $pageid == "products" || $pageid == "services" || $pageid =="news" || $pageid == "contact"){ 
	 ?>
		<li> <a <?php if($pageid == "index") { echo ' id="active"'; } ?> href="index.php">Home</a></li>
		<li> <a <?php elseif($pageid == "about"){ echo ' id="active"'; } ?> href="about.php">About</a></li>
		<li> <a <?php elseif($pageid == "products"){ echo ' id="active"'; } ?> href="products.php">Products</a></li> 
		<li> <a <?php elseif($pageid == "services"){ echo ' id="active"'; } ?> href="services.php">Services</a></li> 
		<li> <a <?php elseif($pageid == "about"){ echo ' id="news"'; } ?> href="news.php">News</a></li>
		<li> <a <?php elseif($pageid == "about"){ echo ' id="contact"'; } ?> href="contact.php">Contact</a></li>
		<?php
	} 
?>


Et l'erreur:
Parse error: syntax error, unexpected T_ELSEIF in C:\wamp\www\rs14\header.php on line 35


Désolé de vous faire perdre votre temps mais je suis perdu là :s
0
Nono_igo Messages postés 63 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 octobre 2016 3
26 janv. 2012 à 20:00
Tu as 2 fois la même condition dans tes elseif. La ligne 35 ne serait pas une de celles-là ?
<li> <a <?php elseif($pageid == "about"){ echo ' id="news"'; } ?> href="news.php">News</a></li>
		<li> <a <?php elseif($pageid == "about"){ echo ' id="contact"'; } ?> href="contact.php">Contact</a></li>
		<?php
	} 
0
aymeric057 Messages postés 12 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 13 février 2012
26 janv. 2012 à 19:54
Bon ben j'ai trouvé une solution: Très répétitive et encombrante, mais bon je n'ai pas trouvé d'autre solution qui puisse marcher.

Si quelqu'un cherche à faire quelque chose de similaire, voici le code:

<?php
if ($pageid == "index"){ 
	 ?>
	 <li id="active"><a href="index.php">Home</a></li>
	 <?php } else { ?>
	 <li><a href="index.php">Home</a></li>
	 <?php } ?>
	 
	 <?php
if ($pageid == "about"){ 
	 ?>
	 <li id="active"><a href="about.php">About</a></li>
	 <?php } else { ?>
	 <li><a href="about.php">About</a></li>
	 <?php } ?>
	 
	 <?php
if ($pageid == "products"){ 
	 ?>
	 <li id="active"><a href="products.php">Products</a></li>
	 <?php } else { ?>
	 <li><a href="products.php">Products</a></li>
	 <?php } ?>
	 
	 <?php
if ($pageid == "news"){ 
	 ?>
	 <li id="active"><a href="news.php">News</a></li>
	 <?php } else { ?>
	 <li><a href="news.php">News</a></li>
	 <?php } ?>


Résolu. Cordialement,
0
aymeric057 Messages postés 12 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 13 février 2012
27 janv. 2012 à 20:35
Maintenant que j'ai ton code sous les yeux alain, ça me parait tellement évident!

Merci infiniment pour ton investissement dans mon problème, c'est vraiment gentil de ta part!

Cordialement,
0