Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affiché la date 1 seule fois dans un while

Sujet résolu
    28 septembre 2021 à 16:07:44

    Salut tout le monde,

    bon voila j'ai fait mon petit truc qui marche  mais voilà j'affiche en fait des évènements classé par date, et plusieurs évènements ont lieux sur la meme date, j'aimerais  affiché du coup seulement 1 seule fois la date et les événement de la date correspondant exemple:

    Lundi 20 mai :

     - event 1

    - event 2

    - event 3

    Mercredi 22 mai:

    - event 3

    - event -4

    ...

    Dans le code ci dessousla date s'affiche à chaque événement:

    <?php
    setlocale(LC_TIME, "fr_FR", "French");
    ?>
    
    <?php
       if($sql->rowCount() > 0) {	
           while($sortie = $sql->fetch(PDO::FETCH_ASSOC)){ 
           // Récupérer date de la sortie
           //$date_event = new DateTime($sortie['sortie_date']);
      						          //$sortie['sortie_date']; // FORMAT US
    							$date = date_create($sortie['sortie_date'])->format('d/m/Y H:i:s');
    							//echo $date; // FORMAT FR - 28/09/2021 21:19:20
    
    			 
    $jour_de_sortie= strftime("%A %d %B %G", strtotime($sortie['sortie_date']));
    							echo $jour_de_sortie; // Exemple : samedi 04 septembre
    echo' 
     <tr>
     <td class="d-md-flex align-items-center">
     <figure style="height: 33px; width: 33px">
     // ......blabla
    
    
    



    • Partager sur Facebook
    • Partager sur Twitter
      29 septembre 2021 à 11:28:39

      Salut

      Je te propose de regarder cet autre sujet, où ses films sont tes dates et ses acteurs tes événements.

      • Partager sur Facebook
      • Partager sur Twitter
        29 septembre 2021 à 11:46:29

        du coup j'ai ça maintenant:

        <?php
        										if($sql->rowCount() > 0) {	
        												$date_event = '';
        										//while($sortie = $sql->fetch(PDO::FETCH_ASSOC)){ 
        											while ($sortie = $sql->fetch()) {
        
        												
        												// Places disponible
        												if ($sortie['sortie_inscrits'] == $sortie['sortie_max_inscrits']) {
        													$etat_inscription = '<span style="color: #FFF;background: #e43f6d;padding: 3px 7px;border-radius: 4px;font-size: 0.8em;">Complet</span>';
        												}else{
        													$etat_inscription = $sortie['sortie_inscrits'].'/'.$sortie['sortie_max_inscrits'];
        												}
        												// End Places disponible
        				
        
        			 									// Affiché la date de la sortie
        									        	$jour_de_sortie= strftime("%A %d %B %G", strtotime($sortie['sortie_date']));
        									         	//echo $jour_de_sortie; // Exemple : samedi 04 septembre
        
        
        
        									        	// Test avec Ymox 
        									         	if ($date_event != $jour_de_sortie) {
        		        										echo htmlspecialchars($jour_de_sortie);
        		    									}
        
        		    									$date_event = $jour_de_sortie;


        mais cela ne s'affiche pas comme je veux:

        alors si la date existe plusieurs fois elle ne s'affiche qu'une seule fois mais sous la date doit s'affiché tous les événements correspondants

        Dans ma requete plus haute j'ai bien :

         $sql .= " ORDER BY sortie_date ASC, ( ville = :ville ) DESC, ville ASC " ;



        -
        Edité par MikeSpense 29 septembre 2021 à 11:49:09

        • Partager sur Facebook
        • Partager sur Twitter
          29 septembre 2021 à 11:49:02

          Alors tu affiches la date avant le premier événement pour celle-ci, donc en début de boucle, non ?

          Si jamais, j'avais loupé que tu utilisais strftime(), prends le temps de lire la FAQ PHP pour voir comment faire aujourd'hui et depuis PHP 5.4.

          -
          Edité par Ymox 29 septembre 2021 à 11:50:10

          • Partager sur Facebook
          • Partager sur Twitter
            29 septembre 2021 à 11:55:41

            merci d'atre aussi rapide deja:

            je ne comprend pas désolé le code en début de boucle... pour le coup j'utilise strtime pour avoir le nom du jour de la date:

            <?php
            										if($sql->rowCount() > 0) {	
            												$date_event = '';
            										
            											while ($sortie = $sql->fetch()) {
            
            
            												// Affiché la date de la sortie
            									        	$jour_de_sortie= strftime("%A %d %B %G", strtotime($sortie['sortie_date']));
            									         	//echo $jour_de_sortie; // Exemple : samedi 04 septembre
            
            									        	// Test avec Ymox 
            									         	if ($date_event != $jour_de_sortie) {
            		        										echo htmlspecialchars($jour_de_sortie);
            		    									}
            
            		    									$date_event = $jour_de_sortie;
            
            												
            												// Places disponible
            												if ($sortie['sortie_inscrits'] == $sortie['sortie_max_inscrits']) {
            													$etat_inscription = '<span style="color: #FFF;background: #e43f6d;padding: 3px 7px;border-radius: 4px;font-size: 0.8em;">Complet</span>';
            												}else{
            													$etat_inscription = $sortie['sortie_inscrits'].'/'.$sortie['sortie_max_inscrits'];
            												}
            												// End Places disponible
            				
            
            										echo' 
            	                                    <tr>
            	                                        <td class="d-md-flex align-items-center">
            	                                            <figure style="height: 33px; width: 33px">
            	                                            	<a href="img/menu_item_large_1.jpg" title="'.$sortie['sortie_titre'].'" data-effect="mfp-zoom-in"><img src="img/menu-thumb-placeholder.jpg" data-src="img/menu-thumb-1.jpg" alt="thumb" class="lazy"></a>
            	                                            </figure>
            	                                            <div class="flex-md-column">
            	                                                <h4><a href="#">'.$sortie['sortie_titre'].'</a></h4>
            	                                                <p>'.$sortie['sortie_texte'].'</p>
            	                                            </div>
            	                                        </td>
            	                                        <td>
            	                                            <strong>9:40</strong>
            	                                        </td>
            	                  
            	                                    </tr>';
            	                                   }
            									}else{
            										echo'Aucun établissement enregistré selon vos critères.';
            									}
            									?>



            • Partager sur Facebook
            • Partager sur Twitter
              29 septembre 2021 à 12:29:58

              Ben la boucle elle a un début et une fin. Tu veux la date avant le premier événement pour celle-ci, alors tu fais en sorte que la date s'affiche avant les autres données pour le premier événement. D'ailleurs, c'est déjà ce que tu as fait.

              Mais par contre, l'endroit et la manière dont tu l'affiches ne joue absolument pas : du texte directement dans la balise <table>, ce n'est pas du HTML valide, et toutes les dates ainsi affichées vont probablement se retrouver toutes au même endroit. Il faut que tu affiches la date dans une ligne de tableau et dans une cellule de cette ligne. Quitte à ce que cette ligne n'ait qu'une unique cellule pour la date.

              -
              Edité par Ymox 29 septembre 2021 à 12:31:20

              • Partager sur Facebook
              • Partager sur Twitter
                29 septembre 2021 à 12:56:20

                Je souhaite un affichage hors tableau justement

                en gros on affiche la date ensuite le tableau concertnant les événement de cette date

                après une date avec avec les autres évènements concernant cette date, exemple :

                Lundi 20 mai :

                 - event 1

                - event 2

                - event 3

                Mercredi 22 mai:

                - event 3

                - event -4

                "Ben la boucle elle a un début et une fin. Tu veux la date avant le premier événement pour celle-ci, alors tu fais en sorte que la date s'affiche avant les autres données pour le premier événement. D'ailleurs, c'est déjà ce que tu as fait."

                je l'ai fait mais justemant ça n'affiche pas comme je souhaite

                le html dans le tableau c'est pour faire quelque chose de visuel avant de faire quelque chose de propre

                je comprend pas comment je peut affiché une seule fois la date avec ses événements....

                peut etre créer un foreach avant le while pour travaillé sur les dates... enfin je suis un peu dans le foutoir la

                J'en suis là:

                <?php
                										if($sql->rowCount() > 0) {	
                											$date_event = '';
                
                
                											while ($sortie = $sql->fetch()) {
                
                		
                												// Affiché la date de la sortie
                									        	$jour_de_sortie= strftime("%A %d %B %G", strtotime($sortie['sortie_date']));
                									         	//echo $jour_de_sortie; // Exemple : samedi 04 septembre
                
                									        	// Test avec Ymox 
                									         	if ($date_event != $jour_de_sortie) {
                		        										htmlspecialchars($jour_de_sortie);
                		    									}
                
                		    									$date_event = $jour_de_sortie;
                
                												
                												// Places disponible
                												if ($sortie['sortie_inscrits'] == $sortie['sortie_max_inscrits']) {
                													$etat_inscription = '<span style="color: #FFF;background: #e43f6d;padding: 3px 7px;border-radius: 4px;font-size: 0.8em;">Complet</span>';
                												}else{
                													$etat_inscription = $sortie['sortie_inscrits'].'/'.$sortie['sortie_max_inscrits'];
                												}
                												// End Places disponible
                				
                
                										echo' 
                										<td>'.$date_event.'</td>
                	                                    <tr>
                	                                        <td class="d-md-flex align-items-center">
                	                                            <figure style="height: 33px; width: 33px">
                	                                            	<a href="img/menu_item_large_1.jpg" title="'.$sortie['sortie_titre'].'" data-effect="mfp-zoom-in"><img src="img/menu-thumb-placeholder.jpg" data-src="img/menu-thumb-1.jpg" alt="thumb" class="lazy"></a>
                	                                            </figure>
                	                                            <div class="flex-md-column">
                	                                                <h4><a href="#">'.$sortie['sortie_titre'].'</a></h4>
                	                                                <p>'.$sortie['sortie_texte'].'</p>
                	                                            </div>
                	                                        </td>
                	                                        <td>
                	                                            <strong>9:40</strong>
                	                                        </td>
                	                  
                	                                    </tr>';
                	                                   }
                									}else{
                										echo'Aucun établissement enregistré selon vos critères.';
                									}
                									?>
                
                	                                    
                	                                    
                	                                </tbody>
                	                            </table>
                							<!-- /// End TEST -->



                -
                Edité par MikeSpense 29 septembre 2021 à 13:01:09

                • Partager sur Facebook
                • Partager sur Twitter
                  29 septembre 2021 à 16:18:06

                  Du coup il faut que quand tu affiches une date, tu fermes le tableau précédent, tu affiches la date, et tu ouvres le tableau suivant. Il faut juste faire attention au cas de la toute première itération où il n'y a évidemment aucun tableau à fermer.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 septembre 2021 à 9:01:06

                    désolé mais je ne comprends pas.

                    Fermé le tableau dans la meme boucle, en récréer une juste pour la date ?

                    je m'arrache le peu de cheveux qui me reste la

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 septembre 2021 à 9:30:10

                      Est-ce que tu peux me fournir un code purement HTML avec un exemple de ce que tu souhaites avoir ? Mets-y quatre événements sur trois dates, s'il te plaît.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 septembre 2021 à 11:25:54

                        Alors le code finis doit ressemble à ca en gros (pure html)

                        <div class="date">Vendredi 21 Mai</div>
                        	<div class="event">
                        		<div class="titre">event 1</div>
                        		<div class="titre">texte du event 1</div>
                        	</div>
                        
                        	<div class="event">
                        		<div class="titre">event 2</div>
                        		<div class="titre">texte du event 2</div>
                        	</div>
                        </div>
                        
                        
                        <div class="list_event">
                        <div class="date">Samedi 22 Mai</div>
                        	<div class="event">
                        		<div class="titre">event 3</div>
                        		<div class="titre">texte du event 3</div>
                        	</div>
                        
                        	<div class="event">
                        		<div class="titre">event 4</div>
                        		<div class="titre">texte du event 4</div>
                        	</div>
                        
                        	<div class="event">
                        		<div class="titre">event 5</div>
                        		<div class="titre">texte du event 5</div>
                        	</div>
                        </div>
                        
                        <div class="list_event">
                        	<div class="date">Dimanche 23 Mai</div>
                        		<div class="event">
                        		<div class="titre">event 6</div>
                        		<div class="titre">texte du event 6</div>
                        	</div>
                        </div>


                        • Partager sur Facebook
                        • Partager sur Twitter
                          30 septembre 2021 à 11:27:42

                          C'est dommage de n'avoir mis que des <div>, parce que cela ne montre pas la structure du tableau qui est justement le problème.

                          Edit

                          Et il doit probablement manquer le <div class="list_event"> ouvrant.
                          Si je demande expressément un exemple de ce que tu veux avec les tableaux, c'est parce que, comme expliqué précédemment, tu ne peux pas mettre n'importe quoi n'importe où dans un tableau, et il y aura une différence entre mettre la date dans le tableau avec les événements ou en dehors du tableau, du point de vue de l'algorithme.

                          -
                          Edité par Ymox 30 septembre 2021 à 11:33:37

                          • Partager sur Facebook
                          • Partager sur Twitter
                            30 septembre 2021 à 13:28:00

                            je ne voulais pas etre chiant et te mettre une tartine,

                            met le vrai code avec mon tableau c'est ça :

                            <div class="col-lg-8 list_menu">
                            	                    <section id="section-1">
                            	                        <!-- premiere date : exemple vendredi 21 mai -->
                            	                        <h4>vendredi 21 mai</h4>
                            	                        <div class="table_wrapper">
                            	                            <table class="table cart-list menu-gallery">
                            	                                <thead>
                            	                                    <tr>
                            	                                        <th>
                            	                                            Titre
                            	                                        </th>
                            	                                        <th>
                            	                                            horaire
                            	                                        </th>
                            	                                        <th>
                            	                                            inscrits
                            	                                        </th>
                            	                                    </tr>
                            	                                </thead>
                            	                                <tbody>
                            	                                    <tr>
                            	                                        <td class="d-md-flex align-items-center">
                            	                                            <figure>
                            	                                            	<img src="img/menu-thumb-1.jpg">
                            	                                            </figure>
                            	                                            <div class="flex-md-column">
                            	                                                <h4> event 1</h4>
                            	                                                <p> texte event 1</p>
                            	                                            </div>
                            	                                        </td>
                            	                                        <td>
                            	                                            <strong> 3 / 10</strong>
                            	                                        </td>
                            	                                        
                            	                                    </tr>
                            	                                    <tr>
                            	                                        <td class="d-md-flex align-items-center">
                            	                                            <figure>
                            	                                            	<img src="img/menu-thumb-2.jpg">
                            	                                            </figure>
                            	                                            <div class="flex-md-column">
                            	                                                <h4> event 2</h4>
                            	                                                <p> texte event 2</p>
                            	                                            </div>
                            	                                        </td>
                            	                                        <td>
                            	                                            <strong> 3 / 10</strong>
                            	                                        </td>
                            	                                        
                            	                                    </tr>
                            	                                    <tr>
                            	                                        <td class="d-md-flex align-items-center">
                            	                                            <figure>
                            	                                            	<img src="img/menu-thumb-3.jpg">
                            	                                            </figure>
                            	                                            <div class="flex-md-column">
                            	                                                <h4> event 3</h4>
                            	                                                <p> texte event 3</p>
                            	                                            </div>
                            	                                        </td>
                            	                                        <td>
                            	                                            <strong> 3 / 10</strong>
                            	                                        </td>
                            	                                    </tr>
                            	                                    
                            	                                </tbody>
                            	                            </table>
                            	                        </div>
                            	                    </section>
                            	                    <!-- /section -->
                            
                            	                    <section id="section-2">
                            	                        <!-- deuxieme date : exemple dimanche 23 mai -->
                            	                        <h4>dimanche 23 mai</h4>
                            	                        <div class="table_wrapper">
                            	                            <table class="table cart-list menu-gallery">
                            	                                <tbody>
                            	                                       <tr>
                            	                                        <td class="d-md-flex align-items-center">
                            	                                            <figure>
                            	                                            	<img src="img/menu-thumb-4.jpg">
                            	                                            </figure>
                            	                                            <div class="flex-md-column">
                            	                                                <h4> event 4</h4>
                            	                                                <p> texte event 4</p>
                            	                                            </div>
                            	                                        </td>
                            	                                        <td>
                            	                                            <strong> 5 / 10</strong>
                            	                                        </td>
                            	                                    </tr>
                            	                                    
                            	                                    
                            	                                       <tr>
                            	                                        <td class="d-md-flex align-items-center">
                            	                                            <figure>
                            	                                            	<img src="img/menu-thumb-5.jpg">
                            	                                            </figure>
                            	                                            <div class="flex-md-column">
                            	                                                <h4> event 5</h4>
                            	                                                <p> texte event 5</p>
                            	                                            </div>
                            	                                        </td>
                            	                                        <td>
                            	                                            <strong> 7 / 10</strong>
                            	                                        </td>
                            	                                    </tr>
                            	                                </tbody>
                            	                            </table>
                            	                        </div>
                            	                    </section>
                            	                    <!-- /section -->
                            
                            	                </div>

                            tout en html avec des exemples

                            • Partager sur Facebook
                            • Partager sur Twitter
                              30 septembre 2021 à 13:40:08

                              OK, donc tu ne mets pas les dates en légende de tableau, c'est surtout ça que je voulais voir.

                              Mais entre cet exemple que tu me montres et le code PHP fourni plus haut, on a de quoi avancer. Les numéros de ligne suivants se rapporteront à ce code lié.

                              Ligne 15, il faut, en plus d'afficher la date :

                              • fermer le tableau et la section précédents (de </tbody> à </section>), mais **pas quand il s'agit du tout premier événement* ;
                              • ouvrir une nouvelle section
                              • afficher la date
                              • ouvrir un nouveau tableau (dans un div.table_wrapper) avec les en-têtes (en ce qui me concerne, je les remettrai à chaque date, mais autrement il faut voir pour n'afficher l'en-tête de tableau que lors du tout premier événement).

                              Il y a un truc auquel faire attention au niveau de la mise en forme : là, les tailles de colonnes ne seront pas les mêmes d'une date à l'autre.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                30 septembre 2021 à 14:17:44

                                Pour la mise en forme je fait en sorte que tout soit de la meme taille avec une fonction php, lors de la saisie des données dans le formlaire c"est libre mais après j'ajoute une fonction pour limiter le nombre de caractère et ainsi avoir toujours les memes tailles de colonne.

                                J'ai pensé effectivement a remettre à chaque fois la colonne horaire, inscrits ( ca peut etre pratique quand on scroll au bout d'un moment, ca ne me dérange pas, je veut faire le plus simple possible d'une pour que je puisse avance sur le reste puis que j'arrive à plus ou moins comprendre ce que je fait

                                tu me dit ligne 15 donc la partie ou j'ouvre ma colonne dans mon tableau pour inscrits... déjà la je bloque je ne vois pas pourquoi....ici.

                                Le reste me perd encore plus...peut etre essayé de présenter d'une autre manière les infos si je n'y arrive pas éventuellement

                                J'ensuis la :

                                <!-- TEST -->
                                	                                	<?php
                                										if($sql->rowCount() > 0) {	
                                											$date_event = '';
                                
                                											$i = 0; // compte le nombre devents
                                											$i++;
                                
                                											while ($sortie = $sql->fetch()) {
                                
                                		
                                												// Affiché la date de la sortie
                                									        	$jour_de_sortie= strftime("%A %d %B %G", strtotime($sortie['sortie_date']));
                                									         	//echo $jour_de_sortie; // Exemple : samedi 04 septembre
                                
                                									        	// Test avec Ymox 
                                									         	if ($date_event != $jour_de_sortie) {
                                		        										htmlspecialchars($jour_de_sortie);
                                		    									}
                                
                                		    									$date_event = $jour_de_sortie;
                                
                                												
                                												// Places disponible
                                												if ($sortie['sortie_inscrits'] == $sortie['sortie_max_inscrits']) {
                                													$etat_inscription = '<span style="color: #FFF;background: #e43f6d;padding: 3px 7px;border-radius: 4px;font-size: 0.8em;">Complet</span>';
                                
                                												
                                												}else{
                                													$etat_inscription = $sortie['sortie_inscrits'].'/'.$sortie['sortie_max_inscrits'];
                                												}
                                												// End Places disponible
                                
                                
                                
                                				
                                
                                											echo' 
                                											
                                					                        <div class="table_wrapper">
                                					                            <table class="table cart-list menu-gallery">
                                					                                <thead>
                                					                                    <tr>
                                					                                        <th>
                                					                                            Sortie
                                					                                        </th>
                                					                                        <th>
                                					                                            Horaire
                                					                                        </th>
                                					                                        <th>
                                					                                            Insctits
                                					                                        </th>
                                					                                    </tr>
                                					                                </thead>
                                					                                <tbody>
                                														
                                					                                    <tr>
                                					                                        <td class="d-md-flex align-items-center">
                                					                                            <figure style="height: 33px; width: 33px">
                                					                                            	<a href="img/menu_item_large_1.jpg" title="'.$sortie['sortie_titre'].'" data-effect="mfp-zoom-in"><img src="img/menu-thumb-placeholder.jpg" data-src="img/menu-thumb-1.jpg" alt="thumb" class="lazy"></a>
                                					                                            </figure>
                                					                                            <div class="flex-md-column">
                                					                                                <h4><a href="#">'.$sortie['sortie_titre'].'</a></h4>
                                					                                                <p>'.$sortie['sortie_texte'].'</p>
                                					                                            </div>
                                					                                        </td>
                                					                                        <td>
                                					                                            <strong>9:40</strong>
                                					                                        </td>
                                					                  
                                					                                    </tr>';
                                					                                   }
                                													}else{
                                														echo'Aucun établissement enregistré selon vos critères.';
                                													}
                                													?>
                                
                                					                                    
                                					                                    
                                					                                </tbody>
                                					                            </table>
                                					                        </div>
                                					                    </section>
                                											<!-- /// End TEST -->





                                -
                                Edité par MikeSpense 30 septembre 2021 à 15:04:46

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  30 septembre 2021 à 16:57:20

                                  Non, là tu as ajouté les éléments de début de tableau pour chaque événement, et non pas juste quand la date change. Pour ce dernier point, c'est à la ligne 15 du code auquel je faisais référence avant, et donc à la 17 du code ci-dessus, pas aux 39 à 55.

                                  Voici un pseudo-code. L'indentation est volontaire et correcte.

                                  POUR TOUS les événements:
                                      SI la date de l'événement courant est différente de celle du précédent:
                                          SI on n'est pas en train de boucler sur le premier événement:
                                              on "ferme" le tableau et la section précédente // Lignes 80 à 83
                                              on "ouvre" une nouvelle section
                                  
                                          on affiche la nouvelle date // Ligne 17
                                          on "ouvre" le tableau pour la nouvelle date // Lignes 40 à 55
                                  
                                      on affiche la ligne du tableau pour l'événement // Lignes 57 à 71

                                  -
                                  Edité par Ymox 30 septembre 2021 à 16:58:04

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    30 septembre 2021 à 17:22:09

                                    je dois m'y prendre comme un manche mais bon on va bien y arrivé

                                    j'ai compte les éléments du coup et fait un if sur le $i comme si il vaut 1 alors je ferme le tableau, j'espère être sur la bonne voie quand meme

                                    donc voici le code pour le moment

                                    <!-- TEST -->
                                    	                                	 <?php
                                                                            if($sql->rowCount() > 0) {   
                                                                                $date_event = '';
                                     
                                                                                $i = 0; // compte le nombre devents
                                                                                
                                     
                                                                                while ($sortie = $sql->fetch()) {
                                     
                                             										
                                                                                    // Affiché la date de la sortie
                                                                                    $jour_de_sortie= strftime("%A %d %B %G", strtotime($sortie['sortie_date']));
                                                                                    //echo $jour_de_sortie; // Exemple : samedi 04 septembre
                                     
                                                                                    // Test avec Ymox
                                                                                    if ($date_event != $jour_de_sortie) {
                                                                                            htmlspecialchars($jour_de_sortie);
                                                                                    }
                                     
                                                                                    $date_event = $jour_de_sortie;
                                     
                                                                                     
                                                                                    // Places disponible
                                                                                    if ($sortie['sortie_inscrits'] == $sortie['sortie_max_inscrits']) {
                                                                                        $etat_inscription = '<span style="color: #FFF;background: #e43f6d;padding: 3px 7px;border-radius: 4px;font-size: 0.8em;">Complet</span>';
                                     
                                                                                     
                                                                                    }else{
                                                                                        $etat_inscription = $sortie['sortie_inscrits'].'/'.$sortie['sortie_max_inscrits'];
                                                                                    }
                                                                                    // End Places disponible
                                     												
                                     												// On vérifie si on est sur le premier élément on ferme le tab
                                     												// Je vieux de rajouté ca
                                     												$i++;
                                     												if($i==1) {
                                     													$close = '</tbody>
                                                                                   	 		</table>
                                                                                		</div>
                                                                           			 </section>';
                                     												}
                                     
                                     											
                                                     
                                     
                                                                                echo'
                                                                                <section>
                                                                                <h4>'.$date_event.'</h4>
                                                                                <div class="table_wrapper">
                                                                                    <table class="table cart-list menu-gallery">
                                                                                        <thead>
                                                                                            <tr>
                                                                                                <th>
                                                                                                    Sortie
                                                                                                </th>
                                                                                                <th>
                                                                                                    Horaire
                                                                                                </th>
                                                                                                <th>
                                                                                                    Insctits
                                                                                                </th>
                                                                                            </tr>
                                                                                        </thead>
                                                                                        <tbody>
                                                                                             
                                                                                            <tr>
                                                                                                <td class="d-md-flex align-items-center">
                                                                                                    <figure style="height: 33px; width: 33px">
                                                                                                        <a href="img/menu_item_large_1.jpg" title="'.$sortie['sortie_titre'].'" data-effect="mfp-zoom-in"><img src="img/menu-thumb-placeholder.jpg" data-src="img/menu-thumb-1.jpg" alt="thumb" class="lazy"></a>
                                                                                                    </figure>
                                                                                                    <div class="flex-md-column">
                                                                                                        <h4><a href="#">'.$sortie['sortie_titre'].'</a></h4>
                                                                                                        <p>'.$sortie['sortie_texte'].'</p>
                                                                                                    </div>
                                                                                                </td>
                                                                                                <td>
                                                                                                    <strong>9:40</strong>
                                                                                                </td>
                                                                           
                                                                                            </tr>
                                                                                            '.$close.'';
                                                                                           }
                                    
                                                                                        }else{
                                                                                            echo'Aucun établissement enregistré selon vos critères.';
                                                                                        }
                                                                                        ?>


                                    je ne voit comment faire ceci :

                                    SI la date de l'événement courant est différente de celle du précédent:

                                    plusieurs évenelent peuvent avoir la meme date mais a des heures différentes

                                    -
                                    Edité par MikeSpense 30 septembre 2021 à 17:26:43

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      30 septembre 2021 à 18:41:17

                                      C'est bien pour ça qu'il faut regarder uniquement la date et non la date et l'heure. Du coup, ce serait plus pratique si on n'utilisait pas strftime(), mais quelque chose d'un peu plus, disons, "à jour".

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        1 octobre 2021 à 9:18:06

                                        Donc en cherchant un peu j'ai trouvé un truc sympa j'ai comme ca la date et l'heure séparer avec ma date écrit en lettre comme je souhaite le code actualisé nous donne ca du coup:

                                        <?php
                                                                                if($sql->rowCount() > 0) {   
                                                                                    //$date_event = '';
                                         
                                                                                    $i = 0; // compte le nombre devents
                                                                                    while ($sortie = $sql->fetch()) {
                                         
                                                                                        // pour avoir des dates avec l'heure séparée au format FR
                                                                                        list($date, $time) = explode(" ", $sortie['sortie_date']);
                                                                                        list($year, $month, $day) = explode("-", $date);
                                                                                        list($hour, $min, $sec) = explode(":", $time);
                                                                                        $months = array("janvier", "février", "mars", "avril", "mai", "juin",
                                            "juillet", "août", "septembre", "octobre", "novembre", "décembre");
                                        
                                                                                        echo $date_event = "le $day ".$months[$month-1]." $year à ${hour}h${min}m${sec}s";
                                        
                                                                                         
                                                                                        // Places disponible
                                                                                        if ($sortie['sortie_inscrits'] == $sortie['sortie_max_inscrits']) {
                                                                                            $etat_inscription = '<span style="color: #FFF;background: #e43f6d;padding: 3px 7px;border-radius: 4px;font-size: 0.8em;">Complet</span>';
                                         
                                                                                         
                                                                                        }else{
                                                                                            $etat_inscription = $sortie['sortie_inscrits'].'/'.$sortie['sortie_max_inscrits'];
                                                                                        }
                                                                                        // End Places disponible
                                         												
                                         												// On vérifie si on est sur le premier élément on ferme le tab
                                         												$i++;
                                         												if($i==1) {
                                         													$close = '</tbody>
                                                                                       	 		</table>
                                                                                    		</div>
                                                                               			 </section>';
                                         												}
                                         
                                                                                    echo'
                                                                                    <section>
                                                                                    <h4>'.$date_event.'</h4>
                                                                                    <div class="table_wrapper">
                                                                                        <table class="table cart-list menu-gallery">
                                                                                            <thead>
                                                                                                <tr>
                                                                                                    <th>
                                                                                                        Sortie
                                                                                                    </th>
                                                                                                    <th>
                                                                                                        Horaire
                                                                                                    </th>
                                                                                                    <th>
                                                                                                        Insctits
                                                                                                    </th>
                                                                                                </tr>
                                                                                            </thead>
                                                                                            <tbody>
                                                                                                 
                                                                                                <tr>
                                                                                                    <td class="d-md-flex align-items-center">
                                                                                                        <figure style="height: 33px; width: 33px">
                                                                                                            <a href="img/menu_item_large_1.jpg" title="'.$sortie['sortie_titre'].'" data-effect="mfp-zoom-in"><img src="img/menu-thumb-placeholder.jpg" data-src="img/menu-thumb-1.jpg" alt="thumb" class="lazy"></a>
                                                                                                        </figure>
                                                                                                        <div class="flex-md-column">
                                                                                                            <h4><a href="#">'.$sortie['sortie_titre'].'</a></h4>
                                                                                                            <p>'.$sortie['sortie_texte'].'</p>
                                                                                                        </div>
                                                                                                    </td>
                                                                                                    <td>
                                                                                                        <strong>9:40</strong>
                                                                                                    </td>
                                                                               
                                                                                                </tr>
                                                                                                '.$close.'';
                                                                                               }
                                        
                                                                                            }else{
                                                                                                echo'Aucun établissement enregistré selon vos critères.';
                                                                                            }
                                                                                            ?>
                                         



                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          1 octobre 2021 à 11:14:38

                                          Ouch, la gestion de date ainsi à la main, c'est… pas ce que je t'ai recommandé, en tout cas.

                                          Et avec ce code, tu as tout ce qu'il te faut comme tu le souhaites ? Si oui, marque le sujet résolu.

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            1 octobre 2021 à 11:18:17

                                            non je n'ai pas tout ce que je souhaite tjr le problème pour affiché les événements selon les dates.

                                            J'ai ce que je souhaite pour les dates c'est tout à savoir une date en lettre

                                            Mardi  6 Janvier ....

                                            mais je n'ai tjr pas résolu mon problème pour la gestion des événements je ne sais tjr pas comment faire

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              1 octobre 2021 à 11:24:23

                                              Tu as quoi actuellement comme résultat HTML avec ce code ?

                                              Et pour les dates, ter repetita, regarde dans la FAQ liée dans ma signature.

                                              -
                                              Edité par Ymox 1 octobre 2021 à 11:25:02

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                1 octobre 2021 à 15:04:49

                                                regarde ton echo de fin de boucle, tu y affiches systématiquement $date_event

                                                Il ne faut afficher celle-ci que si elle diffère du tour d'avant, donc:

                                                si c'est la première itération de la boucle, mémoriser la date dans une variable $date_prec par exemple et afficher la date;

                                                si ce n'est pas la première itération, regarder si la date de l'event est égale à date_prec, si c'est égale, on affiche les infos de l'event, si ce n'est pas égale, on mémorise la date dans date_prec, et on affiche la date.

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  1 octobre 2021 à 17:01:53

                                                  j'ai donc changé le code pour adapté la date comme ymox demandé

                                                  J'ai bien compris que je devais comparé les dates mais je ne comprend pas le :

                                                  si c'est la première itération de la boucle, mémoriser la date dans une variable $date_prec par exemple et afficher la date


                                                  du moins comment m'y prendre faire la condition c'est à ma porté normalement

                                                   <?php
                                                                                          if($sql->rowCount() > 0) {   
                                                                                              //$date_event = '';
                                                   
                                                                                              $i = 0; // compte le nombre devents
                                                                                              while ($sortie = $sql->fetch()) {
                                                   
                                                                                                  // pour avoir des dates avec l'heure séparée au format FR
                                                                                                  /*
                                                                                                  list($date, $time) = explode(" ", $sortie['sortie_date']);
                                                                                                  list($year, $month, $day) = explode("-", $date);
                                                                                                  list($hour, $min, $sec) = explode(":", $time);
                                                                                                  $months = array("janvier", "février", "mars", "avril", "mai", "juin",
                                                      "juillet", "août", "septembre", "octobre", "novembre", "décembre");
                                                  
                                                                                                 $date_event = "le $day ".$months[$month-1]."";
                                                                                                 $heure_event = "${hour}h${min}m";
                                                                                                 */
                                                                                                  $date_event = new IntlDateFormatter('fr_FR', NULL, NULL, NULL, NULL, 'EEEE dd LLLL');
                                                                                                  $date = new DateTime($sortie['sortie_date']);    
                                                    												$date_event = $date->format('l d F Y');
                                                  
                                                                                                   
                                                                                                  // Places disponible
                                                                                                  if ($sortie['sortie_inscrits'] == $sortie['sortie_max_inscrits']) {
                                                                                                      $etat_inscription = '<span style="color: #FFF;background: #e43f6d;padding: 3px 7px;border-radius: 4px;font-size: 0.8em;">Complet</span>';
                                                   
                                                                                                   
                                                                                                  }else{
                                                                                                      $etat_inscription = $sortie['sortie_inscrits'].'/'.$sortie['sortie_max_inscrits'];
                                                                                                  }
                                                                                                  // End Places disponible
                                                   												
                                                   												// On vérifie si on est sur le premier élément on ferme le tab
                                                   												$i++;
                                                   												if($i==1) {
                                                   													$close = '</tbody>
                                                                                                 	 		</table>
                                                                                              		</div>
                                                                                         			 </section>';
                                                   												}
                                                   
                                                                                              echo'
                                                                                              <section>
                                                                                              <h4>'.$date_event.'</h4>
                                                                                              <div class="table_wrapper">
                                                                                                  <table class="table cart-list menu-gallery">
                                                                                                      <thead>
                                                                                                          <tr>
                                                                                                              <th>
                                                                                                                  Sortie
                                                                                                              </th>
                                                                                                              <th>
                                                                                                                  Horaire
                                                                                                              </th>
                                                                                                              <th>
                                                                                                                  Insctits
                                                                                                              </th>
                                                                                                          </tr>
                                                                                                      </thead>
                                                                                                      <tbody>
                                                                                                           
                                                                                                          <tr>
                                                                                                              <td class="d-md-flex align-items-center">
                                                                                                                  <figure style="height: 33px; width: 33px">
                                                                                                                      <a href="img/menu_item_large_1.jpg" title="'.$sortie['sortie_titre'].'" data-effect="mfp-zoom-in"><img src="img/menu-thumb-placeholder.jpg" data-src="img/menu-thumb-1.jpg" alt="thumb" class="lazy"></a>
                                                                                                                  </figure>
                                                                                                                  <div class="flex-md-column">
                                                                                                                      <h4><a href="#">'.$sortie['sortie_titre'].'</a></h4>
                                                                                                                      <p>'.$sortie['sortie_texte'].'</p>
                                                                                                                  </div>
                                                                                                              </td>
                                                                                                              <td>
                                                                                                                  <strong>09h30</strong>
                                                                                                              </td>
                                                                                         
                                                                                                          </tr>
                                                                                                          '.$close.'';
                                                                                                         }
                                                  
                                                                                                      }else{
                                                                                                          echo'Aucun établissement enregistré selon vos critères.';
                                                                                                      }
                                                                                                      ?>
                                                   



                                                  -
                                                  Edité par MikeSpense 1 octobre 2021 à 17:03:11

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    1 octobre 2021 à 17:10:11

                                                    Cette étape était présente dans le code de ce message, mais tu as commenté la création de $date_event depuis…

                                                    Et il faut bien se rendre compte que les différents SI que j'avais mis dans le pseudo-code influent sur l'affichage, donc celui-ci ne sera pas en un seul bloc. Je déconseille de stocker les parties dans des variables qu'on ajoute à la sortie principale, avec du code HTML, c'est un coup à en générer qui ne soit pas bon et à ne plus voir où est quoi. Tant qu'on y est, je conseillerais aussi de ne pas faire un echo '…'. Les IDEs permettent suivant comment de voir si la séquence HTML est correcte même s'il y a un peu de PHP dedans, du fait d'une part de la coloration syntaxique et d'autre part de l'analyse qu'ils arrivent parfois à en faire.

                                                    Le test ligne 36 n'est pas le bon, on ne ferme pas les section et tableau si on est dans la première itération, or là tu ne le fais que dans ce cas.

                                                    -
                                                    Edité par Ymox 1 octobre 2021 à 17:15:51

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      1 octobre 2021 à 19:20:40

                                                      bon je dois être abuti apparemment je ne comprends même pas tout ce que tu essaie de m'expliquer, je vais essayé de trouver un moyen de présenter ça autrement afin d'adapter un truc à mon niveau.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        1 octobre 2021 à 22:31:03

                                                        Pourtant j'avais donné les numéros de ligne et ce qu'il fallait y mettre… et j'avais demandé le résultat HTML, pas le nouveau code PHP.

                                                        Allez, je vais être gentil, voici ce que ça pourrait donner (sans garantie, mais l'idée y est certainement).

                                                        <?php
                                                        // On commence par récupérer le premier événement s'il y en a au moins un
                                                        if ($sortie = $sql->fetch()) {
                                                        	$previous_date = '';
                                                        
                                                        	$i = 0; // compte le nombre devents
                                                        	// On va faire la boucle avec le premier élément récupéré ligne 3, et ensuite,
                                                        	// voir ligne 63
                                                        	do {
                                                        		$i++;
                                                        
                                                        		$metteur_en_forme = new IntlDateFormatter('fr_FR', NULL, NULL, NULL, NULL, 'EEEE dd LLLL');
                                                        		$date = new DateTime($sortie['sortie_date']);
                                                        
                                                        		// Places disponible
                                                        		if ($sortie['sortie_inscrits'] == $sortie['sortie_max_inscrits']) {
                                                        			$etat_inscription = '<span style="color: #FFF;background: #e43f6d;padding: 3px 7px;border-radius: 4px;font-size: 0.8em;">Complet</span>';
                                                        		} else {
                                                        			$etat_inscription = $sortie['sortie_inscrits'].'/'.$sortie['sortie_max_inscrits'];
                                                        		}
                                                        		// End Places disponible
                                                        
                                                        		if ($date->format('Y-m-d') != $previous_date):
                                                        			// On vérifie si on N'est PAS sur le premier élément on ferme le tab
                                                        			if ($i > 1): ?>
                                                        				</tbody>
                                                        			</table>
                                                        		</div>
                                                        	</section>
                                                        			<?php
                                                        			endif;
                                                        			?>
                                                        	<section>
                                                        		<h4><?= $metteur_en_forme->format($date); ?></h4>
                                                        		<div class="table_wrapper">
                                                        			<table class="table cart-list menu-gallery">
                                                        				<thead>
                                                        					<tr>
                                                        						<th>Sortie</th>
                                                        						<th>Horaire</th>
                                                        						<th>Inscrits</th>
                                                        					</tr>
                                                        				</thead>
                                                        				<tbody>
                                                        		<?php
                                                        			$previous_date = $date->format('Y-m-d');
                                                        		endif;
                                                        		?>
                                                        					<tr>
                                                        						<td class="d-md-flex align-items-center">
                                                        							<figure style="height: 33px; width: 33px">
                                                        								<a href="img/menu_item_large_1.jpg" title="<?= $sortie['sortie_titre']; ?>" data-effect="mfp-zoom-in"><img src="img/menu-thumb-placeholder.jpg" data-src="img/menu-thumb-1.jpg" alt="thumb" class="lazy"></a>
                                                        							</figure>
                                                        							<div class="flex-md-column">
                                                        								<h4><a href="#"><?= $sortie['sortie_titre']; ?></a></h4>
                                                        								<p><?= $sortie['sortie_texte']; ?></p>
                                                        							</div>
                                                        						</td>
                                                        						<td>
                                                        							<strong><?= $date->format('H\hi'); ?></strong>
                                                        						</td>
                                                        					</tr>
                                                        <?php
                                                        	// C'est là qu'on dit comment faire la boucle.
                                                        	// Au lieu de dire "Tant que tu as des résultats, tu affiches", on dit
                                                        	// "Affiche ça, et continue tant que tu as des résultats". Subtile, certes,
                                                        	// mais plus efficace.
                                                        	} while ($sortie = $sql->fetch());
                                                        } else {
                                                        	echo 'Aucun établissement enregistré selon vos critères.';
                                                        }
                                                        

                                                        -
                                                        Edité par Ymox 1 octobre 2021 à 22:33:00

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          4 octobre 2021 à 12:32:27

                                                          A quel moment tu écris ta date dans le code html ? c'est ta ligne 45 > <h4>'.$date_event.'</h4>

                                                          Est-ce que tu veux l'écrire systématiquement pour chaque event ? non, donc il faut donc conditionner cette écriture

                                                          le principe:

                                                          $date_precedente=0
                                                          début de boucle
                                                              $date_event=...
                                                              Si $date_event != $date_precedente
                                                                  alors j'affiche la partie html de l'affichage de $date_event (+ mise en page)
                                                              affichage de l'event
                                                             $date_precedente=$date_event
                                                          fin de boucle



                                                          -
                                                          Edité par umfred 4 octobre 2021 à 12:33:03

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            12 octobre 2021 à 13:38:35

                                                            J'étais partir quelques jours,

                                                            merci à vous, tout est rentré dans l'ordre merci encore

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            Affiché la date 1 seule fois dans un while

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                            • Editeur
                                                            • Markdown