Bonjour a tous,
Débutant Ajax j'essaie de créer un formulaire de connexion.
J'ai installé un plugin JQuery avec un panneau coulissant accroché sur la bordure supérieur avec les formulaires :
http://web-kreation.com/demos/Slidin...b-kreation.com
Pour le moteur je me suis inspiré de tutos trouvés sur Internet, notamment :
https://www.enseignement.polytechnique.fr
Le meilleur résultat que j'ai pu obtenir pour l'instant est l'affichage du résultat de la requête dans le panneau mais je n'arrive pas a trouver l'erreur qui empêche le script d’interpréter la réponse (1 ou 0) il m'affiche systématiquement le text d'erreur de saisie :
Le Formulaire :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <div class="left">
<div class="errorlog"></div>
<div class="reponselog"></div>
<!-- Login Form -->
<form class="clearfix" id="formLogin">
<h1>Member Login</h1>
<label class="grey" for="login">Username:</label>
<input class="field" type="text" name="login" id="login" value="" size="23" required />
<label class="grey" for="mdp">Password:</label>
<input class="field" type="password" name="mdp" id="mdp" size="23" required />
<label>
<input name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" />
Remember me</label>
<div class="clear"></div>
<input type="submit" name="submit" value="login" class="bt_login" />
<a class="lost-pwd" href="lost.php">Lost your password?</a>
</form>
</div> |
Le code PHP fichier "loginBD.php"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| <?php
try{
$pdo_options[PDO::ATTR_ERRMODE]=PDO::ERRMODE_EXCEPTION;
$bdd=new PDO('mysql:host=localhost;dbname=Site_location', 'root', '' , $pdo_options);
}
CATCH(exception $e)
{
die('erreur : ' . $e->getmessage());
}
if( isset($_POST['login']) && isset($_POST['mdp']) ){
$mdp = mysql_real_escape_string(($_POST['mdp']));
$login = mysql_real_escape_string($_POST['login']);
// Vérification des identifiants
$req = $bdd->prepare('SELECT id FROM utilisateurs WHERE login = :login AND mdp = :mdp');
$req->execute(array(
'login' => $login,
'mdp' => $mdp));
$resultat = $req->fetch();
if (!$resultat)
{
echo "0";
}
else
{
echo "1";
/*session_start();
$_SESSION['id'] = $resultat['id'];
$_SESSION['login'] = $login;
setcookie('login', $_POST['login'], time() + 365*24*3600, null, null, false, true);*/
}
}
?> |
Ajax :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <!-- jQuery - the core -->
<script src="js/jquery-1.7.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#formLogin").submit(function(){
$.post(
"loginBD.php",
{
login : $("#login").val(),
mdp : $("#mdp").val(),
},
function(data){
if(data != "1")
{
$(".errorlog").html("<p>Vous avez fait une erreur de saisie ...</p>");
}
else
{
$(".reponselog").hide().append(login + "Vous avez été connecté avec succès !").slideDown();
$("#formLogin").fadeout();
}
});
return false; // ne change pas de page
});
});
</script> |
J'ai beau tester mon code je ne trouve pas la cause de la non-interprétation du résultat (1 ou 0):
- firebug me donne un log sans problème les variables sont bien envoyé, traité par le PHP, la réponse est bonne (1 ou 0) en fonction de la correspondance avec la DB :
- le résultat de la requête (1 ou 0) s'affiche dans le panneau JQuery au dessus du formulaire, lors de test. Mais lorsque j’enlève les balises de test le script refuse d’associer la bonne phrase au résultat et affiche systématiquement celle de mauvaise saisie
-j'ai tenté de remplacer la valeur retourné par PHP "1" par "success" en ajoutant l'argument 'text' a mon $.post mais ca ne change rien
- j'ai également tenté d'identifier si la réponse retourné (1 ou 0) était un string, un array ou un objet JSON avec un typeof() mais cela ne regle toujours pas le problème :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| function(data){
if(typeof response=="object")
{
// Response is javascript object
if(data != "1")
{
$(".errorlog").empty().append("Vous avez fait une erreur de saisie ...");
}
else
{
$(".reponselog").hide().append(login + "Vous avez été connecté avec succès !").slideDown();
$("#formLogin").fadeout();
}
}
else
{
// Response is HTML
if(data != "1")
{
$(".errorlog").empty().append("Vous avez fait une erreur de saisie ...");
}
else
{
$(".reponselog").hide().append(login + "Vous avez été connecté avec succès !").slideDown();
$("#formLogin").fadeout();
}
}
});
return false; // ne change pas de page
});
}); |
comme il semble que le problème se situe au niveau de l’interprétation du retour php (1 ou 0)par le js, j'ai essayer de déterminer le type de la donée transmise: actuellement un string
Je me demandais dans quel format celui ci devait être pour être reconnu et interprété ?
après les test précédent, j'ai donc ajouter avant la conditionnel un
var data1 = parseInt("data",10);
avec un test alert typeof il me précise bien que data est un string et data1 un number
j'ai changé la conditionnel pour qu'elle traite data1 (int) mais le résultat ne veux toujours pas s’interpréter
merci de votre aide je suis un peu désemparé.
Partager