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 et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 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)
    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)
    Mes logiciels OpenSource : https://www.avonture.be

    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 et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 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 et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 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();
          $query = $db->getQuery(true);
          
          >>> Puis placer/construire ta requête dans ta variable $query
          
          $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é.
          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 et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 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 et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 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 et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 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 et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 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é.
                    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 et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 et OVH

                      Commentaire

                      Annonce

                      Réduire
                      1 sur 2 < >

                      C'est [Réglé] et on n'en parle plus ?

                      A quoi ça sert ?
                      La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

                      Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

                      Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
                      Comment ajouter la mention [Réglé] à votre discussion ?
                      1 - Aller sur votre discussion et éditer votre premier message :


                      2 - Cliquer sur la liste déroulante Préfixe.

                      3 - Choisir le préfixe [Réglé].


                      4 - Et voilà… votre discussion est désormais identifiée comme réglée.

                      2 sur 2 < >

                      Assistance au forum - Outil de publication d'infos de votre site

                      Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

                      Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

                      Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

                      UTILISER À VOS PROPRES RISQUES :
                      L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

                      Problèmes connus :
                      FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

                      Installation :

                      1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

                      Archive zip : https://github.com/AFUJ/FPA/zipball/master

                      2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

                      3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

                      4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

                      5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

                      6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
                      et remplacer www. votresite .com par votre nom de domaine


                      Exemples:
                      Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
                      Télécharger le script fpa-fr.php dans: /public_html/
                      Pour executer le script: http://www..com/fpa-fr.php

                      Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
                      Télécharger le script fpa-fr.php dans: /public_html/cms/
                      Pour executer le script: http://www..com/cms/fpa-fr.php

                      En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

                      Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
                      Voir plus
                      Voir moins

                      Partenaire de l'association

                      Réduire

                      Hébergeur Web PlanetHoster
                      Travaille ...
                      X