Bonjour à toutes et à tous,
J'utilise $.ajax({}) pour effectuer un appel Ajax en passant des données que je souhaite recevoir en json.
Code:
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
38
39
40 /** script traitant de l'affichage de la zone d'inscription */ $(document).ready(function() { $("#inscription").click(function() { $("#inscriptionForm").fadeIn("fast"); // pour la soumission du formulaire $("#sendInscription").submit(function(e) { // pendant la soumission on affiche le loader d'attente Ajax $("#loader").show(); e.preventDefault(); // empêcher le navigateur de soumettre lui-même le formulaire // pour l'appel Ajax puisqu'on veut rester sur la même page suite à la soumission // lors de l'appel Ajax la référence #inscriptionForm sera perdu il faut donc la réaffecter var $this = $(this); datatosend=$this.serialize(); // on sérialise les données à envoyer sur le serveur $.ajax({ url: $this.attr('action'), type: $this.attr('method'), data: datatosend, dataType: 'json', cache: false, error: function() { $("#loader").hide(); alert("erreur lors du processus d'enregistrement de l'inscription !"); }, success: function(json){ $("#loader").hide(); // on cache le loader d'attente Ajax $("#inscriptionForm").fadeOut(); // on cache le formulaire if(json.type == 'success') $("#inscriptionSent").show('slow'); } // fin function(json) }); // fin $.ajax() }); // fin $("#inscriptionForm").submit() }); // fin $("#inscription").click() }); // fin $(document) //$('#inscriptionSent').show('slow'); //setTimeout('$("#inscriptionSent").hide(); $("#inscriptionForm").fadeOut("slow")', 2000); //console.log(retour);
inc_ajoutMembre.php
Code:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 <?php require_once 'inc_connexion.php'; $conn=opendb(); // on se connecte à la Base de données /** script permettant l'insertion d'un Membre en Base , ce script devra vérifier que le login n'est pas déjà présent en Base. Le Pseudo choisi par le futur membre sera le pseudo intégré en Base. Il faudra par ailleurs envoyé un mail au membre afin de lui communiquer son login et son password après validation de l'unicité du login en base. */ // variables correspondant aux champs présents en base // utilisation de l'opérateur ternaire ?: pour assigner les variables aux valeurs des champs du formulaire $pseudo = (isset($_POST['pseudo']))?$_POST['pseudo']:null; $pseudo=htmlentities(trim($pseudo)); $password = (isset($_POST['password']))?$_POST['password']:null; $password = sha1($password); $anneNaiss = (isset($_POST['anneeNaiss']))?$_POST['anneeNaiss']:null; $anneeNaiss = htmlspecialchars($_POST['anneeNaiss']); $email = (isset($_POST['email']))?$_POST['email']:null; $email = htmlspecialchars($_POST['email']); // On rend inoffensives les balises HTML que le visiteur a pu rentrer $telephone = (isset($_POST['telephone']))?$_POST['telephone']:null; $telephone = htmlspecialchars($_POST['telephone']);// On rend inoffensives les balises HTML que le visiteur a pu rentrer $masquerTel = (isset($_POST['masquerTel']))?$_POST['masquerTel']:null; $region = (isset($_POST['region']))?$_POST['region']:null; $cle = sha1(microtime(TRUE)*100000); $actif = 0; // requête pour l'insertion du producteur en base $req = "insert into membres values(null,:pseudo,:password,:annee_naissance,:email,:telephone,:masquerTel,:region,CURDATE(),:cle,:actif)"; // on prépare le traitement de la requête $stm=$conn->prepare($req); // Tentative d'insertion en base d'un nouveau producteur en utilisant le mode transactionnel // bloc try ... catch() $response = array('type'=>'', 'message'=>''); try { // on associe les marqueurs nommés avec les variables crées plus haut $stm->bindParam(':pseudo', $pseudo, PDO::PARAM_STR); $stm->bindParam(':password', $password, PDO::PARAM_STR); $stm->bindParam(':annee_naissance', $anneeNaiss, PDO::PARAM_STR); $stm->bindParam(':email', $email, PDO::PARAM_STR); $stm->bindParam(':telephone', $telephone, PDO::PARAM_STR); $stm->bindParam(':masquerTel', $masquerTel, PDO::PARAM_STR); $stm->bindParam(':region', $region, PDO::PARAM_STR); $stm->bindParam(':cle', $cle, PDO::PARAM_STR); $stm->bindParam(':actif', $actif, PDO::PARAM_INT); // exécution de la requête $stm->execute(); // on affiche un message $response['type'] = 'success'; $response['message'] = 'Thank-You for submitting the form!'; //print '<div style="color:#132959">Inscription réussie! <br />Un email de confirmation est en cours d\'envoi ... </div>'; //header( "refresh:3;url=http://localhost/clothesBusiness/index.php" ); } catch(PDOException $e) { // on affiche un message d'erreur print '</br>'; $response['type'] = 'error'; $response['message'] = $e->getMessage(); print "Erreur lors de l'insertion en base !: ". $e->getMessage() . "</br>"; header( "refresh:7;url=http://localhost/clothesBusiness/index.php" ); } // fin bloc try ... catch() print json_encode($response); exit; ?>
inc_verification.php, le code appelant le fichier inc_ajoutMembre
Code:
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 <?php /* script vérifiant la validité des informations saisis par l'utilisateur **/ /* si la variable submit est définie, on inclus le fichier permettant l'injection SQL vérifier que le champ submit du formulaire possède l'attribut name="submit" vérification de la validité des valeurs des champs saisis par l'utilisateur **/ if(isset($_POST['password']) && isset($_POST['verifPassword'])) { // si toutes les valeurs des champs sont définies if(!empty($_POST['password']) && !empty($_POST['pseudo'])) { // si la valeur des champs login et password ne sont pas vides alors if($_POST['password'] == $_POST['verifPassword']) { // si les valeurs des champs sont équivalentes alors // filtre de validation d'une adresse email (cf. Manuel PHP) if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { // si le champ email est bien définie alors if (isset($_POST['submit'])) { // si le bouton submit est définie require_once 'inc_ajoutMembre.php'; // inclusion du script d'ajout d'un producteur en base } // au clique sur le bouton submit j'inclus le script d'injection SQL } else { // sinon print '<div style="color:#B9121B">Votre adresse email est invalide ! </div>'; // affichage d'un message d'avertissement pour l'adresse email header( "refresh:2;url=http://localhost/clothesBusiness/index.php" ); // redirection vers la page d'adhesion } //if(filter_var()) } else { print '<div style="color:#B9121B">Vos mots de passe ne correspondent pas ! </div>'; // affichage d'un message d'avertissement pour les mots de passe header( "refresh:2;url=http://localhost/clothesBusiness/index.php" ); } } else { print '<div style="color:#B9121B">Votre login et/ou votre mot de passe sont vides ! </div>'; // affichage d'un message d'avertissement pour les mots de passe header( "refresh:2;url=http://localhost/clothesBusiness/index.php" ); } // fin if(!empty($_POST['password']) && !empty($_POST['login'])) } ?>
la partie success du fichier afficherZoneRegister.js ne s'effectue jamais et le print présent dans le fichier inc_ajoutMembre s'affiche à chaque fois.
Merci d'avance.
Transact.