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();
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.
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
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.
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.
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>
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.
× 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.
Mais cela ne fonctionne toujours pas. Je n'ai aucun alert
et je n'ai rien du tout. Les echo que j'ai placé s'affiche à l'écran comme un alert