Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ajax: probleme sur le success retour

retour\n\n\n\n\n\n\n\n\n\...

    3 avril 2020 à 15:52:18

    Bonjour Tout le monde,

    J'ai un problème assez étrange sur le retour dune requête Ajax. Requête assez simple qui enregistre un utilisateur dans une base de donnée. Tout s’exécute parfaitement, mais après le traitement php il y a une chaine de caractère qui se met après la valeur. :o ca sera plus clair avec le code lol...

    La fonction Ajax

    function submitForm(){
       var name = $("#name").val();
       var prenom = $("#prenom").val();
       var mail = $("#email").val();
       var pass = $("#password").val();
    
       $.ajax({
         type: "POST",
         url:"assets/register.php",
         data:
           {
             myFunction:'doRegister',
             myParams:{
                 name: name,
                 prenom: prenom,
                 mail: mail,
                 pass: pass
             }
           },
           success : function(retour){
             alert(retour);
    
             /*
             if (retour == "mail") {
               $('#msg-erreur').fadeIn().text("Cet e-mail est déjà utilisé");
             }
             else if (retour == "false"){
               $('#msg-erreur').fadeIn().text("Oops! Nous avons rencontré un problème, veuillez réessayer ultérieurement");
             }
             else{
               document.location.href="page-confirm-register.php?mail="+mail;
             }
             */
           }
       });
     }

    Le traitement php

    <?php
    include('../connexion.php');
    
    if (isset($_REQUEST['myFunction']) && $_REQUEST['myFunction'] != '')
    {
        $_REQUEST['myFunction']($_REQUEST);
    }
     
    function doRegister($post) {
        $bdd = $GLOBALS["bdd"];
    
        $nom = htmlspecialchars(stripcslashes(trim($post['myParams']['name'])));
        $prenom = htmlspecialchars(stripcslashes(trim($post['myParams']['prenom'])));
        $mail = htmlspecialchars(stripcslashes(trim($post['myParams']['mail'])));
        $pass = htmlspecialchars(stripcslashes(trim(sha1($post['myParams']['pass']))));
    
        $req_verif_mail = $bdd->query('SELECT mail FROM utilisateurs WHERE mail = "'.$mail.'"');
        $verif_mail = $req_verif_mail->rowCount();
    
        if ($verif_mail > 0) {
            $retour = 'mail';
        }
        else{
            $req_ajout_utilisateur = $bdd->prepare('INSERT INTO utilisateurs(inscription, nom, prenom, mail, pass) VALUES(NOW(), :nom, :prenom, :mail, :pass)');
    
            $req_ajout_utilisateur->execute(array(
                'nom' => $nom,
                'prenom' => $prenom,
                'mail' => $mail,
                'pass' => $pass
            ));
    
            if ($req_ajout_utilisateur) {
                $retour = 'success';
            }
            else{
                $retour = 'false';
            }
        }
        echo $retour;
    }
    ?>
    

    Donc tout s’exécute, l'enregistrement dans la base se fait bien et le problème est sur le "echo $retour;"

    Ça me récupère bien la bonne valeur, "mail" ou "success" mais chose étrange ça viens me coller ça juste après: \n\n\n\n\n\n\n\n\n\

    Comme je n'arrivai pas à récupérer la valeur echo j'ai mis un alert, et voilà ça que j'ai dans la console

    Et la fenêtre de l'alerte ressemble à ça



    On voit que ça me récupère la bonne valeur au niveau de la requête, mais on dirait que ça insère tout un tas de retour à la ligne... Je suis incapable de voir d'où ça vient et je n'ai rien trouver sur le sujet.

    Et plus incompréhensible encore c'est que j'ai exactement la même structure sur une autre partie du site et que ça ne le fait pas.

    Voila voila, si quelqu’un à une idée, moi je cale, j'ai tout retourné dans tous les sens et ya toujours ce truc.autant j'ai oublié une virgule ou une connerie du genre :euh:

    Merci pour votre aide !

    Micka

    • Partager sur Facebook
    • Partager sur Twitter
      3 avril 2020 à 19:05:20

      Bonjour.

      Déjà, si tu veux savoir si l'insertion s'est bien effectué dans la base de données, il te faut stocker le retour de la méthode execute, et non tester la variable sur laquelle est utilisée la méthode.

      La fonction htmlspecialchars n'est à utiliser que pour l'affichage de données.

      Il ne faut pas utiliser la méthode rowCount sur une requête pour l'instruction SELECT.

      Il ne faut plus utiliser la fonction sha1 pour les mots de passe, plutôt utiliser la fonction password_hash.

      • Partager sur Facebook
      • Partager sur Twitter

      Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

        3 avril 2020 à 20:20:23

        Salut,

        Au niveau de l'insertion dans la base en tout cas ça me remplis bien la table.

        Je vais déjà commencer par apporter ces corrections, en plus c'est un site destiné au public alors c'est mieux si ya pas des 'horreurs' lol, j'ai pas un gros niveaux et je me met tout juste à jquery et ajax.

        Merci pour ces premières indications, et d’ailleurs ya peut être une première piste, c'est vrai que dans mon autre fonction qui fonctionne, je n'ai pas les htlmspecialchars, je récupère simplement la valeur du champs, ça vient peut être de là.

        Et du coup, petite question... étant donné que toute la vérif du formulaire ce fait avant d'être envoyé à php, est ce que je peut simplement récupérer ma variable ? ou ça craint au niveau sécurité pour les injections et je sais pas trop quoi ?

        Je reviens faire un retour après ce petit "nettoyage" de code  :)

        Thx !


        • Partager sur Facebook
        • Partager sur Twitter
          3 avril 2020 à 20:32:46

          MickaelCabaud a écrit:

          Et du coup, petite question... étant donné que toute la vérif du formulaire ce fait avant d'être envoyé à php, est ce que je peut simplement récupérer ma variable ? ou ça craint au niveau sécurité pour les injections et je sais pas trop quoi ?

          Tu dois également faire les vérifications/validations niveau serveur, soit en PHP dans le cas présent, car rien n'empêche par exemple l'utilisateur de supprimer la pré-validation niveau HTML.
          • Partager sur Facebook
          • Partager sur Twitter

          Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

            3 avril 2020 à 23:44:13

            voilà ce que ça donne

            <?php
            include('../connexion.php');
            
            if (isset($_REQUEST['myFunction']) && $_REQUEST['myFunction'] != '')
            {
                $_REQUEST['myFunction']($_REQUEST);
            }
             
            function doRegister($post) {
                $bdd = $GLOBALS["bdd"];
            
                $nom = stripcslashes(trim($post['myParams']['name']));
                $prenom = stripcslashes(trim($post['myParams']['prenom']));
                $mail = stripcslashes(trim($post['myParams']['mail']));
                $pass = password_hash($post['myParams']['pass'], PASSWORD_ARGON2I);
            
                $req_count = $bdd->query('SELECT COUNT(mail) AS m FROM utilisateurs WHERE mail="'.$mail.'"');
                $count = $req_count->fetch();
            
                if ($count['m'] > 0) {
                    $retour = 'mail';
                }
                else{
                    $req_ajout_utilisateur = $bdd->prepare('INSERT INTO utilisateurs(inscription, nom, prenom, mail, pass) VALUES(NOW(), :nom, :prenom, :mail, :pass)');
                    $req_ajout_utilisateur->execute(array(
                        'nom' => $nom,
                        'prenom' => $prenom,
                        'mail' => $mail,
                        'pass' => $pass
                    ));
            
                    $retour = print_r($req_ajout_utilisateur);
                    
                }
                echo $retour;
            }
            ?>

            Par contre je ne suis pas vraiment sur pour le print_r, voila ce que àa met dans l'alert :


            PDOStatement Object
            (
                [queryString] => INSERT INTO utilisateurs(inscription, nom, prenom, mail, pass) VALUES(NOW(), :nom, :prenom, :mail, :pass)
            )
            1

            le problème est toujours là  \n\n\n\....

            Le "1" après la parenthèse c'est normal ?

            • Partager sur Facebook
            • Partager sur Twitter
              3 avril 2020 à 23:55:55

              Je t'ai déjà dit de stocker le retour de la méthode execute dans une variable et non de tester la variable sur laquelle est utilisée la méthode execute, comme tu peux le voir, c'est simplement le statement que tu as avec la variable sur laquelle est utilisée la méthode execute, étant donné que ça fait référence à la requête SQL elle même et non à son exécution.

              MickaelCabaud a écrit:

              Le "1" après la parenthèse c'est normal ?

              Cela correspond à TRUE que retourne la fonction print_r et non par rapport à l'argument qui lui est passé, ça n'a donc rien à voir avec la variable req_ajout_utilisateur.
              • Partager sur Facebook
              • Partager sur Twitter

              Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                4 avril 2020 à 13:20:00

                Bon... tu va peut être me prendre pour un teubé lol, ça paraît  pourtant facile et évident.... mais c'est assez flou pour moi et ça fait des heures que je tourne en rond la dessus... de ce que je comprend il faudrait que j'arrive à isoler seulement le execute(), le mettre dans une variable pour vérifier s'il s’exécute correctement. J'ai fait plein de recherches mais j'arrive pas à trouver un truc clair sur comment récupérer le retour d'une méthode d'exécution...

                La finalité de ça c'est pour quoi ? juste me dire si la requête s'exécute et enregistre les données dans la table ?  ça n'a pas l'air d'être le problème non ? actuellement les données sont bien enregistrées dans la base, et ensuite je redirige et je me connecte a l'espace membre avec une session, donc on dirait que tout va bien à ce niveau.

                Lors de mon retour Ajax  et que je teste mon écho $retour j'ai bien le bon message selon le cas. "mail" si je met une adresse existante ou "success" lorsque ça fait l'insertion dans la base. Le problème c'est tous ces n\n\n\n\ après, que ce soit l'un ou l'autre. Or si le problème venait de mon execute,  le retour sur "mail" ne serait pas concerné non ? vu que la requête n'est pas lancée...

                • Partager sur Facebook
                • Partager sur Twitter
                  4 avril 2020 à 14:07:48

                  Bonjour MickaelCabaud,

                  Dans ton fichier PHP, après ta fermeture de php "?>" tu as des sauts de lignes ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Découvrez les Css avec la zonecss.fr
                    4 avril 2020 à 16:12:02

                    lol...ben voilà..problème résolu.. c'était bien ça ! Merci AliasDmc

                    J'aurais pu continuer à me rendre fou longtemps... c'est toujours un truc à la con lol

                    Et merci à Lartak, ça m'a permis d'améliorer mon code !

                    Bon je sais toujours pas récupérer le mode d'exécution, et c'est certaint que c'est important de savoir débugger correctement. Mai je compte bien suivre une bonne formation complète sur php et aussi ajax jquery, je commence tout juste et ça ouvre beaucoup de possibilités, passionnant tout ça !

                    On va profiter du confinement lol, quoique ça ne change pas grand chose personnellement :lol:

                    En tout cas merci à vous deux et faite attention à vous avec cette saloperie qui court....

                    Sujet clos pour ma part

                    :)

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Ajax: probleme sur le success retour

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown