Parse error <?php endwhile; else: ?>

Résolu
gwenm Messages postés 640 Statut Membre -  
gwenm Messages postés 640 Statut Membre -
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^^



--
La vie n'est pas telle qu'elle devrait être. Elle est comme elle est.
> > C'est la façon dont nous la vivons qui fait la différence.

9 réponses

  1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    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
    1. fjbvqlkjhv Messages postés 359 Statut Membre 27
       
      Tout à fait d'accord. Par ailleurs, évite d'ouvrir et fermer sans arrêt la balise php...
      0
    2. gwenm Messages postés 640 Statut Membre 30
       
      Merci, mais est ce que c'est parce que j' ai trop de balise php ouverte que ca provoque la parse error?
      0
    3. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      normalement non, mais ton code est difficile à débugger tel qu'il est écrit.

      C'est quoi exactement ton message d'erreur ?
      0
    4. gwenm Messages postés 640 Statut Membre 30
       
      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
    5. fjbvqlkjhv Messages postés 359 Statut Membre 27
       
      Il faut que tu réécrives ton code plus lisiblement comme te l'a suggéré ThEBiShOp
      0
  2. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    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
  3. gwenm Messages postés 640 Statut Membre 30
     
    Merci pour ces explications clair^^ . J'utilise Notepad ++
    0
  4. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    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
    1. gwenm Messages postés 640 Statut Membre 30
       
      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
    2. gwenm Messages postés 640 Statut Membre 30
       
      ce qui correspond à <?php endwhile; else: ?>
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    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
  7. Utilisateur anonyme
     
    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
  8. gwenm Messages postés 640 Statut Membre 30
     
    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
  9. gwenm Messages postés 640 Statut Membre 30
     
    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
  10. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    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
    1. gwenm Messages postés 640 Statut Membre 30
       
      Oui, je garde bien les remarque, merci encore ;)
      0