Bonjour à tous,
J'ai un petit souci au niveau ajax pour savoir si l'e-mail entré dans le formulaire est déjà ou non dans la base de donnée.
Je pense (mais peut-être que je me trompe) que mon problème se situe soit au niveau de l'url de mon fichier php, soit au niveau du placement de mon fichier js.
Je sais qu'il existe des plugins jQuery tout prêt pour la validation de formulaire, mais ici je n'ai qu'un seul champ qui demande le mail, je ne voudrais pas surcharger ma page pour rien. Et ça me permet d'apprendre en plus
Voila les codes et les emplacements :
Je travail avec le layout, situé donc dans (wamp) www/defi/app/layouts/layout.phtml
Donc mon fichier js (mail.js) est appelé depuis le layout. L'appel fonctionne bien, j'ai testé avec d'autres fonctions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 //LAYOUT <?php $bu = $this->baseUrl(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <!-- Script --> <script type="text/javascript" src="<?php echo $bu;?>js/jquery.js"></script> <script type="text/javascript" src="<?php echo $bu;?>js/mail.js"></script> </head> //Fin du layout....
Ensuite, mon fichier js : www/defi/public/js/mail.js
Donc, au clic sur submit, je vérifie déjà que le mail est "valide", si non, j'affiche un span qui contient l'erreur et je bloque l'envoie du formulaire. Si oui, je fais ma fonction ajax, et c'est donc à cet endroit que ça pose problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 $(document).ready(function(){ //Formulaire d'e-mail $('#formmail').submit(function(event) { var mail = $('#mail').val(); var reg = new RegExp("^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$", "gi"); $(".invalide").css("display","none"); $(".exist").css("display","none"); $(".valide").css("display","none"); if(!(mail.match(reg))) { $(".invalide").css("display","inline"); event.preventDefault(); } else { var url = "/defi/public/verif/index?m="+mail; $.ajax({ type: "POST", ContentType: "text/plain; charset=UTF-8", url: url, //Bonne url ? success:function(data){ alert(data); //Alert vide :( if(data==0) { $(".valide").css("display","inline"); } else if(data==1) { $(".exist").css("display","inline"); event.preventDefault(); } else if(data==2) { $(".invalide").css("display","inline"); event.preventDefault(); } } }); } }); });
Et donc, voici la page de l'url donnée (/defi/public/verif/index?m="+mail). Tout d'abord le contrôleur, placé dans www/defi/app/controllers/VerifController.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 //Formulaire d'e-mail var url = "/defi/public/verif/index?m="+mail; $.ajax({ type: "POST", ContentType: "text/plain; charset=UTF-8", url: url, //Mon url est elle correct ? success:function(data){ alert(data);//Cette alert est vide ! if(data==0) { $(".valide").css("display","inline"); } else if(data==1) { $(".exist").css("display","inline"); event.preventDefault(); } else if(data==2) { $(".invalide").css("display","inline"); event.preventDefault(); } } }); } });Et la vue associé, placé dans www/defi/app/views/scripts/verif/index.phtml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 <?php class VerifController extends Zend_Controller_Action { function indexAction() { $this->view->title = ''; if(!empty($_GET["m"])) { $mail=$_GET["m"]; try { $verif = Doctrine_Core::getTable('Mail'); $rep = $verif->mail($mail);/*Cette fonction fait un count sur le mail passé en paramètre, donc retourne soit 0, soit 1*/ } catch(Exception $e) { echo $e; } $this->view->data = $rep; } else { $this->view->data = 2; } } } ?>
Elle ne fait qu'afficher le nombre envoyé, donc soit 0, soit 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <?php echo $this->data; ?>
Quand je test en allant depuis le navigateur à l'adresse :
* localhost/defi/public/verif/index?m= il m'affiche bien 2 (get vide)
* localhost/defi/public/verif/index?m=test@mail.com il m'affiche bien 1 (email de test enregistré dans ma bdd)
* localhost/defi/public/verif/index?m=test@test.com il m'affiche bien (email non existant dans la base.)
Est-ce que quelqu'un voit mon erreur ?
Merci d'avance !
PS : petits ajouts :
En testant avec différents url :
localhost/defi/public/verif/index?m=unmaildetest@rien.com
/defi/public/verif/index?m=unmaildetest@rien.com
/public/verif/index?m=unmaildetest@rien.com
/verif/index?m=unmaildetest@rien.com
verif/index?m=unmaildetest@rien.com
Mon alert, censé contenir le data a 0 ou 1 est toujours vide
En posant un debugger dans le succes, j'arrive bien dedans, mais data ne contient aucune donnée.
Partager