par
babaobab » 14 août 2012, 15:34
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/Sliding_l ... l_jquery/#
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, au dessus du formulaire, 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, que les infos de connexions soit bonnes ou mauvaises :
Le Formulaire :
Code : Tout sélectionner
<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"
Code : Tout sélectionner
head>
<meta charset="utf-8" />
<title>XXXXX</title>
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!-- PNG FIX for IE6 -->
<!-- http://24ways.org/2007/supersleight-transparent-png-in-ie6 -->
<!--[if lte IE 6]>
<script type="text/javascript" src="js/pngfix/supersleight-min.js"></script>
<![endif]-->
</head>
<body>
<?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);*/
}
}
?>
</body>
Ajax :
Code : Tout sélectionner
<!-- jQuery - the core -->
<script src="js/jquery-1.7.2.min.js" type="text/javascript"></script>
<!-- Sliding effect -->
<script src="js/slide.js" type="text/javascript"></script>
<!-- connexion script -->
<script type="text/javascript">
$(document).ready(function(){
$("#formLogin").submit(function(){
$.post(
"loginBD.php",
{
login : $("#login").val(),
mdp : $("#mdp").val(),
},
function(data){
if(data1 != "1")
{
$(".errorlog").hide().empty().append("Vous avez fait une erreur de saisie ...").show();
}
else
{
$(".reponselog").hide().append(login + "Vous avez été connecté avec succès !").show();
$("#formLogin").hide();
}
});
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 :
Content-Type : text/html
POST : login=TOTO&mdp=TOTO
Response :
<!doctype html> <html> <head> <meta charset="utf-8"> </head> <body> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Document sans titre</title> </head> <body> </body> </html>1</body> </html> (je pense que c'est due aux includes php )
HTML : 1 (avec les bons login and password enregistré dans 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 alert() 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 et en modifiant le message réponse, comme suit ,mais ça ne resoud rien :
Code : Tout sélectionner
function(data){
if(data != "Success"){
$(".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();
}
},'text');
- 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 :
Code : Tout sélectionner
function(data){
if(typeof response=="object")
{
// Response is javascript object
if(data != "1")
{....
Après tout ces échecs j'ai tenté de modifier le type du retour de string en int :
Code : Tout sélectionner
function(data){
var data1 = parseInt("data",10);
if(data1 !== "1")
{
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
Désoler pour la longeur j'ai voulu être précis et éviter des réponses déjà test, merci de votre aide je suis un peu désemparé.
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 :
[url]http://web-kreation.com/demos/Sliding_login_panel_jquery/#[/url]
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, au dessus du formulaire, 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, que les infos de connexions soit bonnes ou mauvaises :
[u]Le Formulaire :[/u]
[code]<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>[/code]
[u]Le code PHP fichier "loginBD.php"[/u]
[code]head>
<meta charset="utf-8" />
<title>XXXXX</title>
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!-- PNG FIX for IE6 -->
<!-- http://24ways.org/2007/supersleight-transparent-png-in-ie6 -->
<!--[if lte IE 6]>
<script type="text/javascript" src="js/pngfix/supersleight-min.js"></script>
<![endif]-->
</head>
<body>
<?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);*/
}
}
?>
</body>[/code]
[u]Ajax :[/u]
[code]<!-- jQuery - the core -->
<script src="js/jquery-1.7.2.min.js" type="text/javascript"></script>
<!-- Sliding effect -->
<script src="js/slide.js" type="text/javascript"></script>
<!-- connexion script -->
<script type="text/javascript">
$(document).ready(function(){
$("#formLogin").submit(function(){
$.post(
"loginBD.php",
{
login : $("#login").val(),
mdp : $("#mdp").val(),
},
function(data){
if(data1 != "1")
{
$(".errorlog").hide().empty().append("Vous avez fait une erreur de saisie ...").show();
}
else
{
$(".reponselog").hide().append(login + "Vous avez été connecté avec succès !").show();
$("#formLogin").hide();
}
});
return false; // ne change pas de page
});
});
</script>[/code]
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 :
[b]Content-Type :[/b] text/html
[b]POST :[/b] login=TOTO&mdp=TOTO
[b]Response :[/b]
<!doctype html> <html> <head> <meta charset="utf-8"> </head> <body> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Document sans titre</title> </head> <body> </body> </html>1</body> </html> (je pense que c'est due aux includes php )
[b]HTML :[/b] 1 (avec les bons login and password enregistré dans la DB)
[b]- 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 alert() de test le script refuse d’associer la bonne phrase au résultat et affiche systématiquement celle de mauvaise saisie [/b]
-j'ai tenté de remplacer la valeur retourné par PHP "1" par "success" en ajoutant l'argument 'text' a mon $.post et en modifiant le message réponse, comme suit ,mais ça ne resoud rien :
[code]function(data){
if(data != "Success"){
$(".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();
}
},'text');[/code]
- 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 :
[code]function(data){
if(typeof response=="object")
{
// Response is javascript object
if(data != "1")
{....[/code]
Après tout ces échecs j'ai tenté de modifier le type du retour de string en int :
[code]function(data){
var data1 = parseInt("data",10);
if(data1 !== "1")
{[/code]
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
Désoler pour la longeur j'ai voulu être précis et éviter des réponses déjà test, merci de votre aide je suis un peu désemparé.