Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer variable php en ajax

Sujet résolu
    11 juin 2013 à 16:40:28

    str contient en premier lieu la chaine tapée par l'utilisateur puis cette même chaine sans les espaces et le caractères spéciaux.

    Revoilà mon petit code :

    <script>
    function valider()
        {
        var str = document.forms["formdept"].elements["depart"].value;
        str = str.replace(/[^a-z]/gi, '');
        var xhr = null;
        if(window.XMLHttpRequest)
            xhr = new XMLHttpRequest ();
        else if (window.ActiveXObject("Microsoft.XMLHTTP")
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        else
        {  
            alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
            return;
        }
        var filename = "Config/PHP/Validator.php";
        var s1 = str;
        var data = null;
        if(s1 != "")
            data = "s1="+str+"&id=depart";
        xhr.open("POST", filename,true);
        xhr.onreadystatechange = function() {
            if(xhr.readyState == 4 && (xhr.status == 200|| xhr.status == 0))
            {
                var tmp = xhr.responseText;
                if(typeof(tmp) != "undefined")
                    alert("tmp");
            }
         xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.send(data);
            if(tmp == ""|| tmp == "false")
                alert("nom inexistant");
            if(str != '')
                return true;
            else
            {
                alert("champ vide");
                return false;
            }
        }
        }
    </script>


     

    • Partager sur Facebook
    • Partager sur Twitter
      12 juin 2013 à 8:30:47

      enlève ce qu'il y'a après le xhr.send, ça ne sert à rien, ton retour ne pourra pas être traité sinon.

      As tu regardé l'onglet console dans Firebug?

      • Partager sur Facebook
      • Partager sur Twitter
        12 juin 2013 à 9:27:37

        J'ai enlevé ce dont tu m'as parlé. Je viens d'installer firebug et il m'a répondu qu'il manquait une parenthèse donc je l'ai rajouté. Par contre je n'ai plus d'erreur dans firebug mais je ne comprends pas pourquoi mon formulaire s'envoi toujours ni pourquoi dans mon var_dump($_POST) j'ai toujours depart => string 'chaine saisie'. 
        Je redonne mon code modifié :
        <script>
        	// test vérif bdd
        	function valider()
        	{
        	var str = document.forms["formdept"].elements["depart"].value;
        	str = str.replace(/[^a-z]/gi, '');
        	if( str === '')
        		alert("champ vide");
        	var xhr = null;
        	if(window.XMLHttpRequest)
        		xhr = new XMLHttpRequest ();
        	else if (window.ActiveXObject("Microsoft.XMLHTTP"))
        	xhr = new ActiveXObject("Microsoft.XMLHTTP");
        	else 
        	{		
        		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
        		return;
        	}
        	var filename = "Config/PHP/Validator.php";
        	var s1 = str;
        	var data = null;
        	if(s1 != "")
        		data = "s1="+str+"&amp;id=depart";
        	xhr.open("POST", filename,true);
        	xhr.onreadystatechange = function() {
        		if(xhr.readyState == 4 && (xhr.status == 200|| xhr.status == 0))
        		{
        			var tmp = xhr.responseText;
        			if(typeof(tmp) != "undefined")
        				alert("tmp");
        		}
        		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        		xhr.send(data);
        	}
        	
        	}
        </script>

        -
        Edité par Rhum974 12 juin 2013 à 9:29:15

        • Partager sur Facebook
        • Partager sur Twitter
          12 juin 2013 à 9:41:02

          Dans mon fichier php, j'ai remplacer mon $_POST['s1'] par $_POST['depart']. En éxécutant mon code directement sur ma page php, je trouve bien true ou false selon si ma chaine saisie existe ou pas dans ma bdd. Maintenant comment et quand pourrais-je récupérer ce true/false dans mon script ?
          • Partager sur Facebook
          • Partager sur Twitter
            12 juin 2013 à 9:48:04

            Il faut que ton script php fasse un echo de ton résultat, c'est comme ça que la partie JavaScript la récupère.

            Ta fonction valider est appelée à quel moment? sur le onClick ou sur le onSubmit?

            • Partager sur Facebook
            • Partager sur Twitter
              12 juin 2013 à 9:50:51

              Mon php fait bien un echo pour true ou false. Ma fonction est appelé sur le onSubmit de mon formulaire
              • Partager sur Facebook
              • Partager sur Twitter
                12 juin 2013 à 9:58:32

                et à la fin de ton appel ajax, qu'est-ce que tu attends. que le form soit posté ou pas? si tu ne veux pas, tu met un return false, après l'appel à valider.

                Pour revenir à ton post d'avant : 

                tu confonds les clé et les valeurs;

                Si dans les data posté tu écris : id=depart, il faut que tu écrives $_POST['id'] pour récupérer "depart".

                Si tu refais le var_dump, normalement tu verras bien : deux éléments dans le tableau, un qui a la clé id et l'autre s1.

                Maintenant, il te reste quoi à traiter?

                • Partager sur Facebook
                • Partager sur Twitter
                  12 juin 2013 à 10:01:05

                  Je veux que suivant la valeur retournée par mon fichier php, le formulaire soit envoyer ou non
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 juin 2013 à 10:03:19

                    dans ce cas, essai de mettre dans le on submit : return valider()

                    et dans le onreadystatechange : 

                    if(http.responseText == 'true'){
                        return true;
                    }else {
                        alert("form non posté");
                        return false;
                    }



                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 juin 2013 à 10:04:40

                      Je dois le placer avant ou après le .send ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        12 juin 2013 à 10:23:08

                        Il suffit de lire : il t'a dit ou le placer. Sauf que ça ne fonctionnera pas puisque tu n'es plus dans le bon scope.

                        Sérieusement, revois les bases avant de continuer. Ton code ressemble de plus en plus à une bouillie infame que tu modifies sans même comprendre ce que tu fais.

                        -
                        Edité par Anonyme 12 juin 2013 à 10:23:52

                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 juin 2013 à 10:24:36

                          dans le onreadystatechange...

                          Tu sais à quoi sert cette méthode?

                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 juin 2013 à 10:34:33

                            Le onreadystatechange ? Oui ça sert à savoir l'état de la requête
                            • Partager sur Facebook
                            • Partager sur Twitter
                              12 juin 2013 à 10:39:58

                              voilà, et ton retour sera traité dedans.

                              En fait pour moi.

                              ta fonction valider doit être appelée sur le click du bouton, et elle retourne false. dans le onreadystatechange, si tu obtiens true alors tu lances le submit du form par une instruction javascript.

                              document.forms["formdept"].submit

                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 juin 2013 à 11:06:57

                                Mon code m'affiche l'alert "champ vide" lorsque je ne sais rien mais envoie quand même le formulaire. Si je tape au moins 1 caractère, le formulaire et envoyé. Je redonne mon code avec mon formulaire et mon bouton submit : 

                                function valider()
                                	{
                                	var str = document.forms["formdept"].elements["depart"].value;
                                	str = str.replace(/[^a-z]/gi, '');
                                	if( str === '')
                                		alert("champ vide");
                                	var xhr = null;
                                	if(window.XMLHttpRequest)
                                		xhr = new XMLHttpRequest ();
                                	else if (window.ActiveXObject("Microsoft.XMLHTTP"))
                                		xhr = new ActiveXObject("Microsoft.XMLHTTP");
                                	else 
                                	{	
                                		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
                                		return;
                                	}
                                	var filename = "Config/PHP/Validator.php?id=depart";
                                	var s1 = str;
                                	var data = null;
                                	if(s1 != "")
                                		data = "s1="+str+"&amp;id=depart";
                                	xhr.open("POST", filename,true);
                                	xhr.onreadystatechange = function() {
                                		if(xhr.readyState == 4 && (xhr.status == 200|| xhr.status == 0))
                                		{
                                		if(xhr.responseText == 'true')
                                			document.forms["formdept"].submit;
                                		else
                                		{ 
                                			alert("Champ non posté");
                                		}
                                			var tmp = xhr.responseText;
                                			if(typeof(tmp) != "undefined")
                                				alert("tmp");
                                		}
                                		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                                		if(data != null)
                                			xhr.send(data);
                                		else alert ("data null");
                                	}
                                	
                                }

                                <form method="post" id="formdept" action="Bilan.php?dept=1" >
                                
                                <input class="colorange" type="submit" value="Envoyer" onClick="valider()"/>
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  12 juin 2013 à 11:25:44

                                  Il faut que tu empêches le submit par le click... cf mon dernier message
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    12 juin 2013 à 11:32:10

                                    Je ne vois pas en quoi cela peux résoudre mon problème. De plus je n'arrive toujours pas à récupérer mon echo de mon php pour pouvoir le tester par la suite. Si j'utilise la méthod onClick, le formulaire sera dans tous les cas envoyé si l'utilisateur tape la touche entrée. Si tu avais un exemple à me montrer pour m'expliquer comment récupérer cette valeur et que je puisse la tester pour l'envoi de mon formulaire je t'en serais gré.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      12 juin 2013 à 11:36:21

                                      Je ré-explique peut-être tout mon problème. Je souhaite récupérer dans un fichier php, appeler par mon jscript, un id en GET et un nom de département rentrée par l'utilisateur dans mon formulaire en POST. Mon fichier php compare cette valeur à celles inscrites dans ma bdd et renvoie true ou false le cas échéant. Dans mon script, je souhaite récupérer ce true/false pour le placer en condition de l'envoie de mon formulaire.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        12 juin 2013 à 14:25:26

                                        si ton appel ajax n'a rien à voir avec ton form, pourquoi tu le places dans un bouton de type submit?

                                        et es tu sûr que côté serveur ton script écrit true ou false?

                                        il y'a trop de confusions dans tes scripts, et de mauvaises manipulations.

                                        -
                                        Edité par Dhampir 12 juin 2013 à 14:33:08

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          12 juin 2013 à 14:34:50

                                          Je viens de trouver une solution qui fonctionne très bien. Je met le code pour ceux que ca interessent : 
                                          function valider()
                                          	{
                                          	var str = document.forms["formdept"].elements["depart"].value;
                                          	if(window.XMLHttpRequest)
                                          		xhr = new XMLHttpRequest ();
                                          	else if (window.ActiveXObject("Microsoft.XMLHTTP"))
                                          		xhr = new ActiveXObject("Microsoft.XMLHTTP");
                                          	else 
                                          	{	
                                          		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
                                          		return;
                                          	}
                                          	var filename = "Config/PHP/Validator.php?id=depart";
                                          	var s1 = str;
                                          	var data = null;
                                          	if(s1 != "")
                                          		data = "s1="+str;
                                          	xhr.open("POST", filename,false);
                                          	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                                          	xhr.send(data);
                                          	if(xhr.responseText == "true")
                                          		{return true;}
                                          	else
                                          	{ 
                                          		alert("Veuillez saisir un nom de DEPARTEMENT valide !");
                                          		return false;
                                          	}
                                          }

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            12 juin 2013 à 16:44:19

                                            Bien sûr. Et tu utilises la réponse du serveur avant d'avoir vérifié que tu l'as bien reçue.

                                            Ça sert à quoi que le JS soit événementiel si tu n'utilises pas cet aspect du langage ?

                                            Revois les bases, j'abandonne ton cas.

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              13 juin 2013 à 8:52:19

                                              Si tu regardes bien mon code, je force l'ouverture de mon fichier en mode synchrone.
                                              xhr.open("POST", filename,false);

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Récupérer variable php en ajax

                                              × 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