loadobjectlist + php

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

  • [RÉGLÉ] loadobjectlist + php

    Bonjour j'essaye de faire un module pour joomla j'ai un message d'erreur

    Voici mon code si quelqu'un voit l'erreur ça serai sympa

    Code PHP:
    <?php
    require_once(dirname(__FILE__).DS.'helper.php');
    $model = new dernier_evenement2;
    $id_type $params->get('id_type',0);
    $db =& JFactory::getDBO();
    $query "SELECT * ".
         
    "FROM #__f_evenement".
         
    "RIGHT JOIN #__f_soustype AS st ON id_soustype = st.id and st.id_type = ".$id_type." ".
         
    " LIMIT 0 , 1";
    //echo $query;
    $db->setQuery($query);
    $list $db->loadobjectlist();
    foreach (
    $list as $item) {
     
        
    $detailssoustype $model->getdetailssoustype($item->id_soustype);
        if(
    $item->image_list)
        
    $image 'images/formation/type/'.$detailssoustype['typeimage'];
        else
        
    $image 'images/formation/type/'.$detailssoustype['typeimage'];
        echo 
    '<br><div class="evenement">';
       echo 
    '<div class="groupeventhome">'.$detailssoustype['type'].'</div>';
        echo 
    '<a href="index.php?option=com_formation&view=categorie&layout=categorie-event&id='.$id_type.'&Itemid=14"><img height ="180" width ="276" src ="'.$image.'" /></a><div class="evenementimg"><a href="index.php?option=com_formation&view=categorie&layout=categorie-event&id='.$id_type.'&Itemid=14"><img height ="180" width ="276" src ="/images/stories/fond-opacity.png" /></a></div>';
        echo 
    '</div>';
     
     
    }
    ?>
    Le message d'erreur m'indique que l'erreur vient de cette ligne

    Warning: Invalid argument supplied for foreach() in /www/modules/mod_derniere_evnement2/mod_derniere_evnement2.php on line 13

    Code PHP:
    foreach ($list as $item) { 
    Merci d'avance de votre aide.

  • #2
    Re : loadobjectlist + php

    Tu es sûr que $list n'est pas vide ? Tout me laisse à croire que ton query ne retourne rien.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
    Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

    Commentaire


    • #3
      Re: loadobjectlist + php

      Non c'est sur j'ai des evenement dans chaque sous type.

      Mais peut on faire une jointure avec loadobjectlist();

      Par ce que si je fait quelque chose de direct genre

      $query = 'SELECT * FROM #__f_evenement where id_type = '.$id_type.' ';
      $query .= ' LIMIT 0 , 1';

      Ca fonctionne

      Merci de ton aide cavo789

      Commentaire


      • #4
        Re : loadobjectlist + php

        Je réagis sur le message d'erreur et sur la ligne indiquée. Tout porte à croire que $list est vide.

        Qu'obtiens-tu après un print_r($list);
        Christophe (cavo789)
        Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
        Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

        Commentaire


        • #5
          Re: loadobjectlist + php

          Je n'obtiens rien de plus j'ai toujours le même message d'erreur.

          Pour quelle raison $list pourrait être vide ?

          Commentaire


          • #6
            Re : loadobjectlist + php

            Avec le print_r juste avant ton foreach tu n'obtiens rien ? CQFD.

            fait un echo $query; que tu copieras ensuite dans ton phpMyAdmin pour valider que ton SQL retourne bien quelque chose.

            Note : tu devrais inclure un test avant ton foreach pour ne pas rentrer dans la boucle sir ton recordset est vide. Tu augmenterais la solidité de ton code.
            Christophe (cavo789)
            Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
            Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

            Commentaire


            • #7
              Re : loadobjectlist + php

              [modo]sujet déplacé dans la section développeurs[/modo]

              je confirme la pensée de cavo
              ta requête doit surement aboutir sur un résultat nul ce qui fait que ta boucle ne peut pas opérer.

              essaies :
              Code PHP:
              $list $db->loadobjectlist();
              var_dump($list);
              if (
              $list) {
              foreach (
              $list as $item) { 
              si ton var_dump te renvoit NULL c'est sur que ça ne marchera pas, alors c'est ta requête qui a un souci
              Vive Joomla! http://www.joomlack.fr Tutoriels et extensions pour Joomla!. Livre création de template Joomla de plus de 200 pages.
              http://www.template-creator.com Outil de création de templates
              Module Maximenu CK - Megamenu, multicolonnes, chargement de module, description de lien, deroulement animé - Compatible Virtuemart, Hikashop

              Commentaire


              • #8
                Re : Re: loadobjectlist + php

                Mais peut on faire une jointure avec loadobjectlist();
                Bonjour,
                Oui, on peut faire des jointures, mais en lisant ta requête SQL (sans avoir la structure des 2 tables, difficile de répondre avec du code fonctionnel), mais il manque un peu de parenthésage pour éliminer les risques de mauvaise interprétation du code.

                De plus, la documentation MySQL déconseille l'utilisation du RIGHT JOIN pour des raisons de portabilité. Testes ta requête dans une console MySQL (ou avec phpMyAdmin, il est probable que des warnings ou autres te mettront sur la voie.
                Pas de demande de support par MP.
                S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                Commentaire


                • #9
                  Re : loadobjectlist + php

                  Pour continuer dans les conseils, ton code pour créer le SQL statement n'est pas protégé. Que se passerait-il si $id_type n'était pas un chiffre mais une attaque de type SQL injection ? Réponse : ouch, ça risque de faire mal.

                  Non seulement il faudrait ajouter des parenthèses ci-et-là pour bien délimiter tes critères mais il faudrait protéger ton query. A lire :
                  http://dev.joomla.fr/programmation-f...injections-sql
                  Christophe (cavo789)
                  Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                  Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                  Commentaire


                  • #10
                    Re: loadobjectlist + php

                    Bonjour et merci à tous de votre aide

                    Effectivement var_dump me renvoie un NULL

                    Comment puis je savoir ce qui ne fonctionne pas dans ma requette

                    Voici la structure des tables utilisé dans la requete

                    Table f_evenement

                    id
                    nouveau
                    Id_evenement
                    id_soustype int(11)
                    INTIT1
                    INTIT2
                    age_min
                    age_max
                    age_afficher
                    horaire_afficher
                    niveau
                    JOUR
                    JOUR_DEBUT
                    JOUR_FIN
                    HDEB
                    HFIN
                    NB
                    NB_Budget
                    Cd_Tarif
                    Statut
                    NOCPT
                    NOCPTVE
                    FAM_ACTIV
                    lien_connexes
                    sujets_connexes
                    alias
                    mots_photos
                    titre_objectif
                    text_objectif
                    media_details
                    image_details
                    accueil
                    published
                    Chemin_album
                    lieu
                    Cde_Sous_Lieu

                    Table f_soustype

                    id
                    nom
                    alias
                    image
                    id_type
                    published
                    ordering

                    Commentaire


                    • #11
                      Re : loadobjectlist + php

                      Comment savoir ? Ben, euh?, nous te l'avons dis à plusieurs reprises...

                      Voir mon post #6 p.e. : tu copies/colles ton SQL dans phpMyAdmin et tu l'exécutes. A toi de débogger....
                      Christophe (cavo789)
                      Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                      Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                      Commentaire


                      • #12
                        Re: loadobjectlist + php

                        Je viens d'essayer les requetes suivantes dans phpmyadmin

                        SELECT *
                        FROM jos_f_evenement
                        LEFT JOIN jos_f_soustype AS st ON id_soustype = st.id
                        AND st.id_type = '33'
                        LIMIT 0 , 830

                        Résultat >> Aucun filtrage tous est liste

                        SELECT *
                        FROM jos_f_evenement
                        RIGHT JOIN jos_f_soustype AS st WHERE id_soustype = st.id
                        AND st.id_type = '33'
                        LIMIT 0 , 830

                        Résultat >> Aucun filtrage tous est liste avec des null par endroit


                        SELECT *
                        FROM jos_f_evenement, jos_f_soustype st WHERE id_soustype = st.id AND st.id_type = '33'
                        LIMIT 0 , 830

                        Résultat >> Ok le filtrage est fait il n'affiche que les événements qui ont en commun id type 33

                        Par contre quand je test le code dans ma page php il n'y a toujours pas de résultat

                        Code PHP:
                        <?php 
                        require_once(dirname(__FILE__).DS.'helper.php'); 
                        $model = new dernier_evenement2
                        $id_type $params->get('id_type',0); 
                        $db =& JFactory::getDBO(); 
                        $query "SELECT * "
                             
                        "FROM #__f_evenement, jos_f_soustype st"
                             
                        "WHERE id_soustype = st.id".
                             
                        "and st.id_type = ".$id_type." "
                             
                        " LIMIT 0 , 1"
                        //echo $query; 
                        $db->setQuery($query); 
                        $list $db->loadobjectlist(); 
                        var_dump($list); 
                        if (
                        $list) { 
                        foreach (
                        $list as $item) { 
                          
                            
                        $detailssoustype $model->getdetailssoustype($item->id_soustype); 
                            if(
                        $item->image_list
                            
                        $image 'images/formation/type/'.$detailssoustype['typeimage']; 
                            else 
                            
                        $image 'images/formation/type/'.$detailssoustype['typeimage']; 
                            echo 
                        '<br><div class="evenement">'
                           echo 
                        '<div class="groupeventhome">'.$detailssoustype['type'].'</div>'
                            echo 
                        '<a href="index.php?option=com_formation&view=categorie&layout=categorie-event&id='.$id_type.'&Itemid=14"><img height ="180" width ="276" src ="'.$image.'" /></a><div class="evenementimg"><a href="index.php?option=com_formation&view=categorie&layout=categorie-event&id='.$id_type.'&Itemid=14"><img height ="180" width ="276" src ="/images/stories/fond-opacity.png" /></a></div>'
                            echo 
                        '</div>'
                          
                          


                        echo 
                        $id_type
                        ?>
                        Résultat >> NULL 33

                        Et le meme code sans le var_dump et le if

                        Code PHP:
                        <?php 
                        require_once(dirname(__FILE__).DS.'helper.php'); 
                        $model = new dernier_evenement2
                        $id_type $params->get('id_type',0); 
                        $db =& JFactory::getDBO(); 
                        $query "SELECT * "
                             
                        "FROM #__f_evenement, jos_f_soustype st"
                             
                        "WHERE id_soustype = st.id".
                             
                        "and st.id_type = ".$id_type." "
                             
                        " LIMIT 0 , 1"
                        //echo $query; 
                        $db->setQuery($query); 
                        $list $db->loadobjectlist(); 
                        foreach (
                        $list as $item) { 
                          
                            
                        $detailssoustype $model->getdetailssoustype($item->id_soustype); 
                            if(
                        $item->image_list
                            
                        $image 'images/formation/type/'.$detailssoustype['typeimage']; 
                            else 
                            
                        $image 'images/formation/type/'.$detailssoustype['typeimage']; 
                            echo 
                        '<br><div class="evenement">'
                           echo 
                        '<div class="groupeventhome">'.$detailssoustype['type'].'</div>'
                            echo 
                        '<a href="index.php?option=com_formation&view=categorie&layout=categorie-event&id='.$id_type.'&Itemid=14"><img height ="180" width ="276" src ="'.$image.'" /></a><div class="evenementimg"><a href="index.php?option=com_formation&view=categorie&layout=categorie-event&id='.$id_type.'&Itemid=14"><img height ="180" width ="276" src ="/images/stories/fond-opacity.png" /></a></div>'
                            echo 
                        '</div>'
                          
                          

                        echo 
                        $id_type
                        ?>
                        Résultat >> Message d'erreur suivant

                        Warning: Invalid argument supplied for foreach() in /www/modules/mod_derniere_evnement2/mod_derniere_evnement2.php on line 14
                        33

                        Je ne comprend pas pourquoi cela fonctionne sur php my admin mais pas dans ma page php.

                        SI quelqu'un à une piste !!

                        Commentaire


                        • #13
                          Re : loadobjectlist + php

                          c'est peut etre ton LIMIT qui pose souci, tu n'as pas les memes valeurs entre tes deux tests
                          Vive Joomla! http://www.joomlack.fr Tutoriels et extensions pour Joomla!. Livre création de template Joomla de plus de 200 pages.
                          http://www.template-creator.com Outil de création de templates
                          Module Maximenu CK - Megamenu, multicolonnes, chargement de module, description de lien, deroulement animé - Compatible Virtuemart, Hikashop

                          Commentaire


                          • #14
                            Re: loadobjectlist + php

                            Non ce n'est pas un probleme de limit si je change le limit cela ne change rien, j'ai toujours un null qui apparait

                            Je ne comprend vraiment pourquoi cela diffère entre phpmyadmin et ma page php

                            Commentaire


                            • #15
                              Re : Re: loadobjectlist + php

                              Code PHP:
                              $query "SELECT * "
                                   
                              "FROM #__f_evenement, jos_f_soustype AS st "
                                   
                              "WHERE id_soustype = st.id ".
                                   
                              "and st.id_type = ".$id_type." "
                                   
                              " LIMIT 0 , 1"
                              Compares mon code et le tien, il manque des espaces dans la requête, qui donc devient, avec ton code sans les espaces:
                              Code:
                              SELECT * FROM #__f_evenement, jos_f_soustype AS stWHERE id_soustype = st.idand st.id_type = 33 LIMIT 0 , 1
                              ce qui du point de vue du serveur MySQL est une magnifique erreur de syntaxe
                              Pas de demande de support par MP.
                              S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X