Le fonctionnement JS a-t-il changé de PHP 8.1 à 8.2 ?

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

  • Le fonctionnement JS a-t-il changé de PHP 8.1 à 8.2 ?

    Bonjour,

    Ce matin, bloqué par une panne Internet et mobile, j'ai repris en local des modifications sur une extension et pu corriger les possibilités d'ajout, modification et suppression de données depuis le frontal du site, où jusqu'ici le clic sur les boutons ne déclenchait strictement rien, pas même une erreur dans la console.

    Lorsque j'ai pu retrouver un accès au site distant sur lequel je travaille habituellement pour ce projet, la reproduction des corrections n'a eu aucun effet.
    J'ai fini par me rendre compte qu'en local j'avais utilisé PHP 8.1 alors qu'en distant j'avais la version 8.3
    En passant en 8.2 en local, les boutons ne fonctionnent plus.
    Mais plus bizarre encore, en revenant à la version 8.1 sur le site distant, les boutons ne fonctionnent pas, toujours sans aucune erreur affichée.

    Le débogage est activé et le rapport d'erreurs est fixé au maximum sur les deux versions, et malgré ça, je n'arrive pas à intercepter la cause de ces anomalies.
    Comment faire pour comprendre cette cause et la corriger ?
    Merci d'avance !
    "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
    Pour répondre strictement au sujet utilisé pour ton post : JS est une chose et PHP une autre ; la màj de php n'a aucune influence
    sur JS et donc, là réponse à ton sujet est "non".

    Si j'ai bien compris, en local php 8.1 OK mais 8.2 KO.

    Ce serait hautement improbable mais peut-être un très vieux code legacy php ne fonctionne plus. Improbable car les fonctionnalités dépréciées le sont dans une version majeure et non mineure.

    La source de l'erreur est quelque part mais pas au niveau des versions je pense.

    Note : ton code JS appelle du php, as-tu essayé d'y accéder en direct (sans passer par js)?
    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
      Tiens : puisque tu changes de version de php, es-tu certain que les modules que tu aurais chargé en php 8.1 sont également chargé en 8.2 ?
      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


      • #4
        Merci Christophe,

        Il y a cette double question : pourquoi en version de PHP 8.1.29 et MariaDB 10.6.19 le comportement est différent en local et en ligne, et pourquoi en local en 8.2 ça de fonctionne plus. Trouver si des différences de paramétrage PHP sont en cause risque de ne pas être simple.
        En ce qui concerne les adresses, en local la page de formulaire s'affiche avec
        component/joaktree/?view=repository&layout=form_repository&ap pId=6&repoId=new
        Sur le site distant, l'adresse reste à
        component/joaktree/?view=repositories&appId=6
        En fait la page se rafraîchit, et je ne sais plus si c'est dans ce cas ou dans un autre formulaire que j'avais remarqué qu'une instruction click() dans un fichier JS provoquait ce retour
        Et si je saisis la première dans la barre d'adresses, le formulaire s'affiche.

        Pour résumer : la deuxième adresse correspond à celle qu'on voit au survol des boutons, la première à celle qui est générée pour l'affichage du formulaire et qui s'affiche alors dans la barre d'adresse.

        Je n'ai pas trouvé de différence entre les extensions PHP des version 8.1 et 8.2 en local

        PS : j'ai comparé l'export des informations système en 8.1 et 8.2 du serveur local, sans trouver d'explication.
        Par ailleurs, le site d'origine sur le serveur distant, en J3 et PHP 8.2 ouvre bien les formulaires en création et modification !
        Dernière édition par RobertG à 10/09/2024, 15h59
        "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
          Désolé d'être terre à terre : en local, php 8.1 est OK, php 8.3 est KO donc si tu accèdes à une URL php 8.1,cela fonctionne. Strictement la même URL en local et en 8.2,cela ne fonctionne pas.

          ​​​​​​Ceci posé : qu'est-ce que tu reçois en 8.2 ? Une erreur ? Une page blanche ?

          Prends cet angle d'attaque et vois le log des erreurs apache, qu'y retrouves-tu ?

          Dans une approche empirique, écris des "echo 'bla bla' ;" dans ton code php si cela peut t'aider (en dernier recours).

          Un développeur utiliserait Xdebug mais c'est bien trop complexe à mettre en œuvre si tu n'es pas dans le code toute la journée.
          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


          • #6
            Aucune erreur, la page se rafraîchit et réaffiche la liste.
            Et dans la page de logs d'erreurs Apache en local et en 8.2, pas la moindre info correspondant à la tentative de création ou modification d'un formulaire.

            En local Xdebug est actif mais il n'affiche rien dans ces cas, et rien ne me permet de le forcer avec un var_dump, faute de trouver où l'ajouter.

            En fait, j'ai l'impression que le problème survient dans une fonction JS de Joomla!, JoomlasubmitForm dans core.js à ce niveau :
            Code:
                // Submit the form.
                // Create the input type="submit"
                const button = document.createElement('input');
                button.classList.add('hidden');
                button.type = 'submit';
            
                // Append it and click it
                newForm.appendChild(button).click();
            console.log('append');
                // If "submit" was prevented, make sure we don't get a build up of buttons
                newForm.removeChild(button);
            ​
            En 8.1 comme en 8.2, j'ai bien "append" dans la console, en local, mais quelque chose intervient pour effacer le formulaire à peine appelé (que je ne vois pas passer d'ailleurs, juste une page blanche comme lorsque je recharge une page)

            C'est vraiment curieux.
            "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
              Site distant cloné chez PlanetHoster avec PHP 8.1, la création, la modification et la suppression ne fonctionnent pas,
              "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
                Alors pour résumer, au cas où quelqu'un aurait une idée :

                Tous les sites en version supérieure à J3 utilisent la même version de Joaktree. Tous les sites en version 5 sont des migrations initiales d'un site J3

                La version J3 utilise MooTools. Le débogage est activé et le rapport d'erreurs au maximum. Aucune erreur PHP ne s'affiche sur les sites et rien dans la console du navigateur, ce qui m'empêche de trouver ce qui provoque cette erreur.

                En 8.1 :
                • serveur local : les formulaires s'affichent sur un site 5.2.0 beta 2
                • serveur de tests : les formulaires ne s'affichent pas sur un site 5.2.0 beta 2
                • serveur de tests : les formulaires ne s'affichent pas sur un site 4.8 neuf
                • serveur PH : les formulaires ne s'affichent pas sur un site 5.2.0 beta 2 clone du site du serveur de test
                • serveur PH : les formulaires ne s'affichent pas sur un site 5.2.0 beta 2 clone du site du serveur local
                En 8.2 :
                • serveur de test : les formulaires s'affichent sur un site J3
                • serveur local : les formulaires ne s'affichent pas sur le site 5.2.0 beta 2
                En dehors de ça (et d'autres erreurs de fonctionnement dans l'administration), et avec l'obligation d'utiliser les cookies spécifiques, la version actuelle de Joaktree fonctionne de la même manière de PHP 8.1 à 8.3
                "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
                  Je confirme : dès la version 8.2.0 en local, ce code (lignes 386-387 du fichier media/system/js/core.js) rafraîchit la page au lieu d'afficher le formulaire
                  Code:
                      // Append it and click it
                      newForm.appendChild(button).click();
                  ​
                  Reste quand même la question du même comportement en PHP 8.1 sur les serveurs distants...
                  "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
                    mmmh, je suis vraiment pas expert en JS, mais j'avais en tête que
                    * le PHP est exécuté sur ton serveur
                    * mais le JS est exécuté sur l'onglet du navigateur
                    donc je ne vois pas bien le lien qu'il y a entre changer PHP et un impact sur le JS (sauf si tu utilises Node.JS)
                    Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

                    Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

                    Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

                    Commentaire


                    • #11
                      Moi non plus, je ne vois pas le rapport, hélas... et en comparant les infos passées à cette ligne en 8.1 et 8.2, je n'ai pas vu de différence.
                      La seule différence entre le local est le distant est qu'en local xdebug est activé en mode développement, et inactif en ligne.

                      PS: je pense que le problème est similaire, au niveau de la fonction Joomla.submitform de core.js, dans l'administration lors de la création d'une nouvelle source de données : le formulaire s'affiche bien, puis la fonction d'enregistrement de celui-ci fait appel à Joomla.submitform et revient à la liste des sources sans rien enregistrer. En revanche si je modifie une source existante, il n'y a pas d'erreur (alors qu'en frontal, la modification ne fonctionne pas non plus).
                      Dernière édition par RobertG à 11/09/2024, 11h02
                      "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


                      • #12
                        Je n'arrive toujours pas à comprendre pourquoi le site local affiche les formulaires en 8.1 et pas les sites distants... et pas plus pourquoi ça ne s'affiche pas en 8.2 en local. J'ai multiplié les console.log et var_dump selon les fichiers, mais curieusement, l'appel à Joomla.listItemTask pour afficher un formulaire semble ne pas passer fans cette fonction JS même en 8.1 en local en m'affichant dans la console un message défini au début de la fonction JS, à moins que quelque chose vide ensuite cette console...

                        J'ai corrigé quelques erreurs de code que PHP laissait passer en 8.1 mais apparemment pas en 8.2, comme par exemple un "$msg" vide dont je ne me souviens pas s'il était bloquant en tant que null ou undefined au niveau de lignes de ce type :
                        Code:
                        $this->setRedirect(Route::_($link), $msg);
                        J'ai tenté :
                        Code:
                        $msg = $msg ? '' ;
                        Est-ce la bonne syntaxe ?

                        ET je n'ai toujours pas compris comment utiliser xdebug !
                        "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


                        • #13
                          Je le disais, Xdebug c'est pas simple... Il faudrait utiliser un éditeur (IDE) qui couplé à Xdebug permettrait de faire du step by step. Terriblement utile mais lourd à mettre en place.

                          console.log c'est pour javascript et puisque tu sembles pointer php, cela n'aidera pas.

                          Si une erreur survient en php, le log des erreurs doit la montrer. Je suis surpris que tu ne vois rien.

                          Je te suggére d'aller sur le forum international où tu trouveras des développeurs joomla, il y en a très peu ici.
                          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


                          • #14
                            Selon les cas, j'utilise console.log ou var_dump, le but étant d'essayer de savoir par où passe le code, mais en ce moment, je n'arrive à rien.

                            Dans les logs je ne trouve rien. En fait, ça devrait être des deprecated ou autre, mais probablement à des endroits du code n'empêchant pas la suite, j'imagine, et ne s'affichant pas comme les var_dump s'il y a ensuite une erreur fatale.
                            "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


                            • #15
                              Comme tu le sais je ne code pas dans Joomla. Je pense que tu pourrais tirer profit de JLog (écrire dans le log généré par Joomla) ainsi erreur 500 ou pas tu auras bien ton écriture.
                              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

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X