Page 1 sur 1

Enregistrement des membres.

Posté : 14 nov. 2014, 20:51
par Max2000
Bonjour,
J'ai créée des codes permettant d' enregistrer un membre dans ma base de données avec mot de passe et pseudo.
Néanmoins ce code comporte le défaut d'accepter des logins indentiques.
Ce qui fait que deux membres peuvent avoir deux pseudo identiques même si leurs mots de passe sont différents!
Alors comment faire en sorte qu'il ne soit pas possible d'accepter deux noms identiques?
Voici le fichier complet:


<meta charset="utf-8">

<?php

if(isset($_POST['submit'])) // Si on clique sur le bouton 'submit' on commence à agir comme ci dessous
{

$username = htmlspecialchars(trim($_POST['username'])); // "htmlspecialchars" pour empêcher tous carractères malveillants et "trim" pour empêcher les espaces.
$password = htmlspecialchars(trim($_POST['password']));
$repeatpassword = htmlspecialchars(trim($_POST['repeatpassword']));
echo $_POST['username'];
if($username&&$password&&$repeatpassword) // Si on a complété tous ces champs là, on continue.
{
if(strlen("$username")>=4)
{
if(strlen("$password")>=6)
{
if($password==$repeatpassword)
{

$password = md5($password); // password est crypté en md5

mysql_connect('localhost','root','');
mysql_select_db('phpmembre');

$query = mysql_query("

INSERT INTO users VALUES('','$username','$password')"); // insert dans la table users les valeurs 'id','username', et 'password'

die(' inscription terminée, vous pouvez vous <a href="login.php">connecter</a>');


}else echo "Les mots de passe ne sont pas identiques!";
}else echo "Le mot de passe est trop court!";
}else echo "Le nom d'utilisateur est trop court!";
}else echo "Veuillez saisir tous les champs!";
}
?>

<title>Inscription</title>
<h1>Inscription</h1>
<form method="post" action="register.php">
<p>Votre nom d'utilisateur</p>
<input type="text" name="username"> <!-- username est un nom de variable correspondant à l'attribut name -->
<p>Votre mot de passe</p>
<input type="passeword" name="password">
<p>Répétez votre mot de passe</p>
<input type="passeword" name="repeatpassword"><br><br>
<input type="submit" name="submit" value="Valider"> <!-- Valider est la valeur de l'attibu value -->

</form>
<a href="login.php">Je possède déjà un compte</a>


Sinon à part ça cela fonctionne impeccablement.
Merci d'avance pour votre aide.

Re: Enregistrement des membres.

Posté : 14 nov. 2014, 22:10
par Nestecha
Déjà utilise mysqli_connect, pas mysql, il faut arrêter d'utiliser ça. Vraiment vraiment.

Ensuite le plus simple pour faire ça, c'est de changer le champ "username" dans ta base de données en "unique". Du coup, il n'acceptera plus un deuxième "username" identique, et l'enregistrement d'un deuxième "username" ne fonctionnera pas.

Si tu veux le faire qu'en PHP, tu peux faire une requête SELECT pour obtenir tous tes champs, puis chercher si $_POST['username'] existe dans ces champs, mais c'est vraiment pas optimal du tout.

Re: Enregistrement des membres.

Posté : 15 nov. 2014, 17:29
par Max2000
Avant d'utiliser mysqli_connect ou PDO, je pense qu'il serait préférable que je maîtrise bien les codes que je découvre.

Comme ici j'ai modifié la ligne 28
INSERT INTO users VALUES('','$unique','$password')");
en remplaçant $username par $unique. Et après avoir remplacé le champ de ma table users qui se nomme username par unique.

Mais voici le message qui m'est indiqué:
Image

Ensuite quand je clique sur "connecter" apparait la page "login.php" afin d'établir une connexion.Mais lorsque j'entre le pseudo et le mot de passe, je ne peux pas me connecter car il m'est retourné nom ou mot de passe utilisateur incorrect.Alors que j'entre bien les bonnes infos!

De plus est ce normal que dans ma table au niveau du champ unique les pseudos ne soient plus visibles?
Néanmoins les id et les mots de passe apparaissent.

Re: Enregistrement des membres.

Posté : 15 nov. 2014, 18:07
par Nestecha
C'est ma faute désolé, je me suis mal fait comprendre.

Tu as dû comprendre qu'il fallait changer le champ "username", enfin le mot "username" en "unique", mais non. "Unique" c'est une propriété propre à un champ. Un champ peut être "unique", "primary" etc...

Donc tu peux laisser "username", mais il faut changer sa propriété en "unique". C'est dans phpmyadmin que tu changes cela.

Re: Enregistrement des membres.

Posté : 15 nov. 2014, 19:34
par Max2000
Ok.
Maintenant j'ai bien compris.
J'ai donc bien modifié le champ username en mode unique.
Puis tenter un test en entrant deux pseudos identiques.
Le deuxième pseudo n'est pas sauvegardé dans la table effectivement.
Néanmoins il faudrait trouver la possibilité de prévenir la personne voulant s'inscrire que sont pseudo est déjà utilisé par un autre inscrit.
Car après avoir cliqué sur ce connecter le message suivant se présente:
"Inscription terminée, vous pouvez vous connecter".
Et bien sûr le nouvel inscrit ne peut pas se connecter car il ne se trouve inscrit dans la base.
Serait il possible d'ajouter un code dans ce fichier présenté ci dessus afin d'indiquer que le candidat à l'inscription ne peut pas valider cette ci car un autre membre possède déjà le même pseudo?
Merci.

Re: Enregistrement des membres.

Posté : 16 nov. 2014, 22:47
par Nestecha
Pour ça, il faut regarder si la query a échoué ou non. Si c'est le cas, tu peux afficher un message d'erreur à l'utilisateur.

Donc quelque chose du genre dans l'idée :

if (!$query) {
echo "Compte déjà existant"
}

Re: Enregistrement des membres.

Posté : 17 nov. 2014, 20:03
par Max2000
Bonsoir.
Suite à ton dernier message, cela fonctionne désormais.
Il me reste à mettre au goût du jour ces quelques lignes de codes avec PDO notamment.
Merci pour ton aide que j'apprécie beaucoup!
Je repasserai sans doute encore ici avec mes codes expliqués comme je l'ai fait.
A la prochaine.
Pour moi c'est résolu.