Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de communication ajax php pour POST

Sujet résolu
    13 juin 2021 à 15:56:13

    Bonjour, je suis en train de faire un système qui récupère des informations en js et qui envoie ces mêmes informations par le biet d'une requête ajax (en POST). Mais quand j'envoie la requête à ma page php il n'y a rien dans le POST.

    Quelqu'un sait-il comment faire ?

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      14 juin 2021 à 6:50:35

      Bonjour,

      C'est une pratique très courante voire basique. Il y a un tuto sur ce site pour cette méthode.

      Sans code, c'est de la divination pour t'aider.

      A+

      • Partager sur Facebook
      • Partager sur Twitter
        14 juin 2021 à 18:05:01

        J'ai juste ce code: 
        <script type="text/JavaScript"> 
            
                var city;
                var state;
                fetch('http://ip-api.com/json/86.194.8.204')
                .then(function(response){
                    return response.json()
                }).then(function(data){
                    city = data.city
                    state = data.country
                })
        
        
                var xhr = new XMLHttpRequest()
                xhr.open("POST", "config/functions.php", true);
                xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");                  
                xhr.send(`city=${city}&state=${state}`);/*city=${dataa.city}&*/ 
            
            </script> 
            if(!empty($_POST)){
        
                extract($_POST);
                $city = strip_tags($city);
                $state = strip_tags($state);
        
                require("connect.php");
                $request = $bdd->prepare('INSERT INTO history_users (date, ip, platform, state, city, navigator, device, url) VALUES (NOW(), ?, ?, ?, ?, ?, ?, ?)'); #insere en table 
                $request->execute(array($ip_user, $browser->platform, $city, $state, $browser->browser, $browser->device_type, $url));
        
        
            }else{
        
                echo("not ok");
            }


        • Partager sur Facebook
        • Partager sur Twitter
          14 juin 2021 à 18:24:57

          Les variables $_POST['city']/$_POST['state'] existent mais sont vides ?

          fetch est asynchrone donc il n'est pas impossible que tu exécutes la requête ajax (qui est aussi asynchrone d'ailleurs avec le true renseigné en open) avant d'avoir réalisé le fetch.

          PS : pourquoi c'est le client qui t'envoie des informations sur l'IP ?

          -
          Edité par julp 14 juin 2021 à 18:25:46

          • Partager sur Facebook
          • Partager sur Twitter
            14 juin 2021 à 18:52:00

            Non non j'ai vérifié en js les variables sont bien récupéré avant l'ajax. Et bah là c'est un test mais après je remplacerais l'ip dans le lien par celui du client.
            • Partager sur Facebook
            • Partager sur Twitter
              14 juin 2021 à 19:11:29

              Ca ne prouve pas forcément quoi que ce soit si différentes parties de ton code sont exécutées en asynchrone.

              Toujours est-il que ça ne répond pas à ma question : que vaut $_POST (var_dump) côté serveur ?

              -
              Edité par julp 14 juin 2021 à 19:12:23

              • Partager sur Facebook
              • Partager sur Twitter
                14 juin 2021 à 19:22:56

                julp a écrit:

                Ca ne prouve pas forcément quoi que ce soit si différentes parties de ton code sont exécutées en asynchrone.

                Toujours est-il que ça ne répond pas à ma question : que vaut $_POST (var_dump) côté serveur ?

                -
                Edité par julp il y a 7 minutes


                Il n'y a pas de $_POST (var_dump) ??? Et le true dans la requête js signifie que cela se fait de façon asynchrone.
                • Partager sur Facebook
                • Partager sur Twitter
                  14 juin 2021 à 19:26:23

                  > Il n'y a pas de $_POST (var_dump) ???

                  Fais/ajoute-en un (var_dump($_POST);) et donne nous en le résultat.

                  -
                  Edité par julp 14 juin 2021 à 19:27:11

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 juin 2021 à 19:35:39


                    julp a écrit:

                    > Il n'y a pas de $_POST (var_dump) ???

                    Fais/ajoute-en un (var_dump($_POST);) et donne nous en le résultat.

                    -
                    Edité par julp il y a 6 minutes

                    Le retour:
                    array(0) { }
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 juin 2021 à 21:20:49

                      C'est ce que tu as obtenu en te rendant directement sur config/functions.php (d'ailleurs avec ce naming, ça ne devrait même pas être accessible en http) donc une requête en GET ? Ce n'est pas le résultat de la requête ajax ? (dont il faudrait récupérer le résultat via la console du navigateur, onglet réseau)

                      EDIT : c'est bien ce que je pensais, moi, j'obtiens :

                      > array(2) { ["city"]=> string(9) "undefined" ["state"]=> string(9) "undefined" }

                      Les clés existent mais les valeurs sont undefined côté JS (et mal encodés parce que ce n'est pas une interpolation que l'on devrait trouver non plus mais bref ...) donc le problème est bien lié au fait que le fetch soit asynchrone donc n'a pas encore eu lieu/n'est pas encore terminé, tes variables en sont toujours undefined/pas encore affectées avec les valeurs voulues mais tu les utilises quand même et déjà pour ta requête ajax.

                      La solution simple et évidente serait de déplacer la requête ajax dans la promesse (ie dans la callback du dernier then).

                      Du coup, c'est un problème Javascript, pas PHP => à déplacer.

                      -
                      Edité par julp 14 juin 2021 à 21:41:48

                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 juin 2021 à 22:07:59

                        d'accord je vais voir de ce côté merci beaucoup en tout cas

                        -
                        Edité par MaxMlr 14 juin 2021 à 22:11:51

                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 juin 2021 à 22:12:14

                          Le script PHP que tu as montré n'est pas config/functions.php ?

                          Ce ne sont pas les vrais codes ?

                          Tu as vérifié que la requête était bien en POST et la réponse via la console du navigateur (F12) > onglet réseau ?

                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 juin 2021 à 6:54:42

                            Oui oui j'ai tout vérifié et le problème vient en faite des promises js du fetch désolé pour le dérangement
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Problème de communication ajax php pour POST

                            × 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