matt.webcroisieres Posted July 11, 2011 Share Posted July 11, 2011 Bonjour,Pour un formulaire d'inscription, j'ai besoin de faire des contrôles de saisi, par exemple un contrôle pour mot de passe, doublon pour le login et code...J'utilise donc AJAX... mais j'ai fait plusieurs script AJAX ce qui pose problème car il prends en compte que le premier... $("#submitCustomers").submit(function(){ var val; $.ajax({ type: "POST", url: "/modules/blocktravelnoces/script_control_mdp.php", data: {'password' : $('#password').val(), 'password_bis' : $('#password_bis').val(), 'login' : $('#login_maries').val()}, async: false, success: function(data) { if (data == 'success_pass') { $(this).submit(); } else { val = false; $('.error_pass').fadeIn(); } } }); $.ajax({ type: "POST", url: "/modules/blocktravelnoces/script_login.php", data: {'login' : $('#login_maries').val()}, async: false, success: function(data) { if(data == 'success_login') { $(this).submit(); } else { val=false; $('.error_log').fadeIn(); } } }); $.ajax({ type: "POST", url: "/modules/blocktravelnoces/script_code.php", data: {'code_maries' : $('#code_maries').val()}, async: false, success: function(data) { if(data == 'success_code') { $(this).submit(); } else { val=false; $('.error_code').fadeIn(); } } }); return val; }); Les codes marchent individuellement... Mais pas ensemble. Avez vous des idées svp ? Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 11, 2011 Share Posted July 11, 2011 Bonjour,vous devriez plutôt faire tous vos traitements via une seule requête AJAX, ça évitera les soucis de synchronisation et surtout c'est beaucoup plus rapide pour l'utilisateur final Link to comment Share on other sites More sharing options...
matt.webcroisieres Posted July 11, 2011 Author Share Posted July 11, 2011 C'est ce que je voulais faire à la base.. Mais le data doit renvoyer qu'une seule valeur ? Du coup je ne sais pas comment faire.. Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 11, 2011 Share Posted July 11, 2011 Non l'ajax peut retourner plusieurs réponses d'un coup, il suffit d'envoyer du XML en réponse par exemple. Pour cela dans votre fichier PHP avant d'envoyer le XML vous devez ajouter : header('content-type: text/xml'); Et ensuite le data que vous récupérez dans votre fonction est un XML, vous pouvez le parcourir avec les fonctions de Jquery, par exemple avec un XML comme ceci : vous pouvez faire : success: function(data) { var xml = $(data); if (xml.find('success_login').attr('value') == 'false') alert('Erreur de login'); if (xml.find('success_pass').attr('value') == 'false') alert('Erreur de password'); if (xml.find('success_code').attr('value') == 'false') alert('Erreur de code'); }); Link to comment Share on other sites More sharing options...
matt.webcroisieres Posted July 11, 2011 Author Share Posted July 11, 2011 Ca donnerais ca: $.ajax({ type: "POST", url: "/modules/blocktravelnoces/script.xml", data: {'password' : $('#password').val(), 'password_bis' : $('#password_bis').val(), 'login' : $('#login_maries').val()}, async: false, success: function(data) { var xml = $(data); if (xml.find('success_login').attr('value') == 'false') alert('Erreur de login'); if (xml.find('success_pass').attr('value') == 'false') alert('Erreur de password'); if (xml.find('success_code').attr('value') == 'false') alert('Erreur de code'); } }); mais ce que je ne comprends pas, c'est dans le fichier XML comment faire les traitements ? Par exemple comment récupérer les donner dans le fichier xml ?Dans tous les cas, merci, je vais chercher sur cette voie. Link to comment Share on other sites More sharing options...
Vincent Decaux Posted July 11, 2011 Share Posted July 11, 2011 Il n'y a pas de fichier XML, c'est ton script PHP qui retourne du XML. Tu as juste besoin de faire dans ton PHP : echo ' '; Concrètement, tu ne peux pas renvoyer de tableaux depuis ton PHP, d'où la nécessité de passer par du XML, ou mieux, du JSON. Certains trichent un peu aussi, par exemple, tu as 3 valeurs, tu peux renvoyer depuis ton PHP une chaine du style : echo '0-0-1'; Et côté JS, faire un : success: function(data) { var d = data.split('-'); // d[0] = 0 // d[1] = 0 // d[2] = 1 } Le XML a l'avantage d'être plus facile à "lire" pour un humain, mais est très lourd. Tu renvoies plusieurs centaines de caractères, tu dois le parcourir côté JS, mais il y a plein d'astuce pour renvoyer plusieurs valeurs. Link to comment Share on other sites More sharing options...
matt.webcroisieres Posted July 11, 2011 Author Share Posted July 11, 2011 Rolala je suis perdu maintenant lolpar exemple dans ma page script_control_mdp.php j'ai ca : <?php require(dirname(__FILE__).'/../../config/config.inc.php'); include (dirname(__FILE__).'/../../init.php'); $password = $_POST['password']; $password_bis = $_POST['password_bis']; if ($password == $password_bis) { echo 'success_pass'; } else { echo 'error_pass'; } ?> Comment ça se passe ? Dans le XML tu mets la variable $password par exemple... à quoi sert elle.. :$EDIT : Je vais regarder aussi niveau triche lol Link to comment Share on other sites More sharing options...
Vincent Decaux Posted July 11, 2011 Share Posted July 11, 2011 Tu peux afficher tes 3 scripts PHP, ça sera plus simple à expliquer. Link to comment Share on other sites More sharing options...
matt.webcroisieres Posted July 11, 2011 Author Share Posted July 11, 2011 script_password.php <?php require(dirname(__FILE__).'/../../config/config.inc.php'); include (dirname(__FILE__).'/../../init.php'); $password = $_POST['password']; $password_bis = $_POST['password_bis']; if ($password == $password_bis) { echo 'success'; } else { echo 'error'; } ?> script_login.php <?php require(dirname(__FILE__).'/../../config/config.inc.php'); include (dirname(__FILE__).'/../../init.php'); $login = $_POST['login']; $log = Db::getInstance()->ExecuteS("SELECT login FROM `prestashop`.`"._DB_PREFIX_."voyage_de_noces`"); foreach ($log as $log) { if ($login == $log['login']) { $var = 1; } else { $var =0 ; } } if ($var == 0) { echo 'success_login'; } else { echo 'error_ login'; } ?> script_code.php $code_maries = $_POST['code_maries']; $code = Db::getInstance()->ExecuteS("SELECT code_maries FROM `prestashop`.`"._DB_PREFIX_."voyage_de_noces`"); foreach ($code as $code) { if ($code_maries == $code['code_maries']) { $var = 1; } else { $var =0 ; } } if ($var == 0) { echo 'success_code'; } else { echo 'error_ code'; } Voila... Je suis en train de modifier à la façon "cheat", qui est plus compréhensible pour moi pour le moment. Link to comment Share on other sites More sharing options...
Vincent Decaux Posted July 11, 2011 Share Posted July 11, 2011 Hmm, c'est pas très beau tout ça... Tu récupères tous les résultats de tes tables, puis tu boucles dessus en faisant des tests, si le résultat a été trouvé, tu continues quand même de boucler.Alors qu'il suffit juste de récupérer le count des résultats du SQL. require(dirname(__FILE__).'/../../config/config.inc.php'); include (dirname(__FILE__).'/../../init.php'); $log = Db::getInstance()->getValue("SELECT count(login) FROM `prestashop`.`"._DB_PREFIX_."voyage_de_noces` WHERE login = '".$_POST['login']."'"); $code = Db::getInstance()->getValue("SELECT count(code_maries) FROM `prestashop`.`"._DB_PREFIX_."voyage_de_noces` WHERE code_maries = '".$_POST['code_maries']."'"); echo ' '; Link to comment Share on other sites More sharing options...
matt.webcroisieres Posted July 11, 2011 Author Share Posted July 11, 2011 Ca je sais que mon code est moche :-/ Mais j'ai l'espoir d'avoir un jour aucune difficulté à coder et ainsi me concentrer à faire du beau code ^^Et du coté Ajax ça donnerais ça ? var val; $.ajax({ type: "POST", url: "/modules/blocktravelnoces/script_control_mdp.php", data: {'password' : $('#password').val(), 'password_bis' : $('#password_bis').val(), 'login' : $('#login_maries').val(), 'code_maries' : $('#code_maries').val()}, async: false, success: function(data) { var xml = $(data); if (xml.find('success_login').attr('value') == 'true') { $(this).submit(); } else { val = false; $('.error_pass').fadeIn(); } if (xml.find('success_pass').attr('value') == 'true') { $(this).submit(); } else { val = false; $('.error_pass').fadeIn(); } if (xml.find('success_code').attr('value') == 'true') { $(this).submit(); } else { val = false; $('.error_pass').fadeIn(); } } }); Link to comment Share on other sites More sharing options...
matt.webcroisieres Posted July 11, 2011 Author Share Posted July 11, 2011 Bon j'ai quelque problème, mais je pense que ca va être rapide à corriger. Merci à vous (une fois de plus) de m'avoir aidé, formé..je mettrais résolu quand ça marchera Link to comment Share on other sites More sharing options...
matt.webcroisieres Posted July 11, 2011 Author Share Posted July 11, 2011 Merci énormément à vous, tout marche bien Link to comment Share on other sites More sharing options...
Vincent Decaux Posted July 11, 2011 Share Posted July 11, 2011 Et bien la, si tu as une seule valeur à "true" et les autres à "false", tu submit ton form. J'imagine que ça ne doit pas être le cas ? Mais le XML est lourd à manipuler, plus simple :Côté PHP : require(dirname(__FILE__).'/../../config/config.inc.php'); include (dirname(__FILE__).'/../../init.php'); $log = Db::getInstance()->getValue("SELECT count(login) FROM `prestashop`.`"._DB_PREFIX_."voyage_de_noces` WHERE login = '".$_POST['login']."'"); $code = Db::getInstance()->getValue("SELECT count(code_maries) FROM `prestashop`.`"._DB_PREFIX_."voyage_de_noces` WHERE code_maries = '".$_POST['code_maries']."'"); echo ($log ? '1' : '0').($_POST['password'] == $_POST['password_bis'] ? '0' : '1').($code ? '1' : '0'); Ce qui va te renvoyer plusieurs chaines possibles :111 : tout est ok011 : log pas ok 001 : log + pass pas oketc ...Côté JS : success: function(data) { if (data == '111') { $(this).submit(); return true; } else { if (data[0] == '0') { $('.error_log').fadeIn(); } if (data[1] == '0') { $('.error_pass').fadeIn(); } if (data[2] == '0') { $('.error_code').fadeIn(); } } } C'est pas des plus élégants non plus, mais tu gères toutes tes erreurs comme ça. Link to comment Share on other sites More sharing options...
matt.webcroisieres Posted July 11, 2011 Author Share Posted July 11, 2011 Mon problème était effectivement les true et false... Parce contre j'ai pas compris pourquoi dans les requêtes sql ont doit faire un count ?J'utilise la version XML ou la version "chaine" ? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now