Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer variable php en ajax

Sujet résolu
    10 juin 2013 à 14:06:28

    Bonjour, voilà je vous explique mon problème. J'ai créé un code en jscript depuis lequel j'appel un fichier php. Dans cette fonction je voudrais récupérer la variable de mon code php pour pouvoir la tester par la suite mais je ne vois pas comment faire. Cette fonction est appelé lors du onsubmit de mon formulaire et elle doit donc renvoyer true ou false.
    Je vous montre mon code ainsi que mon fichier php

    Code jscript :

    <script>
    // test vérif bdd
    function createRequestObject()
    {
    	var http;
    	if(window.XMLHttpRequest)
    		http = new XMLHttpRequest();
    	else if(window.ActiveXObject)
    		http = new activeXObject("Microsoft.XMLHTTP");
    	return http;
    }
    var http;
    function gestionSubmit()
    {
    	http = createRequestObject();
    	http.open('POST', 'Config/PHP/Validator2.php?id=depart', true);
    	http.onreadystatechange = handleAJAXreturn;
    	http.send($('#depart').val());
    }
    function handleAJAXreturn()
    {
    	if(http.readyState == 4 && http.status == 200)
    	{
    			if(http.responseText =='false' && $('#depart').val() != '')
    			{
    				alert("Veuillez saisir un nom de département valide");
    				return false; 
    			}
    			else return true;
    	}
    }
    </script>

    Code php : 

    <?php
    try 
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=orange2', 'root', '');
    }
    catch(Exception $e)
    {
    	die('Erreur : '.$e->getMessage());
    }
    
    $term=$_POST['term'];
    $req=$bdd->prepare('SELECT DISTINCT NomDept FROM test WHERE NomDept= :term');
    $req->execute(array('term' => $term));
    $donnees = $req->fetch();
    if(COUNT($donnees['NomDept'])>0)
    	return $trouve=true;
    else return $trouve=false;
    	$req->closeCursor();

    Appel de ma fonction 

    <form method="post" id="formdept" action="Bilan.php?dept=1" onsubmit="gestionSubmit();return false;">
    <input class="colorange" type="submit" value="Envoyer" onSubmit="gestionSubmit()" />



     

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      10 juin 2013 à 14:11:59

      Déjà pourquoi affecter une variable dans un return ? C'est un coup à se taper de belles erreurs.

      Ensuite un return n'affiche pas la variable, il faut donc trouver un moyen d'afficher quelque chose pour que ton JS sache ce qu'il se passe.

      -
      Edité par Anonyme 10 juin 2013 à 14:12:38

      • Partager sur Facebook
      • Partager sur Twitter
        10 juin 2013 à 14:14:15

        Il faut que je fasse un return en json peut-être ? Et comment l'affecter dans une variable de mon jscript ?

        -
        Edité par Rhum974 10 juin 2013 à 14:14:52

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          10 juin 2013 à 14:19:54

          N'utilise pas de return, ça n'affichera rien, je viens de te le dire. Utilise en echo, tout simplement.

          Ta requête Ajax charge ta page comme ton navigateur chargerait tout autre fichier HTML/XML/texte.

          Fais un tour sur le tuto Ajax du SDZ, notamment sur la partie réception de données.

          -
          Edité par Anonyme 10 juin 2013 à 14:20:21

          • Partager sur Facebook
          • Partager sur Twitter
            10 juin 2013 à 14:25:35

            Bonjour,

            ton appel Ajax récupère soit du texte soit du JSon (en principe), donc un echo suffira, attention si tu utilises un return, le code qui suit ne sera pas exécuté, je pense à la fermeture de la connexion à la base de données.

            Return est utilisé pour sortir d'une fonction.

            • Partager sur Facebook
            • Partager sur Twitter
              10 juin 2013 à 14:31:37

              Je ne comprends pas vraiment. Est-ce que vous auriez un exemple pour m'expliquer parce que la je suis largué. Par contre c'est mon jscript qui doit m'afficher quelque chose et pas mon php
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                10 juin 2013 à 14:36:51

                Ton PHP doit afficher quelque chose pour que ton JS puisse le lire.

                return ne sert qu'un sein d'un seul et même programme (une fonction renvoie un résultat à la fonction appelante), c'est tout.

                • Partager sur Facebook
                • Partager sur Twitter
                  10 juin 2013 à 14:38:46

                  j'ai remplacé les return de mon fichier php par des echo. Comment puis-je récupérer cette variable dans mon jscript ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 juin 2013 à 14:40:11

                    Je te conseil de lire le tuto AJAX comme te l'a conseillé viki53.

                    En résumé : 

                    1) depuis le poste client tu lances un appel asynchrone (requête) au serveur

                    2) le serveur reçoit l'appel (c'est ton script php), et peut donner une réponse à la méthode appelante. Pour répondre, il écrit du texte dans la response (d'où le echo et pas le return)

                    3) le poste client récupère la résponse au format texte et en fait ce qu'il veut.

                    ton test :

                                if(http.responseText =='false' && $('#depart').val() != '')
                    

                    n'est jamais vérifié car rien n'était printé dans ton script PHP. Comme indiqué, le return ça marche pour une fonction, mais un appel AJAX n'est pas une fonction.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 juin 2013 à 14:44:20

                      J'ai aussi modifié la ligne 18 par :
                      http.send("term=$('#depart').val()");
                      Mais cela ne fonctionne toujours pas. Je n'ai aucun alert
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        10 juin 2013 à 14:47:31

                        Il faudrait peut-être apprendre à concaténer avant de t'étonner d'avoir des problèmes...

                        Regarde donc dans ta console à quoi ressemblent les échanges client-serveur, tu comprendras mieux d'où vient le problème.

                        -
                        Edité par Anonyme 10 juin 2013 à 14:56:33

                        • Partager sur Facebook
                        • Partager sur Twitter
                          10 juin 2013 à 14:50:27

                          je n'ai aucune erreur dans la console (CTRL+MAJ+I sous Firefox)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 juin 2013 à 14:52:02

                            Il faut que j'utilise la fonction callback si je comprends bien ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              10 juin 2013 à 14:53:13

                              effectue un alert(http.responseText) à la ligne 23 du script que tu as fournit au début
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                10 juin 2013 à 14:56:24

                                Quand je te parle des échanges, je te parle de l'onglet réseau, qui permet de voir les échanges avec le serveur.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  10 juin 2013 à 14:56:59

                                  Il m'ouvre 2 alert : un vide et le deuxième : 
                                  <br />
                                  <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
                                  <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index: term in D:\wamp\www\Stage Orange\Config\PHP\Validator.php on line <i>12</i></th></tr>
                                  <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
                                  <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
                                  <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0004</td><td bgcolor='#eeeeec' align='right'>390944</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='D:\wamp\www\Stage Orange\Config\PHP\Validator.php' bgcolor='#eeeeec'>..\Validator.php<b>:</b>0</td></tr>
                                  </table></font>
                                  false

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    10 juin 2013 à 14:58:04

                                    J'étais bien dans l'onglet réseau et tout est ok pour les échanges selon lui
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      10 juin 2013 à 15:03:38

                                      Tu as regardé le contenu des requêtes ? Ce que demande le client et ce que renvoie le serveur, pour cet appel Ajax.

                                      Tu as donc une belle erreur PHP. Et ça ne m'étonnerait pas que ça vienne de ce code, que je t'ai dit de revoir.

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        10 juin 2013 à 15:16:06

                                        J'ai modifié le code en :

                                        http.send("term=+$('#depart').val()");
                                         et j'ai rajouté cette fonction avant le send :
                                        http.setRequestHeader("Content-Type, "text/plain");

                                         j'ai surement mal compris encore une fois
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          10 juin 2013 à 15:19:00

                                          On va revoir les bases, alors.

                                          http.send("term="+$('#depart').val());

                                          Et la deuxième ligne ne sert à rien, c'est au serveur d'envoyer un Content-Type.

                                          Lis le tuto, tu dois vraiment comprendre comment fonctionne Ajax.

                                          Et de meilleures bases sur le JavaScript seraient pas de refus non plus...

                                          -
                                          Edité par Anonyme 10 juin 2013 à 15:20:51

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            10 juin 2013 à 15:24:37

                                            Bon j'ai fait ce que tu m'as dit. Mon code m'affiche toujours les deux alert que j'ai dis précédemment plus le message que j'ai créé dans tous les cas même si la chaine saisie existe. Je redonne mon code :
                                            <!DOCTYPE html>
                                            <html>
                                            <head>
                                            <meta charset="utf-8" />
                                            	<link rel="stylesheet" href="Config/CSS/Bilan.css"/>
                                            	<title>FACT - Bilan</title>
                                            	<link rel="stylesheet" type="text/css" href="Config/jQuery/jquery-ui.css"/> 
                                            </head>
                                            <header>
                                            	<a class="activ" href="activ.php">ACTIV</a>
                                            	<a href="index.php">Retour à la page d'accueil</a>
                                            </header>
                                            <body>
                                            	<script type="text/javascript" src="Config/jQuery/jquery.min.js"></script>
                                            	<script type="text/javascript" src="Config/jQuery/jquery-ui.min.js"></script>
                                            	<style>
                                            		#cachemois {
                                            		display:none;}
                                            		#cachesem {
                                            		display:none;}
                                            		#cacheyear {
                                            		display:none;}
                                            	</style>
                                            	<!-- Fonction javascript-->
                                            	<script>
                                            	// test vérif bdd
                                            	function createRequestObject()
                                            	{
                                            		var http;
                                            		if(window.XMLHttpRequest)
                                            			http = new XMLHttpRequest();
                                            		else if(window.ActiveXObject)
                                            			http = new activeXObject("Microsoft.XMLHTTP");
                                            		return http;
                                            	}
                                            	var http;       // Cela pose peut-être problème ?????
                                            	function gestionSubmit()
                                            	{
                                            		http = createRequestObject();
                                            		http.open('POST', 'Config/PHP/Validator.php?id=depart', true);
                                            		http.onreadystatechange = handleAJAXreturn;
                                            		http.send("term="+$('#depart').val());
                                            	}
                                            	function handleAJAXreturn()
                                            	{
                                            		alert(http.responseText);
                                            		if(http.readyState == 4 && (http.status == 200|| http.status == 0))
                                            		{
                                            				if(http.responseText =='false' || $('#depart').val() != '')
                                            				{
                                            					alert("Veuillez saisir un nom de département valide");
                                            					return false; 
                                            				}
                                            				else return true;
                                            		}
                                            	}
                                            	</script>
                                            	<script>
                                            	// Affiche ou cache la sélection de la durée suivant la checkbox coché
                                            		function AfficheTemps(chck,chck1,chck2,el,el1,el2) 
                                            		{ 
                                            			if (chck.checked)
                                            				{
                                            					document.getElementById(el).style.display='block';
                                            					chck1.checked = false;
                                            					document.getElementById(el1).style.display='none';
                                            					chck2.checked = false;
                                            					document.getElementById(el2).style.display='none';
                                            				}
                                            				else document.getElementById(el).style.display='none';
                                            		}
                                            	</script>
                                            	<?php
                                            		// connexion à la BDD
                                            		try
                                            		{
                                            			$bdd = new PDO('mysql:host=localhost;dbname=orange', 'root', '');
                                            		}
                                            		catch (Exception $e)
                                            		{
                                            			die('Erreur : '.$e->getMessage());
                                            		}
                                            	?>
                                            	<br/><br/>
                                            	<form method="post" id="formdept" action="Bilan.php?dept=1" onsubmit="gestionSubmit();return false;">
                                            					<label for="depart">Departement</label>
                                            					<br/>
                                            					<input class="colorange" type="text" name="depart" id="depart"/>
                                            					<!-- Auto-complétion-->
                                            					<script>
                                            						$('#depart').autocomplete({
                                            							source: 'Config/PHP/ListeAutoComplete.php?id=depart'
                                            						});
                                            					</script>
                                            					<!--Fin auto-complétion-->
                                            					<br/><br/>
                                            					<label for="checkbtm">Bilan mensuel</label>
                                            					<input type="checkbox" name="checkbtm" id="checkbtm" value="mensuel" onClick="AfficheTemps(this, checkbts, checkbta, 'cachemois', 'cachesem', 'cacheyear')"/>
                                            					<br/>
                                            					<!--Affichage caché du choix du mois-->
                                            					<div id="cachemois">
                                            						<label for="mois"><strong> Choisissez un mois : </strong></label>
                                            						<select type="text" name="mois" id="mois">
                                            	<?php
                                            								$mois = date('n');
                                            								$mois_fr = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
                                            							while($mois != 0)
                                            							{
                                            	?>
                                            								<option value=<?php echo $mois;?>>
                                            									<?php echo $mois_fr[$mois-1];?>
                                            								</option>
                                            	<?php
                                            								$mois -= 1;
                                            							}
                                            	?>
                                            						</select>
                                            						<br/><br/>
                                            					</div>
                                            					<!-- Fin affichage caché du choix du mois -->
                                            					<label for="checkbts">Bilan semestriel</label>
                                            					<input type="checkbox" name="checkbts" id="checkbts" value="semestriel" onClick="AfficheTemps(this, checkbtm, checkbta,'cachesem', 'cachemois', 'cacheyear')"/>
                                            					<br/>
                                            					<!--Affichage caché du choix du semestre-->
                                            					<div id="cachesem">
                                            						<label for="semestre">Choisissez le semestre : </label>
                                            							<select type="text" name="semestre" id="semestre">
                                            	<?php 
                                            								if(date('n') >6)
                                            								{
                                            	?>
                                            									<option value="semestre2">Du 1er Juillet au 31 Décembre</option>
                                            									<option value="semestre1">Du 1er Janvier au 30 Juin </option>
                                            	<?php 
                                            								} 
                                            								else 
                                            	?>
                                            									<option value="semestre1">Du 1er Janvier au 30 Juin</option>
                                            						</select>
                                            						<br/><br/>
                                            					</div>
                                            					<!-- Fin affichage caché du choix du mois -->
                                            					<label for="checkbta">Bilan annuel</label>
                                            					<input type="checkbox" name="checkbta" id="checkbta" value="annuel" onClick="AfficheTemps(this, checkbtm, checkbts,'cacheyear', 'cachemois', 'cachesem')"/>
                                            					<br/>
                                            					<!--Affichage caché du choix de l'année-->
                                            					<div id="cacheyear">
                                            						<label for="annee">Choisissez l'année : </label>
                                            						<select type="text" name="annee" id="annee">
                                            							<?php
                                            								$annee = date('Y');
                                            								while($annee>date('Y')-2)
                                            								{
                                            							?>
                                            								<option value="<?php echo $annee;?>"><?php echo $annee; ?></option>
                                            							<?php
                                            								$annee = $annee - 1;
                                            								}
                                            							?>
                                            						</select>
                                            						<br/><br/>
                                            					</div>
                                            					<br/><br/>
                                            					<input class="colorange" type="submit" value="Envoyer" onSubmit="gestionSubmit();" />
                                            			</form>
                                            	

                                            -
                                            Edité par Rhum974 10 juin 2013 à 15:26:41

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Anonyme
                                              10 juin 2013 à 15:27:43

                                              Et côté serveur, tu vérifies bien que $_POST['term'] existe ?
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                10 juin 2013 à 15:30:28

                                                Je viens de rajouter la condition et je ne reçois rien
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  10 juin 2013 à 15:31:54

                                                  je me permet d'intervenir de nouveau, pour avoir le retour que tu attends, il faut être sûr que ton code PHP ne produise ni erreur, ni warning.

                                                  As tu effectué un alert de ce qui est printé?

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    10 juin 2013 à 15:32:47

                                                    j'ai effectué un 
                                                    alert(http.responseText);
                                                    et je n'ai rien du tout. Les echo que j'ai placé s'affiche à l'écran comme un alert

                                                    -
                                                    Edité par Rhum974 10 juin 2013 à 15:33:08

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Anonyme
                                                      10 juin 2013 à 15:32:56

                                                      Ton PHP ressemble à quoi ?
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        10 juin 2013 à 15:34:37

                                                        Voilà mon code php : 
                                                         
                                                        <?php
                                                        
                                                        try 
                                                        {
                                                        	$bdd = new PDO('mysql:host=localhost;dbname=orange2', 'root', '');
                                                        }
                                                        catch(Exception $e)
                                                        {
                                                        	die('Erreur : '.$e->getMessage());
                                                        }
                                                        if(isset($_GET['id']) && $_GET['id'] == "depart")
                                                        {
                                                        	if(isset($_POST['term']))
                                                        	{
                                                        		$term=$_POST['term'];
                                                        		$req=$bdd->prepare('SELECT DISTINCT NomDept FROM test WHERE NomDept= :term');
                                                        		$req->execute(array('term' => $term));
                                                        		$donnees = $req->fetch();
                                                        		if(COUNT($donnees['NomDept'])>0)
                                                        			echo 'true';
                                                        		else echo 'false';
                                                        		$req->closeCursor();
                                                        	}
                                                        	else echo 'pas de term';
                                                        }
                                                        if(isset($_GET['id']) && $_GET['id'] == "serv")
                                                        {
                                                        	$term=$_POST['serv'];
                                                        	$req=$bdd->prepare('SELECT DISTINCT NomServ FROM test WHERE NomServ= :term');
                                                        	$req->execute(array('term' => $term));
                                                        	$donnees = $req->fetch();
                                                        	if($donnees['NomServ'] != NULL)
                                                        		echo "true";
                                                        	else echo "false";
                                                        	$req->closeCursor();
                                                        }
                                                        if(isset($_GET['id']) && $_GET['id'] == "act")
                                                        {
                                                        	$term=$_POST['term'];
                                                        	$req=$bdd->prepare('SELECT DISTINCT NomAct FROM test WHERE NomAct= :term');
                                                        	$req->execute(array('term' => $term));
                                                        	$donnees = $req->fetch();
                                                        	if($donnees['NomAct'] != NULL)
                                                        		echo "true";
                                                        	else echo "false";
                                                        	$req->closeCursor();
                                                        }
                                                        if(isset($_GET['id']) && $_GET['id'] == "CHAFF")
                                                        {
                                                        	$term=$_POST['term'];
                                                        	$req=$bdd->prepare('SELECT DISTINCT NomCHAFF FROM test WHERE NomCHAFF= :term');
                                                        	$req->execute(array('term' => $term));
                                                        	$donnees = $req->fetch();
                                                        	if($donnees['NomCHAFF'] != NULL)
                                                        		echo "true";
                                                        	else echo "false";
                                                        	$req->closeCursor();
                                                        }
                                                        ?>
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          10 juin 2013 à 15:40:26

                                                          Avant de le passer en AJAX, fait le par un post classique pour être sur que ton appel s'exécute bien. J'entends par là que le résultat est bien celui que tu attends, car là ça manque un peu de structure à mon sens.

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Anonyme
                                                            10 juin 2013 à 15:43:30

                                                            Tu as quoi dans tes alert ? Le message "pas de term" ? Autre chose ?

                                                            Dans l'onglet réseau, tu as regardé ce que qui transitait, dans les deux sens ? Quelles données, sous quelle forme ?

                                                            • 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