Jump to content

[Résolu] Plusieurs script AJAX pour un submit


Recommended Posts

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

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

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

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

Rolala je suis perdu maintenant lol

par 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

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

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

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

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 ok
011 : log pas ok
001 : log + pass pas ok
etc ...

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...