formulaire de connexion PHP AJAX JQuery

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : formulaire de connexion PHP AJAX JQuery

Re: formulaire de connexion PHP AJAX JQuery

par AB » 15 août 2012, 19:32

tiens comme t'as l'air fortiche en PDO tu sais le faire fonctionner avec Free site perso ?
Si PDO n'est pas installé, c'est du ressort de l'administrateur système de pouvoir l'installer. Les autres n'y peuvent rien.

Re: formulaire de connexion PHP AJAX JQuery

par babaobab » 15 août 2012, 11:44

Oui tu as raison, je l'ai posé au début pour faire ma structure, sans le placer après.. :roll:

tiens comme t'as l'air fortiche en PDO tu sais le faire fonctionner avec Free site perso ? j'ai eu une bonne surprise après l'upload de mon site :)
certains disent que ça ne marche qu'avec Sqlite qui ne fonctionne plus par défaut sous WAMP 5.3 et quand activer dans le php.ini ca donne rien :x

Re: formulaire de connexion PHP AJAX JQuery

par xTG » 14 août 2012, 17:03

Le catch() ne sert pas à grand chose si tu ne l'étends pas à tout le traitement PDO. ;)

formulaire de connexion PHP AJAX JQuery

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" /> &nbsp;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é.