Voici ma page de traitement d'inscription à mon site
Je vous explique le 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
38
39
40 <?php session_start(); $log=$_POST['Pseudo']; $mdp=$_POST['password']; $mail=$_POST['mail']; $langue=$_COOKIE['langue']; //connection base require_once("./../BD/connect.php"); //inclusion du fichier connect.php $connexion = mysqli_connect(SERVEUR,NOM,PASSE,BASE); if(!$connexion) //si erreur { if($_COOKIE['langue']=="French"){ echo "Désolé, connexion à ".SERVEUR." temporairement impossible !"; echo "Essayez plus tard !"; } if($_COOKIE['langue']=="English"){ echo "Sorry, connection to ".SERVEUR." isn't available for the moment !"; echo "Try later !"; } } //CONNEXION OK $requete="select pseudo from Utilisateur "; $resultat=mysqli_query($connexion,$requete); while($emp=mysqli_fetch_assoc($resultat)) { if($emp['pseudo']==$log){ $_SESSION['wrongUser']=$log; header('Location: inscription.php'); //si pseudo déjà pris on repart à l'inscription } } //on s'inscrit si pseudo libre $inscription="insert into Utilisateur(pseudo,mdp,mail,langue,avatar,nbFile,nbCom) values ('$log','$mdp','$mail','$langue','',0,0)"; $resultat=mysqli_query($connexion,$inscription) or die ('Erreur SQL ! <br />'.mysqli_error()); ?>
Lorsque je veux m'inscrire, je vérifie si le pseudo est déjà existant dans la base.
Si c'est le cas je redirige l'utilisateur vers ma page d'inscription.
Et si ce n'est pas le cas j'inscris l'utilisateur.
D'un point de vue utilisateur ça semble fonctionner, mais en faisant des test j'ai vu des anomalies dans ma base.
Lorsqu'un utilisateur tente de s'inscrire avec un pseudo déjà attribué, il est bien redirigé avec le header sur la page d'inscription MAIS l'insertion des données se font quand même dans la base...sa voudrait dire que le header ne stoppe pas le traitement de la page et je trouve ça vraiment bizarre...alors je pourrais régler le problème avec une simple variable fonctionnant comme un bool mais..j'ai l'impression que ça ne ferait que cacher un problème que je ne vois pas...
EDIT: Je viens tout juste de faire migrer de my_sql à my_sqli, donc si vous voyez des problèmes liés à ce genre de fonction dans le code, j'aimerais bien savoir aussi
En outre il y a un truc que je ne comprends pas, sous my sql, pour vérifier la connexion j'aurais eu un truc de ce style là
En fait, je pouvais déterminer si l'erreur provenait du serveur ou de la base en elle même...avec my sqli cette distinction me semble impossible à faire et je trouve ça pas très cool...ou alors j'ai oublié un truc je ne sais pas..
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 $connexion = mysql_pconnect(SERVEUR,NOM,PASSE); if(!$connexion) //si erreur { if($_COOKIE['langue']=="French"){ echo "Désolé, connexion à ".SERVEUR." temporairement impossible !"; echo "Essayez plus tard !"; } if($_COOKIE['langue']=="English"){ echo "Sorry, connection to ".SERVEUR." isn't available for the moment !"; echo "Try later !"; } } if(!mysql_select_db(BASE,$connexion)) //si erreur connexion à la base { if($_COOKIE['langue']=="French"){ echo "Désolé, accès à la base ".BASE."impossible"; echo "Essayez plus tard !"; exit; } if($_COOKIE['langue']=="English"){ echo "Sorry, access to the database ".BASE."isn't available for the moment !"; echo "Try later !"; exit; } }
Partager