Jump to content

[Résolu] Probleme AJAX pour un module


Recommended Posts

Bonsoir,

Je dois pour un module vérifier des logins (sans session). J'ai donc ait le code si dessous, mais lorsque je clique sur le bouton submit, rien ne se passe... Je suppose donc que la function retourne false. Mais je ne vois pas ou est mon erreur...

Merci d'essayer de m'aider si vous avez des idées.

fichier tpl:

>
<form method="post" id="myform" action="/modules/blocktravelnoces/blocktravelnoces_customers.php" target="_blank" class="std">
</pre>
<table>
                                                   Login:

                                                   <input type="text" name="loginNoces" id="loginNoces" value=""/>

                                                   Mot de passe:

                                                   <input type="password" name="mdpNoces" id="mdpNoces" value="" />

                                                   <input type="submit" name="submitLogin" id="submitLog" value="{l s='ok'}" class="button_mini_noces" />
</table>
<br>                                   </form&gt



ficher javascript

$("#myform").submit(function(){
       var code = $("input[type=text]").val();
       var password = $("input[type=password]").val();
       var data2={identifiant: code, pass: password};
       var val = "erreur";
       $.ajax({
           type: "POST",
           url: "/modules/blocktravelnoces/script_confirmer.php",
           data:  data2,
           async: false,
           success: function(data) {
               val = data;
           }

           });
               if (val == "success")
               {
                   return true;
               }
               else
               {
                   return false;
               }
           });



fichier script_confirmer.php

require(dirname(__FILE__).'/../../config/config.inc.php');
include (dirname(__FILE__).'/../../init.php');

$code = $_POST['identifiant'];
$password = $_POST['pass'];
$val = erreur;

