Partage
  • Partager sur Facebook
  • Partager sur Twitter

Transmettre variable JS a une variable PHP

    13 septembre 2021 à 9:53:00

    Bonjour,

    Je suis en train de coder un système de réservation. Je fais apparaitre mes liens en javascript et lorsque j'appuie sur le bouton suivant j'ai une fonction qui permet d'ajouter +7(jours)  a ma variable. Le problème est que cela se fait en javascript et j'aimerai récupérer les données en php.

    (Ne jugez pas mon code svp xD)

    (Et désolé je ne sais pas comment afficher ce code sur fond noir

        let d = 25;
        let m = 08;
        let a = 2021;
    
        const suivant = document.querySelector("#btn-date-suivant");
        const precedent = document.querySelector("#btn-date-precedent");
        const marcillac = document.querySelector("#pills-marcillac-tab");
        
        const dText = document.querySelector("#d-text");
        const lien_marcillac= document.getElementById("lien_marcillac");
       
        const writemarcillac = () => {
            dText.innerHTML = d + "/" + m + "/" + a;
            lien_marcillac.innerHTML = '<div id="lien_1" class="lien_horaire " style="width: 940px; margin: 0 auto;"><a id="lien_id" href="forms.php?id=' + d + '-' + m + "-" + a + ' 15:00 marcillac">15:00</a></div><div id="lien_2" class="lien_horaire " style="width: 940px; margin: 0 auto;"><a href="forms.php?id=' + d + '-' + m + "-" + a + ' 15:15 marcillac">15:15</a></div><div id="lien_3" class="lien_horaire " style="width: 940px; margin: 0 auto;"><a href="forms.php?id=' + d + '-' + m + "-" + a + ' 15:30 marcillac">15:30</a></div><div id="lien_4" class="lien_horaire " style="width: 940px; margin: 0 auto;"><a href="forms.php?id=' + d + '-' + m + "-" + a + ' 15:45 marcillac">15:45</a></div><div id="lien_5" class="lien_horaire " style="width: 940px; margin: 0 auto;"><a href="forms.php?id=' + d + '-' + m + "-" + a + ' 16:00 marcillac">16:00</a></div><div id="lien_6" class="lien_horaire " style="width: 940px; margin: 0 auto;"><a href="forms.php?id=' + d + '-' + m + "-" + a + ' 16:15 marcillac">16:15</a></div><div id="lien_7" class="lien_horaire " style="width: 940px; margin: 0 auto;"><a href="forms.php?id=' + d + '-' + m + "-" + a + ' 16:30 marcillac">16:30</a></div>'
        }
    
        
    
        const write = () => {
            if (marcillac.classList.contains("active")){
                writemarcillac();
            }
        }
    
        const datesuivant = () => {
            d += 7;
            if ( m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12){
                if ( d > 31){
                    m += 1;
                    d -= 31; 
                }
                if ( m > 12){
                    a += 1;
                    m = 1;
                }
            }else if(m == 4 || m == 6 || m == 9 || m == 11){
                if ( d > 30){
                    m += 1;
                    d -= 30; 
                }
                if ( m > 12){
                    a += 1;
                    m = 1;
                }
            }else if(m == 2){
                if ( d > 28){
                    m += 1;
                    d -= 28; 
                }
                if ( m > 12){
                    a += 1;
                    m = 1;
                }
            }
            write();    
        }
    
        const dateprecedent = () => {
            d -= 7;
            if ( m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12){
                if ( d < 1){
                    m -= 1;
                    d += 31;
                }
                if ( m < 1){
                    a -= 1;
                    m = 12;
                }
            }else if(m == 4 || m == 6 || m == 9 || m == 11){
                if ( d < 1){
                    m -= 1;
                    d += 30;
                }
                if ( m < 1){
                    a -= 1;
                    m = 12;
                }
            }else if(m == 2){
                if ( d < 1){
                    m -= 1;
                    d += 28;
                }
                if ( m < 1){
                    a -= 1;
                    m = 12;
                }
            }
            write();
        }
    
        write();
    
    
        suivant.addEventListener("click", datesuivant);
        precedent.addEventListener("click", dateprecedent);
    

    -
    Edité par IbrahimaSupertramp 13 septembre 2021 à 14:02:55

    • Partager sur Facebook
    • Partager sur Twitter
      14 septembre 2021 à 15:11:08

      Yes c'est ce que je me suis dis, du coup j'ai mis a jour mon code ajax

      ajaxPost("localhost/exo/index.php", d,
      
          function (reponse) {
      
              // J'a initialisé let d = 25;
      
              console.log(JSON.stringify(d));
      
          },
      
          true
      
      );

      et le var_dump sur ma page.php retourne un null 

      $d = json_decode($_POST["d"]);
      
            echo'<pre>';var_dump($d);echo'</pre>';
      
            echo $d;

      -
      Edité par IbrahimaSupertramp 14 septembre 2021 à 15:30:52

      • Partager sur Facebook
      • Partager sur Twitter
        14 septembre 2021 à 15:51:00

        tu n'envoies rien en structure json dans ton exemple à moins de le préciser, sauf erreur de ma part. Pourquoi alors faire un json_decode côté php ?

        • Partager sur Facebook
        • Partager sur Twitter
          14 septembre 2021 à 16:27:01

          J'ai crée une fonction générique en fait mais je n'arrivais pas a la coller correctement 

          functionajaxPost(urldatacallbackisJson) {
          varreq = newXMLHttpRequest();
          req.open("POST"url);
          req.onreadystatechange = function () {
          if (this.readyState == XMLHttpRequest.DONE && this.status == 200) {
          callback(req.responseText);
                  }
              };
          if (isJson) {
          // Définit le contenu de la requête comme étant du JSON
          req.setRequestHeader("Content-Type""application/json");
          // Transforme la donnée du format JSON vers le format texte avant l'envoi
          data = JSON.stringify(data);

              }
          re

          -
          Edité par IbrahimaSupertramp 15 septembre 2021 à 9:41:43

          • Partager sur Facebook
          • Partager sur Twitter
            14 septembre 2021 à 18:31:00

            le code dans le lien n'est pas là pour rien:

            var mydata = 55;
            var myname = "syed ali";
            var userdata = {'id':mydata,'name':myname};
                $.ajax({
                        type: "POST",
                        url: "YOUR PHP URL HERE",
                        data:userdata, 
                        success: function(data){
                            console.log(data);
                        }
                        });

            avec ça tu récupères côté PHP $_POST['id'] qui contient la valeur de mydata (55) et $_POST['name'] la valeur de myname ("syed ali")
            Dans POST les données sont envoyées sous forme de clé => valeur; là, si d=25, data vaut ""25"", il n'y a pas de clé associée (voir peut-être la valeur de $_POST pour voir si on récupère quelque chose malgré tout, mais j'en doute, peut-être $_POST["0"])

            • Partager sur Facebook
            • Partager sur Twitter
              15 septembre 2021 à 9:33:42

              j'ai essayé de mettre en œuvre ce que tu as dis :

              let d = 25;
              let m = 08;
              let a = 2021;
              let date = {'jour':d, 'mois':m, 'annee':a};
              Ensuite j'ai modifié ma fonction ajax
              ajaxPost("http://localhost/planning%20amiante%20brut/index.php", date,
              function (reponse) {
              date = JSON.stringify(date)
              console.log(date)
              },
              true
              );
              et j'essaye de récupérer ça en php mais le var_dump affiche toujours null, que ce soit $_post["jour"] ou $_post["date"]ou $_post.

              -
              Edité par IbrahimaSupertramp 15 septembre 2021 à 9:37:26

              • Partager sur Facebook
              • Partager sur Twitter
                15 septembre 2021 à 14:43:20

                Je crois que c'est ta fonction ajaxPost qui n'est pas bonne, tu n'envoies pas ta data dans la requête (à moins que dans ton copier/coller le req.send(data); soit passer à la trappe ?)
                • Partager sur Facebook
                • Partager sur Twitter
                  15 septembre 2021 à 15:29:11

                  Oui je l'ai bien ajouté dans mon code, c'est juste une erreur de copier coller ^^'
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 septembre 2021 à 19:20:49

                    Il faut y aller pas à pas, dans ta fonction, tu as bien data qui est égale à ce que contient date ? (un console.log(data) au début de ta fonction) 
                    Et sinon, ta console t'affiche quoi ?
                    Ton appel à ta fonction se fait sur le clic d'un bouton, ou directement ?

                    est-ce que côté php, tu envoies une réponse ? genre

                    $reponse['success']=" bien reçu!"
                    print json_encode($reponse)


                    Et dernière question, as-tu testé mon code sans passer par ta fonction ? (il faut implanter jquery > https://openclassrooms.com/fr/courses/3504441-introduction-a-jquery/3639651-ajoutez-jquery-a-votre-projet )

                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 septembre 2021 à 10:10:24

                      Alors je comprends pas vraiment dans quelle fonction je dois faire le console.log(data) mais quand je le fais dans la fonction générique cela n'affiche rien et quand je le fais ici :

                      $.ajax({
                          type: "POST",
                          url: "http://localhost/planning%20amiante%20brut/index.php",
                          data:date,
                          success: function(){
                              console.log(data);
                          }
                      });

                      ça me dis que data n'est pas défini. Par contre quand je fais cette fonction :

                      $.ajax({
                          type: "POST",
                          url: "http://localhost/planning%20amiante%20brut/index.php",
                          data:date,
                          success: function(){
                              date = JSON.stringify(date)
                              console.log(date);
                          }
                      });

                      j'ai bien {"jour":25,"mois":8,"annee":2021} qui s'affiche sous forme Json dans ma console.

                      Coté PHP, j'ai mis a jour mon code :

                      $data = json_decode(file_get_contents('php://input'), true);
                      echo $data;
                      var_dump($data);

                      Et ça m'affiche une string vide. :/

                      -
                      Edité par IbrahimaSupertramp 16 septembre 2021 à 10:20:06

                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 septembre 2021 à 10:33:49

                        IbrahimaSupertramp a écrit:

                        Alors je comprends pas vraiment dans quelle fonction je dois faire le console.log(data) nmais quand je le fais dans la fonction générique cela n'affiche rien et quand je le fais ici :

                        $.ajax({
                            type: "POST",
                            url: "http://localhost/planning%20amiante%20brut/index.php",
                            data:date,
                            success: function(){
                                console.log(data);
                            }
                        });

                        ça me dis que data n'est pas défini.

                        Pour l'ajout de console.log(data), c'était dans ta fonction ajaxPOst, celle que tu utilisais pour envoyer tes variables.

                        L'erreur est normal, tu as écrit function() et pas function(data) => ici ça sert à afficher la réponse du serveur (PHP) à la requête POST que tu envoies

                        Par contre quand je fais cette fonction :

                        $.ajax({
                            type: "POST",
                            url: "http://localhost/planning%20amiante%20brut/index.php",
                            data:date,
                            success: function(){
                                date = JSON.stringify(date)
                                console.log(date);
                            }
                        });

                        j'ai bien {"jour":25,"mois":8,"annee":2021} qui s'affiche sous forme Json dans ma console.

                        Normal encore, tu affiches la variable JS date.

                        Coté PHP, j'ai mis a jour mon code :

                        $data = json_decode(file_get_contents('php://input'), true);
                        echo $data;
                        var_dump($data);

                        Et ça m'affiche une string vide. :/


                        Quand tu envoies des variables en POST, tu les récupères dans la variable (tableau) $_POST, donc ici $_POST["jour"], $_POST["mois"], $_POST["annee"] (un var_dump($_POST) devrait t'afficher le contenu de $_POST aussi)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 septembre 2021 à 11:16:48

                          Okay j'ai refait quelques tests et j'ai rajouté le ajaxpost: 

                          ajaxPost("http://localhost/planning%20amiante%20brut/index.php", date,     function (data) {
                              console.log(data)
                          })

                          et du coup dans ma console je n'ai que le html de ma page index.php qui apparait.

                          Quand je fais un:

                          var_dump($_POST);

                          le tableau est vide.

                          -
                          Edité par IbrahimaSupertramp 16 septembre 2021 à 11:17:02

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Transmettre variable JS a une variable PHP

                          × 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