Parse error <?php endwhile; else: ?>

Résolu/Fermé
gwenm Messages postés 591 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 11 février 2016 - 22 janv. 2013 à 12:03
gwenm Messages postés 591 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 11 février 2016 - 22 janv. 2013 à 19:12
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^^


A voir également:

9 réponses

ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
22 janv. 2013 à 12:09
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
fjbvqlkjhv Messages postés 315 Date d'inscription lundi 17 décembre 2012 Statut Membre Dernière intervention 27 août 2013 27
22 janv. 2013 à 12:11
Tout à fait d'accord. Par ailleurs, évite d'ouvrir et fermer sans arrêt la balise php...
0
gwenm Messages postés 591 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 11 février 2016 30
22 janv. 2013 à 12:20
Merci, mais est ce que c'est parce que j' ai trop de balise php ouverte que ca provoque la parse error?
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
22 janv. 2013 à 12:22
normalement non, mais ton code est difficile à débugger tel qu'il est écrit.

C'est quoi exactement ton message d'erreur ?
0
gwenm Messages postés 591 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 11 février 2016 30
22 janv. 2013 à 12:25
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: ?>
0
fjbvqlkjhv Messages postés 315 Date d'inscription lundi 17 décembre 2012 Statut Membre Dernière intervention 27 août 2013 27
22 janv. 2013 à 12:27
Il faut que tu réécrives ton code plus lisiblement comme te l'a suggéré ThEBiShOp
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
22 janv. 2013 à 12:46
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
gwenm Messages postés 591 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 11 février 2016 30
22 janv. 2013 à 12:51
Merci pour ces explications clair^^ . J'utilise Notepad ++
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
22 janv. 2013 à 12:56
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à...
0
gwenm Messages postés 591 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 11 février 2016 30
22 janv. 2013 à 13:06
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
0
gwenm Messages postés 591 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 11 février 2016 30
22 janv. 2013 à 13:07
ce qui correspond à <?php endwhile; else: ?>
0

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

Posez votre question
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
22 janv. 2013 à 14:08
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)
0
Utilisateur anonyme
22 janv. 2013 à 17:00
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.
0
gwenm Messages postés 591 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 11 février 2016 30
22 janv. 2013 à 17:34
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é..
0
gwenm Messages postés 591 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 11 février 2016 30
22 janv. 2013 à 18:49
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 ;)
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
22 janv. 2013 à 19:08
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 ^^
0
gwenm Messages postés 591 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 11 février 2016 30
22 janv. 2013 à 19:12
Oui, je garde bien les remarque, merci encore ;)
0