Parse error <?php endwhile; else: ?>

Résolu/Fermé
Signaler
Messages postés
591
Date d'inscription
lundi 6 octobre 2008
Statut
Membre
Dernière intervention
11 février 2016
-
Messages postés
591
Date d'inscription
lundi 6 octobre 2008
Statut
Membre
Dernière intervention
11 février 2016
-
Bonjour,
J'arrive pas à me dépatouiller d' une parse error avec la fonction
<?php endwhile; else: ?>


Je sais qu' il faut un 'while' pour avoir un 'endwhile;' et j'ai bien ca dans mon code:

<?php echo category_description( $category_id ); ?>
			
			<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
			

                <?php

                $cats = get_categories();
                foreach ($cats as $cat) {

                query_posts('showposts=10&cat=718-CATEGORIE'.$cat->cat_ID);

            ?>
			
		
			 <div class="article4">
			
		
			<?php the_excerpt(); ?>
			</div>
			
			
			
		 <?php endwhile; else: ?> 
			
			<p><?php _e('Sorry, no posts matched your criteria.'); ?></p><?php endif; ?>
			<p><?php if(function_exists('wp_simple_pagination')) {
    wp_simple_pagination();
} ?>


Merci pour votre aide^^


9 réponses

Messages postés
8319
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 598
Même si cette syntaxe existe, de mon point de vue elle est à éviter, parce que ça devient rapidement bordélique...

pour les while, il vaut mieux utiliser la syntaxe suivante :

while (condition) {
  //code
}


de même pour les if, elseif...

if (condition) {
  //code
}
elseif (conditon2) {
  //code
}
else {
  //code
}


c'est bien plus lisible et plus facile à débugger (mais ça ne reste que mon point de vue...)
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
591
Date d'inscription
lundi 6 octobre 2008
Statut
Membre
Dernière intervention
11 février 2016
28
Merci, mais est ce que c'est parce que j' ai trop de balise php ouverte que ca provoque la parse error?
Messages postés
8319
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 598
normalement non, mais ton code est difficile à débugger tel qu'il est écrit.

C'est quoi exactement ton message d'erreur ?
Messages postés
591
Date d'inscription
lundi 6 octobre 2008
Statut
Membre
Dernière intervention
11 février 2016
28
la parse error est:
Parse error: syntax error, unexpected T_ENDWHILE in /web/doclibre/www/wp-content/themes/lifestyle_20/category.php on line 33


ce qui correspond à <?php endwhile; else: ?>
Messages postés
315
Date d'inscription
lundi 17 décembre 2012
Statut
Membre
Dernière intervention
27 août 2013
27
Il faut que tu réécrives ton code plus lisiblement comme te l'a suggéré ThEBiShOp
Messages postés
591
Date d'inscription
lundi 6 octobre 2008
Statut
Membre
Dernière intervention
11 février 2016
28
c'est quelque chose que j'ai jamais fait. Est c'est bon comme ca?

Code initial:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>


Rendu:
if (have_posts()) { while (have_posts()) { the_post(); }
Messages postés
8319
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 598
Oui, quelque chose comme ça doit marcher.

Pour te rendre le code plus lisible, utilise l'indentation, les boucles et les conditions sont à voir comme des bulles qui contiennent d'autres bulles et le fait de les indenter permet de les apercevoir rapidement.

if (have_posts()) {
  while (have_posts()) {
    the_post();
  }


en n'oubliant pas que lorsque tu mets une accolade ouvrante, elle doit se fermer. Pour ne pas les oublier, l'idéal est de l'ouvrir, puis la fermer tout de suite, et ensuite écrire ton code à l'intérieur.
D'ailleurs la plupart des logiciels IDE le font automatiquement.

Tu écris ton code avec quel logiciel ?
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
591
Date d'inscription
lundi 6 octobre 2008
Statut
Membre
Dernière intervention
11 février 2016
28
Merci pour ces explications clair^^ . J'utilise Notepad ++
Messages postés
8319
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 598
D'accord

normalement quand tu places ton curseur sur une accolade ouvrante ou fermante, ça te signale en couleur son opposée qui lui correspond, comme ça tu peux voir facilement s'il t'en manque une.

Voilà voilà...
Messages postés
591
Date d'inscription
lundi 6 octobre 2008
Statut
Membre
Dernière intervention
11 février 2016
28
ca marche pas pour les accolades, mais que pour les <div> ...

Maintenant mon code est:
<?php echo category_description( $category_id ); ?>
			
if (have_posts()) {
  while (have_posts()) {
    the_post();
  }
			

                <?php

                $cats = get_categories();
                foreach ($cats as $cat) {

                query_posts('showposts=10&cat=718-CATEGORIE'.$cat->cat_ID);

            ?>
			
		
			 <div class="article4">
			
		
			<?php the_excerpt(); ?>
			</div>
			
			
			
		 <?php endwhile; else: ?> 
			
			<p><?php _e('Sorry, no posts matched your criteria.'); ?></p><?php endif; ?>


Et toujours la parse error:
Parse error: syntax error, unexpected T_ENDWHILE in /web/doclibre/www/wp-content/themes/lifestyle_20/category.php on line 36
Messages postés
591
Date d'inscription
lundi 6 octobre 2008
Statut
Membre
Dernière intervention
11 février 2016
28
ce qui correspond à <?php endwhile; else: ?>
Messages postés
8319
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 598
Comme je le disais un peu plus tot, le while s'écrit comme ça :

while (condition) {
  //code
}


l'accolade fermante correspond au endwhile

le else : doit aussi disparaître pour se conformer à la syntaxe que j'ai cité plus haut.

les balises php ne doivent pas s'ouvrir ni se fermer à tout bout de champ.

On l'ouvre au début avec <?php et ferme avec ?> quand on a plus de code php à ajouter (ce qui correspond souvent au début/fin de fichier, tout simplement)

Bonjour

J'ai bien l'impression que depuis le début, la seule chose qui manque c'est l'accolade de fin du foreach }
C'est pour ça qu'il y a une erreur sur le endwhile : on n'est pas encore sorti du foreach.
Messages postés
591
Date d'inscription
lundi 6 octobre 2008
Statut
Membre
Dernière intervention
11 février 2016
28
J'ai changé mon code comme ceci :
<?php echo category_description( $category_id ); ?>
			
			if (have_posts()) {
  while (have_posts()) {
    the_post();
  } 
			

                
			<?php
                $cats = get_categories();
                foreach ($cats as $cat) {

                query_posts('showposts=10&cat=718-CATEGORIE'.$cat->cat_ID);

            ?>
			
		
			 <div class="article4">
			
		
			<?php the_excerpt(); ?>
			</div>
			
			
			
		  endwhile; { else: } 
			
			<p><?php _e('Sorry, no posts matched your criteria.'); ?></p><?php endif; ?>


et la parse error est descendu à la ligne 38 soit:
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p><?php endif; ?>


J'ai alors changé par:
<p>_e('Sorry, no posts matched your criteria.'); { pendif; }


et maintenant l'erreur vient de
<?php get_footer(); ?>
et la je suis bloqué..
Messages postés
591
Date d'inscription
lundi 6 octobre 2008
Statut
Membre
Dernière intervention
11 février 2016
28
Ok, j'ai réussi, le code final est:
<?php get_header(); ?>

<div id="content">
 
	<div id="contentleft">
	
		<div class="postarea3">
	
		<?php include(TEMPLATEPATH."/breadcrumb.php");?>
			<?php echo category_description( $category_id ); ?>
			
		<?php if (have_posts()) : ?>

<?php while (have_posts()) : the_post(); ?>
			
			 <?php get_the_category_by_ID( 718 ); ?> 
		
			 <div class="article4">
			
		
			<?php the_excerpt(); ?>
			</div>
			
			
			
			 <?php endwhile; else: ?>
			
			<p><?php _e('Sorry, no posts matched your criteria.'); ?></p><?php endif; ?>
			<p><?php if(function_exists('wp_simple_pagination')) {
    wp_simple_pagination();
} ?></p>
			
		</div>
				
	</div>
	
<?php include(TEMPLATEPATH."/sidebar.php");?>
		
</div>

<!-- The main column ends  -->

<?php get_footer(); ?>


@ThEBiShOp et @fjbvqlkjhv, le code va pas vous plaire mais le principale est que j' ai réussi au bout de 48 h (quand même!) à faire ce que je voulais..je vous remercie de vous êtes penché sur mon problème ;)

Merci à toi aussi Le père ;)
Messages postés
8319
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 598
Le but c'est pas que le code nous plaise, c'est que ça fonctionne.

Mais essaye de garder nos remarque dans un coin de la tête, ça va te simplifier la vie, et surtout à ceux qui t'aideront le jour où t'auras besoin d'aide ^^
Messages postés
591
Date d'inscription
lundi 6 octobre 2008
Statut
Membre
Dernière intervention
11 février 2016
28
Oui, je garde bien les remarque, merci encore ;)