Question de requête qui fonctionne sur phpMyAdmin mais pas dans Joomla! 4

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

  • [RÉGLÉ] Question de requête qui fonctionne sur phpMyAdmin mais pas dans Joomla! 4

    Bonjour,

    Sur un site J3, j'utilise un module "random article" qui a été abandonné (et n'a pas d'équivalent), mais qui ne pose aucun problème d'installation et fonctionnement côté administration. Mais dans le site lui-même, il ne renvoie aucune donnée.
    Le principe est d"afficher un article de manière aléatoire provenant d'une ou de plusieurs catégories.
    Le code de la requête, en fonction des paramètres définis donne ceci ('Joomla' as type est utilisé plus loin dans le code) :
    Code:
    SELECT * , 'Joomla' as type FROM #__content WHERE catid in ( SELECT id FROM #__categories WHERE (parent_id in (7,11) OR id in (7,11)) )AND state = '1' AND (publish_up <= '2021-10-11 18:08:58' OR publish_up = '0000-00-00 00:00:00') AND (publish_down >= '2021-10-11 18:08:58' OR publish_down = '0000-00-00 00:00:00') ORDER BY rand() LIMIT 1
    Dans la suite du code
    Code:
     $db = Factory::getDBO();
    $db->setQuery($query);
    $rows = $db->loadObjectList();
    $rows revient vide.
    Pourtant, si je définis le bon préfixe de tables et que je teste cette requête dans phpMyAdmin, j'ai bien en retour une ligne correspondant à un article, de manière aléatoire comme voulu.

    Qu'est-ce qui pourrait expliquer cette différence ?
    Merci de votre aide !
    Robert
    Dernière édition par RobertG à 16/10/2021, 10h18
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

  • #2
    Ce n'est probablement pas ça mais perso j'éviterais le mot "type" qui pourrait être un mot réservé.
    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
      Merci Christophe.

      J'ai testé en premier de le supprimer parce que je ne savais pas à quoi ça servait, mais la requête ne renvoyait rien non plus sur le site.
      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

      Commentaire


      • #4
        Bonjour,

        Je viens de refaire un essai en remplaçant "type" par "ftype" et rien ne change.
        J'ai essayé d'autres méthodes de récupération des données à partir de la requête, mais chaque fois, $rows est vide malgré une requête correcte.
        La seule chose qui pourrait expliquer ça serait le non remplacement de "#__" par le bon préfixe, mais pourquoi ?
        "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
        MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

        Commentaire


        • #5
          Robert,
          T'as essayé en ajoutant
          Code:
          $query = $db->getQuery(true);
          pour créer un nouvel objet.
          ??
          Code:
          $db = Factory::getDBO();
          [COLOR=#c0392b]$query = $db->getQuery(true);
          
          >>> Puis placer/construire ta [/COLOR][COLOR=#c0392b]requête dans ta variable $query[/COLOR]
          
          $db->setQuery($query);
          $rows = $db->loadObjectList();
          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


          • #6
            Merci de ta réponse,

            Oui, j'ai essayé, et ça fonctionne actuellement sans problème sur un site en 3.10 tel quel.
            Dans le code d'origine, $query est construit avant l'appel à getDBO.
            Je viens de réessayer dans l'ordre que tu conseilles, mais je récupère toujours du vide.
            Je vais tester sur un autre serveur.

            Je viens de tester en local sur Wampserver : même résultat.
            Ce qui est curieux, c'est qu'un autre module, qui a l'inconvénient de ne pas savoir chercher dans les sous-catégories, renvoie bien un ou plusieurs articles selon le paramétrage, avec la même syntaxe !
            Dernière édition par RobertG à 15/10/2021, 16h17
            "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
            MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

            Commentaire


            • #7
              Bon, d'une part il n'y a plus de dates en 0000-00-00 mais le champ est "NULL' sous Joomla! 4.
              D'autre part, si je supprime la partie "publish_down" la requête renvoie bien des données.
              La partie de code en cause est .
              Code:
              "AND (publish_down > '".date('Y-m-d H:i:s')."' OR publish_down = null) "
              Dans ma base ce champ est toujours NULL car je n'ai jamais défini de date de fin de publication.

              Il faut donc comprendre pourquoi on ne peut pas, sous Joomla! 4, interdire l'affichage d'articles dont la date de fin de publication est dépassée.

              Et pour le moment, même avec un résultat, je n'ai pas d'affichage, donc plus loin dans le code ce tableau n'est plus interprété.
              En fait, je récupère bien toutes les doonnées de la ligne sélectionnée, dans un tableau "$article", mais "$article->id" est vide alors qu'il y a bien la valeur dans le tableau !
              "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
              MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

              Commentaire


              • #8
                Bonjour,

                Bien, $id = $article->id; doit être remplacé par $id = $article['id']; pour que la valeur du champ soit récupérée.
                Il me reste à trouver par quoi remplacer cette ligne qui déclenche une erreur 0 :
                Code:
                require_once(JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php');
                Le site de doc de joomla.org me renvoyant actuellement une erreur de request timeout, je suis bloqué dans mes recherches.

                Merci à qui pourra m'aider !
                "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                Commentaire


                • #9
                  J'ai fini par m'en sortir ! Tenace, hein ?

                  En cherchant des exemples j'ai pu arriver au bout de ce dont j'ai personnellement besoin.
                  Il me reste à essayer de rendre le code un peu plus propre. Il gérait aussi les articles K2, mais je vais probablement enlever tout ce qui le concerne, dans la mesure où je ne l'utilise jamais.

                  Restera la question de "publish_down" dont je ne comprends pas la raison de l'échec de résultat de requête (même dans phpMyAdmin).

                  Pour résumer, ce module permet de choisir une ou plusieurs catégories d'articles, avec ou sans leurs sous-catégories, avec ou sans date de publication en cours, et d'afficher un ou plusieurs articles.
                  "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                  MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                  Commentaire


                  • #10
                    Envoyé par RobertG Voir le message
                    J'ai fini par m'en sortir ! Tenace, hein ?
                    Bien joué !

                    Envoyé par RobertG Voir le message
                    Pour résumer, ce module permet de choisir une ou plusieurs catégories d'articles, avec ou sans leurs sous-catégories, avec ou sans date de publication en cours, et d'afficher un ou plusieurs articles.
                    Ce module pourrait bien en intéresser plus d'un, à commencer par moi

                    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


                    • #11
                      Merci !

                      Pas codeur, mais tenace... Hélas, ça ne suffit pas toujours !
                      Contacte-moi en MP ou via un de mes sites si ce module t'intéresse, mais ache que je ne garantis pas son fonctionnement ni sa sécurité.
                      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                      Commentaire

                      Annonce

                      Réduire
                      Aucune annonce pour le moment.

                      Partenaire de l'association

                      Réduire

                      Hébergeur Web PlanetHoster
                      Travaille ...
                      X