$noces = Db::getInstance()->executeS("SELECT password, id_noces
                                                 FROM `prestashop`.`"._DB_PREFIX_."voyage_de_noces`
                                                 WHERE id_noces = ".$code);

           foreach ($noces as $noce)
           {
               if (($code == $noce['id_noces']) && ($password == $noce['password']))
               {
                   $val = "success";
               }
               else
               {
                   $val = "erreur";
               }
           }

return $val;

Link to comment
Share on other sites

Tu as Firebug ? Utilises l'onglet Console pour voir si déjà l'appel Ajax est bien fait, puis regarde la réponse de celui-ci.

De plus, tu attends quoi de ton "return true;" ?
Et pourquoi utiliser une variable "val" dans le JS ?

Directement depuis le succes :

success: function(data) {
               if (data == 'success')
               {
                   $("#myform").submit();
               }
               return false;
           }

Link to comment
Share on other sites

Il faut mettre : (les apostrophes)

var data2={'identifiant': code, 'pass': password};



Ensuite, c'est bizarre qu'il renvoie quelque chose ? Tu veux dire qu'il renvoie autre chose que success ou erreur ?

D'ailleurs, préfères toujours la notation "en ligne" des conditions à 2 états :

     return (($code == $noce['id_noces']) && ($password == $noce['password']) ? 'success' : 'erreur');



C'est plus rapide à écrire, et plus rapide tout court. :)

EDIT : tu es en dans une boucle 'foreach', j'avais pas vu. Mais ! du coup, tu boucles tout le temps, si ta valeur est success, ça boucle encore et ta valeur redevient erreur.

           foreach ($noces as $noce)
           {
               if (($code == $noce['id_noces']) && ($password == $noce['password']))
               {
                   return 'success';
               }
           }

return 'erreur';

Link to comment
Share on other sites

J'ai ajouté les apostrophes, et même problème.

En faite normalement le POST de login doit récupérer des chiffres et le POST du mot de passe doit récupérer le mot de passe qui va avec. Mais là, le post récupère le mot de passe nécessaire pour l'accès au Back Office... Bizarre lol

Du coup je ne sais pas pourquoi les valeurs ne sont pas envoyé..

Et j'ai pas compris ta ligne de code lol et ou la mettre...

Link to comment
Share on other sites

Ok et la valeur renvoyée est donc "erreur" ou "success" ou autre ?

Par contre je relis ton code, je ne comprends au final pas ....

Tu fais une requête avec un WHERE id = code, donc sensé renvoyer une seule colonne ?
Pourquoi ensuite faire un foreach ?

Et surtout, pourquoi ne pas faire un :

 SELECT blabla WHERE id_noces = $code AND password = $password 



Et tester si un résultat existe ?

Link to comment
Share on other sites

Du coup tout remplacer par :

require(dirname(__FILE__).'/../../config/config.inc.php');
include (dirname(__FILE__).'/../../init.php');

return (Db::getInstance()->executeS("SELECT password, id_noces
                                                 FROM `prestashop`.`"._DB_PREFIX_."voyage_de_noces`
                                                 WHERE id_noces = ".$_POST['identifiant']." AND password=".$_POST['pass']) !== false ? 'success' : 'erreur');

Link to comment
Share on other sites

Bonjour tout le monde...

Bon je me lance dans mon problème, si des personnes ont des idées.. Je suis toujours preneur :)

tpl:

>
<form method="post" id="myform" action="/modules/blocktravelnoces/blocktravelnoces_customers.php" target="_blank" class="std">
</pre>
<table>
                                                   Login:

                                                   <input type="text" name="loginNoces" id="loginNoces" value=""/>

                                                   Mot de passe:

                                                   <input type="password" name="mdpNoces" id="mdpNoces" value="" />

                                                   <input type="submit" name="submitLogin" id="submitLog" value="{l s='ok'}" class="button_mini_noces" />
</table>
<br>                                   </form&gt



js:

$("#myform").submit(function(){        
       $.ajax({
           type: "POST",
           url: "/modules/blocktravelnoces/script_confirmer.php",
           data:  {'identifiant' : $('#loginNoces').val(), 'pass' : $('#mdpNoces').val()},
           async: false,
           success: function(data) {
               if (data == 'erreur')
               {
                   $(this).submit();
               }
               return false;
           } 

           });

           });



script_confirmer.php

require(dirname(__FILE__).'/../../config/config.inc.php');
include (dirname(__FILE__).'/../../init.php');

echo (Db::getInstance()->executeS("SELECT password, id_noces
                                                 FROM `prestashop`.`"._DB_PREFIX_."voyage_de_noces`
                                                 WHERE id_noces = ".$_POST['identifiant']." AND password=".$_POST['pass']) !== false ? 'success' : 'erreur'); 
?>




Déjà merci à vincent-decaux qui m'a bien aidée hier ;)
Et grace à lui mon fichier script_confirmer.php renvoie 'erreur' mais tout le temps... que mes login soit bon ou non

Link to comment
Share on other sites

Voici mon code javascript, maintenant le submit ne s’exécute pas vu qu'il renvoie false. Si val = true le submit s'éxécute.

Alors le problème doit venir du script ? Et mes données sont bien valide....

$("#myform").submit(function(){    
       var val;
       $.ajax({
           type: "POST",
           url: "/modules/blocktravelnoces/script_confirmer.php",
           data:  {'identifiant' : $('#loginNoces').val(), 'pass' : $('#mdpNoces').val()},
           async: false,
           success: function(data) {
               if (data == 'success')
               {
                   $(this).submit();
               }
               else
                   val =  false;
           } 

           });
           return val;
           });

Link to comment
Share on other sites

En clair ta requête renvoie toujours 'false', aucun résultat n'a été trouvé.
Regarde de ce côté, tes mots de passe sont en clair dans ta base ? Tu es sur des logins / mdp ?

Après, j'ai peut être fait une erreur de syntaxe, écrire du code vite sans tester c'est jamais le top.

Tu peux faire un $result = Db::getInstance() bla bla ....

Et un var_dump($result); pour voir le résultat.

Link to comment
Share on other sites

oui, en faite lorsque je fais la requete =

"SELECT password, id_noces
FROM `prestashop`.`"._DB_PREFIX_."voyage_de_noces`"



Ca me renvoie uniquement la première ligne de ma table, et lorsque je rajoute le WHERE =

"SELECT password, id_noces
FROM `prestashop`.`"._DB_PREFIX_."voyage_de_noces`
WHERE id_noces = ".$_POST['identifiant']." AND password=".$_POST['pass']"



la requete me renvoie false

Link to comment
Share on other sites

Je pourrai pas t'aider là.
Écris la requête que tu fais dans PHPMyAdmin avec les identifiants envoyés.

Tu peux même faire :

echo "SELECT password, id_noces
FROM "._DB_PREFIX_."voyage_de_noces`
WHERE id_noces = ".$_POST['identifiant']." AND password=".$_POST['pass'];



Et copier / coller ce qui va sortir dans PhpMyAdmin.

Link to comment
Share on other sites

Gné ... Je suis passé à côté :

echo (Db::getInstance()->getRow("SELECT password, id_noces
                                                 FROM `prestashop`.`"._DB_PREFIX_."voyage_de_noces`
                                                 WHERE id_noces = ".$_POST['identifiant']." AND password='".$_POST['pass']."'") !== false ? 'success' : 'erreur') 



password étant un String, il faut les apostrophes autour de la valeur.

Link to comment
Share on other sites

En faite le submit marche bien, c'est juste que ca ne renvoie pas les données sur ma page, mais le problème est résolu :)

Le reste doit se faire sens problème :) Merci beaucoup !

j'ai juste une derniere question à propos de javascript, aprés quand c'est 'erreur' je voudrait rajouter une div et écrire du texte dedant. Je dois créer une div dans le tpl et lorsque c'est 'erreur' je fait un $('madiv').text('text'); ?

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...