Variable de texte répétée en double dans un foreach

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Variable de texte répétée en double dans un foreach

    Bonjour,

    J'extrais certaines valeurs d'une table que j'affiche grâce à une boucle.

    Quand je veux ajouter des variables de texte pour commenter les valeurs, ces variables de texte sont affichées autant de fois que de groupe de valeurs.

    ($this->item->portions est une liste d'id d'enregistrements de la table #__randonne_portion)

    Par exemple, si je fais :
    Code PHP:
     <?php foreach ($this->item->portions as $listePortions){
    {
         
    $IdPortions trim($listePortions)
         
    //print_r($IdPortions);  
         
    $db JFactory::getDbo();
         
    $query $db->getQuery(true);
         
    $query->select(array('id','libelle'))
              ->
    from($db->quoteName('#__randonne_portion'))
              ->
    where($db->quoteName('id')." = ".$db->quote($IdPortions));
         
    $db->setQuery($query);
         
    $ListInfoPortions $db->loadAssoc();
    ?>

    <div style="float:left;width:100%">
       <div style="float:left;text-align:center;margin:0 5px">
         <?php echo "TEST"; echo $ListInfoPortions[libelle];?>
       </div>
    </div>  
    <?php ?>
    Le mot TEST s'affiche deux fois plus de fois qu'il y a de libellés.

    Pourquoi la variable de texte est-elle affichée deux fois par libellé ?

    Par exemple, si j'ai deux libellés (qui sont AAA et BBB) qui correspondent à ma requête, cela affiche :

    TEST AAA

    TEST

    TEST BBB

    TEST


    Quelqu'un saurait-il m'aider ?

    Cordialement.

    Eric
    Dernière édition par Agrepe à 28/01/2020, 18h35

  • #2
    Salut,

    Il semble que ton echo est dans la boucle de ton foreach.
    Donc logique qu'il s'écrive en boucle.

    Code:
    <?php foreach ($this->item->portions as $listePortions) [B][COLOR=#FF0000]{[/COLOR][/B]
    {
         $IdPortions = trim($listePortions)
         //print_r($IdPortions);  
         $db = JFactory::getDbo();
         $query = $db->getQuery(true);
         $query->select(array('id','libelle'))
              ->from($db->quoteName('#__randonne_portion'))
              ->where($db->quoteName('id')." = ".$db->quote($IdPortions));
         $db->setQuery($query);
         $ListInfoPortions = $db->loadAssoc();
    } ?>
    
    <div style="float:left;width:100%">
       <div style="float:left;text-align:center;margin:0 5px">
         <?php echo "TEST"; echo $ListInfoPortions[libelle];?>
       </div>
    </div>  
    <?php [B][COLOR=#FF0000]}[/COLOR][/B] ?>

    Dol.
    Dernière édition par dolmenhir à 28/01/2020, 13h44
    Je préfère éclairer que briller.” - “J'ai peut-être l'air froid, mais je suis pas givré.- "ça dépend ça dépasse"
    Ne m'envoyez pas de message privé pour résoudre vos problèmes sans y avoir été invité.
    Dolmenhir : tailleur de site web depuis 1997. Spécialiste Joomla depuis 2005. https://www.dolmenhir.fr

    Commentaire


    • #3
      Bonjour Dolmenhir,
      Merci pour ta réponse (Elle ne s'affiche pas ici ?)
      Tu me dis que je devrais supprimer la double accolade, mais dans ce cas, je ne peux plus afficher autant de résultat que le foreach le permet, non ?
      Cordialement.
      Eric

      Commentaire


      • #4
        Oui, j'ai apparemment du supprimer maladroitement ce message.

        En effet, je ne comprend pas pourquoi cette double accolade, une seule suffit pour la boucle du foreach.
        Mais c'est vrai que ton echo doit rester dans cette boucle pour afficher tes résultats.
        Donc ne supprimer que la première accolade d'ouverture et la première accolade de fermeture doit corriger cela.

        Par contre, es-tu sûr de récupérer un résultat non vide à chaque boucle dans ton $ListInfoPortions ?
        Apparemment ce ne serait pas le cas si tu as des lignes "TEST" seules (sans libellé)...

        Tu devrais donc vérifier ça en premier et le cas échéant conditionner l'affichage de l'écho que si ce résultat est non vide.
        Je préfère éclairer que briller.” - “J'ai peut-être l'air froid, mais je suis pas givré.- "ça dépend ça dépasse"
        Ne m'envoyez pas de message privé pour résoudre vos problèmes sans y avoir été invité.
        Dolmenhir : tailleur de site web depuis 1997. Spécialiste Joomla depuis 2005. https://www.dolmenhir.fr

        Commentaire


        • #5
          Merci beaucoup pour ta réponse, j'ai reçu ton message par email, j'ai donc pu corriger, cela n'a rien changé.
          J'avais deux accolades car à un moment je traitais directement des variables dans le foreach et de l'Html dans une autre partie.

          Je vais tester pour voir si je n'ai pas d’enregistrement vide, mais à priori il n'y a pas de raison.

          print_r($ListInfoPortions); affiche : (Je précise que je n'ai aucune info enregistrée dans point_a et point_b de mon enregistrement id 2)

          Array ( [id] => 1 [libelle] => AAA [commentaire] => Commentaires de la portion AAA [point_a] => Croisement AAA [point_b] => Balise ABC [denivele_positif] => 150 [denivele_negatif] => 30 [longueur] => 3.5 [difficulte] => 2 [duree_moyenne] => 1:12 ) Array ([id] => 2 [libelle] => BBB [commentaire] =>Commentaires de la portion BBB [point_a] => [point_b] => [denivele_positif] => 128 [denivele_negatif] => 16 [longueur] => 4.62 [difficulte] => 1 [duree_moyenne] => 1:28 )

          Je ne vois pas d'enregistrement vide.

          Cliquez sur l'image pour l'afficher en taille normale

Nom : Capture_table_portion.JPG 
Affichages : 39 
Taille : 45,0 Ko 
ID : 2012205
          Dernière édition par Agrepe à 28/01/2020, 19h56

          Commentaire


          • #6
            Hello.

            Je ne vois pas trop ton problème, si tu es sûr du retour de ta requête.

            Juste une remarque que je viens de faire sur une autre de tes discussions, il faut mettre le indice littéraux entre guillemets donc
            Code PHP:
            $ListInfoPortions['libelle'
            et pas
            Code PHP:
            $ListInfoPortions[libelle
            A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
            Rejoignez le Joomla Users Groupe Alsace...
            roland_d_alsace va-t-il devenir roland_du_grand_est ?

            Commentaire


            • #7
              Envoyé par roland_d_alsace Voir le message
              Hello.

              Je ne vois pas trop ton problème, si tu es sûr du retour de ta requête.

              Juste une remarque que je viens de faire sur une autre de tes discussions, il faut mettre le indice littéraux entre guillemets donc
              Code PHP:
              $ListInfoPortions['libelle'
              et pas
              Code PHP:
              $ListInfoPortions[libelle
              j'ai ajouté les guillemets, je ne les mettais jamais, cela n'empêchait pas le fonctionnement alors je ne m'étais jamais posé la question.

              Pour tester j'ai ajouté l'affichage des id, je n'ai bien que les id des deux enregistrements de test. Voici la capture écran de ce qui s'affiche.
              Cliquez sur l'image pour l'afficher en taille normale  Nom : Capture_affichage_portions.JPG  Affichages : 0  Taille : 58,4 Ko  ID : 2012242
              Je ne vois vraiment pas ce qui se passe.

              Voici le morceau de code complet conforme à la copie écran de l'affichage.
              Code PHP:
                  <?php
                  $ListIdPortion 
              preg_replace('/[^(1-9,)]*/'''$this->item->portions);
                  
              $listPortions explode(','$ListIdPortion);

              $DenPos "Dénivellé positif ";
              $DenNeg "Dénivellé négatif ";
              $Long "Longueur";
              $Dur "Durée";
              $metres " Mètres";
              $Km " Km";
              $H " Heures";

                  foreach (
              $listPortions as $listePortions) {
                  
              $IdPortions trim($listePortions);
                  
              //print_r($IdPortions); 1 2

                      
              $db2 JFactory::getDbo();
                      
              $query2 $db2->getQuery(true);
                      
              $query2->select(array('id','libelle','commentaire','point_a','point_b','denivele_positif','denivele_negatif','longueur','difficulte','duree_moyenne'))
                      ->
              from($db2->quoteName('#__randonne_portion'))
                      ->
              where($db2->quoteName('id')." = ".$db2->quote($IdPortions));
                      
              $db2->setQuery($query2);
                      
              $ListInfoPortions $db2->loadAssoc();
                      
              //print_r($ListInfoPortions);

                      
              ?>
                      <div>
                          <div>
                              <div style="float:left;text-align:center;margin:0 5px">
                              <?php echo '<span style="font-weight:900;color:#faa932"> ' $ListInfoPortions['id'] . ' </span>'?>
                              </div>

                              <div style="float:left;text-align:center;margin:0 5px">
                              <?php echo '<span style="font-weight:900;color:#faa932"> ' $ListInfoPortions['libelle'] . ' </span>'?>
                              </div>

                              <div style="float:left;text-align:center;margin:0 5px">
                              <?php echo " de "; echo '<span style="font-weight:900;color:#faa932"> ' $ListInfoPortions['point_a'] . ' </span>'?>
                              </div>

                              <div style="float:left;text-align:center;margin:0 5px">
                              <?php echo " à "; echo '<span style="font-weight:900;color:#faa932"> ' $ListInfoPortions['point_b'] . ' </span>'?>
                              </div>
                          </div>
                          <div>                
                              <div style="float:left;text-align:center;margin:0 5px">
                              <?php echo ", dénivelé positif "; echo '<span style="font-weight:900;color:#faa932"> ' $ListInfoPortions['denivele_positif']. '</span>'; echo $metres?>
                              </div>
                              <div style="float:left;text-align:center;margin:0 5px">
                              <?php echo ", dénivelé négatif "; echo '<span style="font-weight:900;color:#faa932"> ' $ListInfoPortions['denivele_negatif']. '</span>'; echo $metres?>
                              </div>
                              <div style="float:left;text-align:center;margin:0 5px">
                              <?php echo ", distance de "; echo '<span style="font-weight:900;color:#faa932"> ' $ListInfoPortions['longueur']. '</span>'; echo $Km?>
                              </div>
                              <div style="float:left;text-align:center;margin:0 5px">
                              <?php echo ", durée moyenne "; echo '<span style="font-weight:900;color:#faa932"> ' $ListInfoPortions['duree_moyenne']. '</span>'; echo $H?>
                              </div>

                              <div style="float:left;width:100%;margin:0 5px">
                              <?php echo $ListInfoPortions['commentaire'];?>
                              </div>
                          </div>
                      </div>

                      <?php ?>

              Commentaire


              • #8
                tu as une anomalie en désactivant tes div et en utilisant juste ton "print_r($ListInfoPortions)" ?
                Je préfère éclairer que briller.” - “J'ai peut-être l'air froid, mais je suis pas givré.- "ça dépend ça dépasse"
                Ne m'envoyez pas de message privé pour résoudre vos problèmes sans y avoir été invité.
                Dolmenhir : tailleur de site web depuis 1997. Spécialiste Joomla depuis 2005. https://www.dolmenhir.fr

                Commentaire


                • #9
                  as-tu le même problème en utilisant un "$db->loadObject()" au lieu d'un "$db->loadAssoc()" ?
                  (et où "$ListInfoPortions['champ']" devient alors "$ListInfoPortions->champ")
                  Dernière édition par dolmenhir à 29/01/2020, 13h17
                  Je préfère éclairer que briller.” - “J'ai peut-être l'air froid, mais je suis pas givré.- "ça dépend ça dépasse"
                  Ne m'envoyez pas de message privé pour résoudre vos problèmes sans y avoir été invité.
                  Dolmenhir : tailleur de site web depuis 1997. Spécialiste Joomla depuis 2005. https://www.dolmenhir.fr

                  Commentaire


                  • #10
                    Merci beaucoup pour votre aide,
                    Je dois partir, j'ai plusieurs rendez-vous aujourd'hui, je regarderai ce soir à mon retour.
                    Vous ne verrez certainement mes réponses que demain ou très tard ce soir, nous avons 5 heures de décalages, mais bien entendu je répondrai.
                    Cordialement.

                    Commentaire


                    • #11
                      j'ai trouvé,
                      Je ne sais pas pourquoi, le séparateur (qui était la virgule) était en double après :
                      preg_replace('/[^(1-9,)]*/','', $this->item->portions);
                      C'est réparé.

                      Merci à tous pour votre aide.

                      Cordialement.

                      Eric

                      Commentaire

                      Annonce

                      Réduire
                      Aucune annonce pour le moment.

                      Partenaire de l'association

                      Réduire

                      Hébergeur Web PlanetHoster
                      Travaille ...
                      X