Bonjour,
Comment je peux éviter que chaque clic sur le bouton de validation déclenche un nouvel enregistrement?
Bonjour,
Comment je peux éviter que chaque clic sur le bouton de validation déclenche un nouvel enregistrement?
Désolé si j'ai pas été clair
Quand je clique mon bouton "valider" de mon formulaire, tous les données sont bien enrgistrées dans ma bdd.
Voilà comment se présente ma page (je ne mets qu'un controle pour simplifier)
Si je clique une nouvelle fois, les données s'enregistrent une nouvelle fois.
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
38
39
40
41
42 <?php if (isset($_POST['nom'])) $nom = $_POST['nom']; else $nom = ""; if (isset($_POST['valid'])){ if (empty($message)){ if (!empty($nom) && !empty($prenom) && !empty($user) && !empty($pass) && !empty($cp) && !empty($ville) && !empty($mail) && !empty($nom_loc) && !empty($cp_res) && !empty($ville_res) && !empty($date_bail)){ //véfifie si le nom utilisateur est déjà utilisé $sql = mysql_query("SELECT * FROM logging WHERE user LIKE '%$user%'"); if (mysql_num_rows($sql) > 0){ $res = mysql_fetch_array($sql); $userbdd = $res['user']; if ($userbdd == $user){ $message = "Le nom utilisateur est déjà pris. Veuillez en choisir un autre"; } } //enregistrement du membre $user_type = 1; // défini pour les membres indépendants enregistrer_user($user_type, $user, $pass); $id_membre = mysql_insert_id(); $_SESSION['user_type'] = $user_type; $_SESSION['user'] = $user; $_SESSION['id_membre'] = $id_membre; ?> <form name="identité" method="POST" action="index.php?page=inscription_independant"> <table border = 0 style="background-color:white; font-size:11px"> <tr> <td valign="top"> <table border =0 style="background-color:white"> <colgroup width=175px> <tr height=30px> <td colspan=2 align="center"><u>Vos coordonnées</u></td> </tr> <tr> <td align="right">nom* : </td><td> <input type="text" name="nom" value="<?php echo strtoupper($nom); ?>"></td> </tr> <tr height=40px> <td colspan=3 align="center"><input type="submit" name="valid" value="valider votre saisie"></td> </tr> </table> </form>
Je ne vois pas comment éviter ça.
Merci d'avance
Oui Ok je vois mieux, alors regardes cette trame,
a toi de compléter et finaliser
(j'expliques plus bas ..
En premier il y a le GET qui repére le FORM il s'appel "page" dans ton exemple
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
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
71
72
73
74
75 <?php if (isset($_GET['page'])) $page = $_GET['page']; else $page = ""; if (isset($_POST['voir'])) $voir = $_POST['voir']; else $voir = ""; if (isset($_POST['valid'])) $valid = $_POST['valid']; else $valid = ""; if (isset($_POST['nom'])) $nom = $_POST['nom']; else $nom = ""; if (isset($_POST['user'])) $user = $_POST['user']; else $user = ""; if (isset($_POST['prenom'])) $prenom = $_POST['prenom']; else $prenom = ""; if (isset($_POST['pass'])) $pass = $_POST['pass']; else $pass = ""; if (isset($_POST['prenom'])) $prenom = $_POST['prenom']; else $prenom = ""; //====ETC............... $message=""; $Flag=""; //======= premier barage il faut que page=inscription_independant ====== if ($page=="inscription_independant" && $voir!="OK") { //======= deuxieme barage saisies OK ====== if ($nom!="" && $prenom!="" && $user!="" && $pass!="" && $cp!="" ) { //véfifie si le nom utilisateur est déjà utilisé $sql = mysql_query("SELECT * FROM logging WHERE user LIKE '%$user%'"); if (mysql_num_rows($sql) > 0) { $res = mysql_fetch_array($sql); $userbdd = $res['user']; if ($userbdd == $user) { $message = "Le nom utilisateur est déjà pris. Veuillez en choisir un autre";} } if ($message=="") { //enregistrement du membre $user_type = 1; // défini pour les membres indépendants enregistrer_user($user_type, $user, $pass); $id_membre = mysql_insert_id(); $_SESSION['user_type'] = $user_type; $_SESSION['user'] = $user; $_SESSION['id_membre'] = $id_membre; //========= comme tout est OK on bloque==== $flag="O"; } } // fin 2em barage else {$message = "Saisie incomplete";} } // fin 1er barage ?> <form name="identité" method="POST" action="index.php?page=inscription_independant"> <table border = 0 style="background-color:white; font-size:11px"> <tr> <td valign="top"> <table border =0 style="background-color:white"> <colgroup width=175px> <tr height=30px> <td colspan=2 align="center"><u>Vos coordonnées</u></td> </tr> <tr> <td align="right"> <?PHP if ($message!="") echo (" attention: ".$message."<br /> "); if ($flag=="O") echo ("<input type="hidden" name="voir" value="OK"> if ($flag!="O") echo ("<input type="hidden" name="voir" value=""> ?> nom* : </td><td> <input type="text" name="nom" value="<?php echo strtoupper($nom); ?>"></td> </tr> <tr height=40px> <td colspan=3 align="center"><input type="submit" name="valid" value="valider votre saisie"></td> </tr> </table> </form>
donc je ne laisses entrer dans la suite de l'enregistrement que si
page="inscription_independant" mais en plus il faut que ma variable "voir"
ait pour valeur "" car si elle est a "OK" alors on ne fait pas non plus car l'enregistrement est déjas fait![]()
Merci FoxLeRenard.
Je vais mettre tout ça en oeuvre
Comme je ne vais pas faire ça maintenant, j'attends pour le "résolu"
plus simple encore, vu que tu réaffiches ton formulaire à la fin et qu'en plus tu fais un mysql_insert_id(), tu peux tres bien rajouter un <input type="hidden" ..> avec l'ID et check soit si l'id existe dans la DB ou carrément dire que vu que ce champ existe, on ne fait rien
(d'un autre côté, tu lances une $_SESSION direct apres envoie du formulaire, pourquoi ne pas dire "la session existe ? oui => j'envoie pas le form)
Merci pour votre aide.
En fait si tout se passe bien je fais un header('location:index.php?page=accueil'); c'est plus simple et j'affiche directement l'utilisateur.
Merci encore.
Maintenant je dois régler la gestion des mots de passe perdus ou oubliés.
Si vous avez une idée, elle est la bienvenue, mais je vais quand voir comment gérer ça
Ouais header("Location :") FTW ! en fait je le fais toujours apres mes formulaire maintenant, ça m'est meme pas venu à l'idée d'en parler vu que c'est automatique mtn
De plus, ça te permet de pouvoir utiliser tes cookies directement
been si tu les crypte pas c'est simple : tu les renvoies par e-mail
Sinon, tu envoies un mot de passe généré aléatoirement et tu le stock dans un champ "generated_password" (ouais, il vaut mieux pas changer le champ du password courant au cas où des gens mal attentions fairaient des requests à la place d'utilisateurs de ton site)
Merci à toi darkstar
Ben les cookies j'ai jamais utilisé donc ça je verrai après.
Je crois que je ne peux pas envoyer le mot de passe par email, mon champ password est codé.
Ce que je pense faire c'est effectivement envoyer par mail un mot de passe généré de façon aléatoire.
Est ce que tu peux me dire où je peux trouver un tuto sur la génération aléatoire ?
Il existe bien des façons de le faire mais voici une des méthodes les plus courtes
Code php : 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 <?php /** * The letter l (lowercase L) and the number 1 * have been removed, as they can be mistaken * for each other. */ function createRandomPassword() { $chars = "abcdefghijkmnopqrstuvwxyz023456789"; srand((double)microtime()*1000000); $pass = '' ; for($i = 0; $i <= 7; $i++) { $num = rand() % 33; $tmp = substr($chars, $num, 1); $pass = $pass . $tmp; } return $pass; } // Usage $password = createRandomPassword(); echo "Your random password is: $password"; ?>
source
Si t'as du mal à comprendre, hésite pas à demander des explications![]()
J'aimes bien ça aussi
Et pour toi darkstar cette sitation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $key=""; $taille = 5; $chiffre = "123456789"; srand(time()); for ($i=0;$i<$taille;$i++) { $key.=substr($chiffre,(rand()%(strlen($chiffre))),1); } echo $key;
On peut apprendre à un ordinateur à dire : "Je t'aime", mais on ne peut pas lui apprendre à aimer.
Albert Jacquard - Technologie![]()
Merci à vous deux.
Il me reste à monter le mail, mais j'ai encore une question :
L'adresse mail suffit ou conseillez-vous de demander aussi le nom utilisateur ?
En général, l'adresse mail suffit (et parfois on fait des requests pcq on a oublié son pseudo ^^)
Merci darkstar123456,
Je suis entrain de traiter le changement de mot de passe.
Sur la même page je traite l'identification, le changement de mot de passe et le mot de passe oublié.
Chaque option est traitée par un div avec un id.
<div id="div1" class="visible"> qui contient le formulaire d'identification et 2 liens : 1 pour le changement de mot de passe et un pour le mot de passe oublié
<div id="div2" class="hidden"> qui contient le formulaire pour changer le mot de passe
<div id="div3" class="hidden"> qui contient le formulaire pour le mot de passe oublié.
Mon problème est avec le traitement du div2. Si tout est ok, pas deproblème, mais si les mots de passe ne correspondent pas je voudrais réafficher le div2 et là je ne vois pas coment faire (je suppose qu'il faut passer par javascript)
le code du div2Merci d'avance
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 //******************** BLOC DE CHANGEMENT DE MOT DE PASSE ****************** if (isset($_POST['old_pass'])) $old_pass = $_POST['old_pass']; else $old_pass=""; if (isset($_POST['new_pass'])) $new_pass = $_POST['new_pass']; else $new_pass=""; if (isset($_POST['new_pass_bis'])) $new_pass_bis = $_POST['new_pass_bis']; else $new_pass_bis=""; if (isset($_POST['change_password'])){ if ((!empty($old_pass)) && (!empty($new_pass)) && (!empty($new_pass_bis))){ if ($new_pass <> $new_pass_bis){ $message = "Les mots de passe ne correspondent pas !"; } else { //enregistrer le nouveau mot de passe $message ="Le mot de passe a été modifié."; } } } ?> <div id="div2" style="background-color:#00FFFF;" class="hidden"> <p align="center" style="margin-top:35px; margin-left:300px; width:400px; font-family:verdana; font-size:12px"> <form name="idendite" method="POST" action="index.php?page=identite"> <table border=0 style="font-family:verdana; font-size:11px"> <tr height="50px"> <td align="center" colspan="2" style="font-size:12px">Changer le mot de passe</td> </tr> <?php if (empty($user)){ echo "<tr height='30px' valign='top'> <td align='center' colspan='2' style='font-size:12px; color:red'>Vous devez être connecté pour changer le mot de passe.</td> </tr>"; }?> <tr> <td align="right">Mot de passe actuel : </td><td> <input type="password" name="old_pass" value="<?php echo "$old_pass";?>"></td> </tr> <tr> <td align="right">Nouveau mot de passe : </td><td> <input type="password" name="new_pass" value="<?php echo "$new_pass";?>"></td> </tr> <tr> <td align="right">Confirmer le mot de passe : </td><td> <input type="password" name="new_pass_bis" value="<?php echo "$new_pass_bis";?>"></td> </tr> <tr height="50px" valign="bottom"> <td colspan=2 align="center"> <input type="hidden" name="change_password"> <input type="image" src="images/change_password.png" alt="" style="cursor:pointer" /> <img src="images/nul_change_pass.png" alt="" style="cursor:pointer" onclick="javascript:hide('div2','div1', 'div3')" /></td> </tr> </table> </form> </p> </div>
si tu veux vérifier avant l'envoi, oui il te faut du JS.
Sinon, tu n'as qu'à stocker une variable du genre "$confirm_pwd = false" et tu met une condition que si $confirm_pwd est false, alors tu affiche le div2
J'ai essayé ça :Mais ça marche pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 if (isset($_POST['change_password'])){ if ((!empty($old_pass)) && (!empty($new_pass)) && (!empty($new_pass_bis))){ if ($new_pass <> $new_pass_bis){ ?> <script type='text/javascript'>hide('div1','div2','div3')</script><?php $message = "Les mots de passe ne correspondent pas !"; } else { //enregistrer le nouveau mot de passe $message ="Le mot de passe a été modifié."; } } }
Ok mais je dois quand même passer par js non ?
non non, et même ton JS est faux ^^
Pour vérifier par JS il te faut créer une fonction de vérification qui sera appelée au click sur le bouton submit (ou qd on quitte le field de confirmation du password)
// SINON
ben t'envoie ton formulaire, tu fais tes vérifications...
Si le form a été envoyé ET que la confirmation est différente du 1er pwd, alors ton div2 doit etre affiché...
OK pour les vérif, mais je ne vois pas comment afficher le div avec php
J'avais essayé avec js , mon div rest bien visible si les mots ne crrespondent pas mais je peux pas afficher de message et je ne veux pas faire de alert() avec js
voilà ce que j'ai fait. Que la partie concernéeDonc si je peux afficher le div avec php je préfère.
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 **la fonction js*** function valider(id,id1,id2){ var1 = document.change_pass.new_pass.value; var2 = document.change_pass.new_pass_bis.value; if (var1 != var2){ document.getElementById(id).className = "hidden"; document.getElementById(id1).className = "visible"; document.getElementById(id2).className = "hidden"; document.change_pass.texte.value="non"; } else { document.change_pass.texte.value="ok"; document.change_pass.submit(); } } **puis le traitement du formulaire*** if ((!empty($old_pass)) && (!empty($new_pass)) && (!empty($new_pass_bis))){ if ($texte == 'non'){ $message = "<span style='color:red'>Les mots de passe ne correspondent pas !</span>"; } } if ($texte == 'ok'){ //enregistrer le nouveau mot de passe $message= "<span style='color:blue'>Le mot de passe a été modifié.</span>"; } ?> <tr height="50px" valign="bottom"> <td colspan=2 align="center"> <input type="button" name="bouton" value="change" onclick="javascript:valider('div1','div2','div3')"> <input type="hidden" name="texte" value=""> </tr>
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager