Je souhaite trouver le moyen de vérifier efficacement les champs de mon formulaire d´inscription à un espace membre. Notamment la date de naissance ( séparée en 3 champs jour, mois et année. D´ailleurs à ce sujet, sous quelle forme l´entrer dans la base de données ? ), un pseudo ( de 4 a 15 caractères alphanumériques), un mot de passe ( de 4 à 8) ainsi qu´une adresse e-mail.
Si quelquu´n pouvait me fournir un code de vérification ( expression régulière ? ?) ça serait vraiment sympa.
Merci d´avance.
@++
Alex6891
pour le mot de passe, utilise la fonction de cryptage md5() qui te fournis un varchar ( 32) : )
pour le pseudo a toi de choisir : )
bah pour vérifier la validité des jours :
if($_POST[´jour´]< 0 or $_POST[´jour´] > 31){
echo ´erreur´;
}
a toi de l´appliquer aux autres : )
oui mais ça c´est pour tester la longueur de la chaine et si elle existe ou pas moi ce que je veux c´est savoir si elle contient pas de caractères spéciaux ni html...
Blawk ou qqun d´autre svp ? ??
Voilà pour l´instant mon script de vérification qui ne marche pas et qui est incomplet, aidez-moi svp à l´améliorer ! merci.
< ?
session_start();
$sexe=$_POST[´sexe´];
$pseudo=$_POST[´pseudo´];
$passe1=$_POST[´passe1´];
$passe2=$_POST[´passe2´];
$email=$_POST[´email´];
$jour=$_POST[´jour´];
$mois=$_POST[´mois´];
$an=$_POST[´annee´];
if(!$sexe){
$merror="Vous n´avez pas spécifié votre sexe ! ";}
else{if(!$jour or ! $mois or ! $an){
$merror="Vous n´avez pas donné une date de naissance correcte ! ";}
else{if(!$pseudo){
$merror="Vous n´avez pas spécifié votre pseudo ! ";}
else{if(!$passe1){
$merror="Vous n´avez pas spécifié votre mot de passe ! ";}
else{if(!$passe2 or $passe1!=$passe2){
$merror="La confirmation de votre mot de passe est erronée ! ";}
else{if($passe1==$pseudo){
$merror="Votre mot de passe doit être différent de votre pseudo ! ";}
else{if(!$email){
$merror="Votre adresse E-mail est invalide ! ";}}}}}}}
$query="SELECT * FROM mb WHERE pseudo=´$pseudo´ or mdp=´$passe1´ or ddn=´$ddn´ or mail=´$email´";
$res=@mysql_query($query);
$ver=@mysql_num_rows($res);
if($ver!=0){$merror="Vous êtes déjà inscrit ! ";}
if($merror){
session_register("sexe");
session_register("pseudo");
session_register("email");
session_register("jour");
session_register("mois");
session_register("an");
session_register("merror");
header(´location:../dir.php?page=inscription´);
}
else{
$query="INSERT INTO mb(´inscrit´,´pseudo´,´mdp´,´sexe´,´ddn´,
´mail´) VALUES ( ´date();´,´$pseudo´,´$passe1´,
´$sexe´,´$ddn´,´$email´)";
$res=@mysql_query($query);
if(!$res){
echo"<b>Problème d´insertion dans la base de données</b><br>";}
else{$ok=1;
session_register("ok");
header(´../dir.php?page=inscription´);}
}
? >
tu peux mettre ca dans un fichier texte stp ?
et l´uploader sur ton site, ou envoie le moi sur :
colasmalaise@wanadoo.fr
je suis pas encore tres fort en PHP, mais ca je comprend tres bien...
dans un fichier texte on verrai mieux car quand on voit:
$merror="Votre adresse E-mail est invalide ! ";}}}}}}}
avec je sais pas combien de } !
et c´est un probleme de SQL ou de PHP ?
@+
et aussi, tu peux m´envoyer le formulaire HTML plz ? ou l´uploader
Voilà, je t´ai fait quelque chose :
Alors il y a plusieurs choses que je ne comprend pas... :
1) Tu mets pleins de else, alors qu´avant, il n´y a pas d´instruction if(). Essaye avec la fonction elseif().
2) Il y aurait une chose plus simple à faire, c´est de mettre toutes les instructions qui suivent le 1er if() dans un seul if(), mais tu n´aurais pas des messages d´erreurs différents. A toi de choisir.
3) Tu dis que les champs fournis ne sont pas corrects, ou vides, mais le script continue, donc, je pense que la fonction exit; s´impose. ; )
4) Qu´est-ce que la variable " $ddn" ? Elle n´a pas l´air d´exister... Mais tu peux peut-être m´expliquer ? ... ; ) Je pense que ddn = date de naissance, c´est ça ? Mais tu ne l´as pas définie, donc elle est nulle. Fais au minimum ça :
$ddn = $jour."/".$mois."/".$an;
elle sera au format 4/11/1989 ( ma date de naissance ; ) )
5) dans : if ( $ver!=0) {
$merror="Vous êtes déjà inscrit ! ";
}
je ne comprens pas le 5) ? ??
POur le 4) je souhaite enregistrer la date de naissance au format mysql donc AAAA-MM-JJ je pense que c ça non ? si oui comment procéder ?
Et euh...c quoi la fonction exit; ? ??
merde ! ca a pas tout écrit !
Alors il y a plusieurs choses que je ne comprend pas... :
1) Tu mets pleins de else, alors qu´avant, il n´y a pas d´instruction if(). Essaye avec la fonction elseif().
2) Il y aurait une chose plus simple à faire, c´est de mettre toutes les instructions qui suivent le 1er if() dans un seul if(), mais tu n´aurais pas des messages d´erreurs différents. A toi de choisir.
3) Tu dis que les champs fournis ne sont pas corrects, ou vides, mais le script continue, donc, je pense que la fonction exit; s´impose. ; )
4) Qu´est-ce que la variable " $ddn" ? Elle n´a pas l´air d´exister... Mais tu peux peut-être m´expliquer ? ... ; ) Je pense que ddn = date de naissance, c´est ça ? Mais tu ne l´as pas définie, donc elle est nulle. Fais au minimum ça :
$ddn = $jour."/".$mois."/".$an;
elle sera au format 4/11/1989 ( ma date de naissance ; ) )
5) dans : if ( $ver!=0) {
$merror="Vous êtes déjà inscrit ! ";
}
tu dis que $merror est égal à " Vous êtes déjà inscrit ! " mais ça ne l´affiche pas...
dis plutôt que $merror=1, puis fait un echo. Comme ça, ensuite, $merror ne sera pas false.
6) Revenons un peu en avant... Dans $query, tu dis que si quelqu´un a le même mot de passe qu´un autre, c´est la même personne. Et si deux personnes choisissent le même mot de passe ? et si tu as 366 membres, Il y a obligatoirement deux qui sont nés le même jour... Donc ne mets que e-mail et pseudo. Et ne dis pas qu´il est déjà inscris, mais que ce pseudo est déjà réservé, il peuvent avoir le même pseudo...
7) Ensuite, dans le if($merror)... Ca ne sert à rien de faire plusieurs sessions pour un seul utilisateur, mets juste le pseudo, et apres tu fais un " SELECT * FROM mb WHERE pseudo="$pseudo"", ça marchera car ta session, si tu la démarre avec session_start, garde la variable, en l´occurrence ici $pseudo.
8) Dans le dernier $query, je sais pas si on a le droit de mettre des fonctions comme tu as mis date(), j´en suis pas sûr aussi... Mais je crois pas...
9) Ensuite tout à la fin, dans le session_register("ok"), $ok=1, mais le session gardera 1, pas le pseudo de la personne !
Voilà, j´ai du faire des erreurs, mais toi aussi ; )
SaMeurw va me corriger si je me suis trompé quelque part ; )
Et Blawk est en vacances ; )
@+ Colas
C´est bon là !
la fonction exit;
arrete le script, il ne continue pas, donc si tu signale qu´un champ est vide, tu le dis et ensuite tu met exit;
comme ca ca ne continue pas le script
je comprends plus rien du tout : tout ça est bien flou pour moi ! !! C´est a m´en cogner la tête contre les murs ! !!!
Voilà mon code changé mais ça affiche toujours " Vous êtes déjà inscrit" en permanence ? ?? j´en peu plus là....
< ?
session_start();
$sexe=$_POST[´sexe´];
$pseudo=$_POST[´pseudo´];
$passe1=$_POST[´passe1´];
$passe2=$_POST[´passe2´];
$email=$_POST[´email´];
$jour=$_POST[´jour´];
$mois=$_POST[´mois´];
$an=$_POST[´annee´];
$ddn=$an."-".$mois."-".$jour;
if(!$sexe){
$merror="Vous n´avez pas spécifié votre sexe ! ";}
else if(!$jour or ! $mois or ! $an){
$merror="Vous n´avez pas donné une date de naissance correcte ! ";}
else if(!$pseudo){
$merror="Vous n´avez pas spécifié votre pseudo ! ";}
else if(!$passe1){
$merror="Vous n´avez pas spécifié votre mot de passe ! ";}
else if(!$passe2 or $passe1!=$passe2){
$merror="La confirmation de votre mot de passe est erronée ! ";}
else if($passe1==$pseudo){
$merror="Votre mot de passe doit être différent de votre pseudo ! ";}
else if(!$email){
$merror="Votre adresse E-mail est invalide ! ";}
if($merror){
session_register("merror");
header(´form.php´);
}
else{
$query="SELECT * FROM mb WHERE pseudo=´$pseudo´ or mdp=´$passe1´
or mail=´$email´";
$res=@mysql_query($query);
$ver=@mysql_num_rows($res);
if($ver!=0){
$merror="Vous êtes déjà inscrit ! ";
session_register("merror");
header(´form.php´)}
else{
$query="INSERT INTO mb ( ´inscrit´,´pseudo´,´mdp´,´sexe´,´ddn´,
´mail´) VALUES ( ´date();´,´$pseudo´,´$passe1´,
´$sexe´,´$ddn´,´$email´)";
$res=@mysql_query($query);
if(!$res){
echo"<b>Problème d´insertion dans la base de données</b><br>";}
else{$ok=1;
session_register("ok");
header(´form.php´);}
}
}
? >
C´est déjà bcp plus clair ! J´étudie ca apres manger...
essaye
if($ver) à la place de if($ver ! =0)
utilise la fonction now() à la place de date et enlève le ´;´ : )
moi je te conseile de donner comme valeur à ddn :
$ddn = mktime(0,0,0,$mois,$jour,$an);
bcp plus facile à manipuler après : )
Et comme je l´ai dis plus haut, CRYPTE les passes : )
Comment crypter les pass ? ? et pourquoi ?
si je te suis SaMeuwr $ddn vaudra quoi après ?
un timestamp unix : )
pour crypter le passe utilise la fonction md5() qui renvoye un varchar(32) : )
SaMauwr ==> J´ai pas voulu lui faire utiliser la fonction mktime(), car il débute, et rique peut-etre de ne pas comprendre tout de suite ; )
Oui, crypte le passe aussi, fait comme sameuwr dit, ou alors plus simple, dans ta requete SQL, tu met password(´$pass1´) mais comme Sameuwr dit c´est mieux ; )
Ensuite pour $ddn enregistre le dans un varchar