Vérifier si le pseudo et mail existe déjà avant inscription

Eléphanteau du PHP | 43 Messages

07 déc. 2007, 18:20

Bonjour,

Je pense que le titre de mon message est assez clair, non :?:

Je cherche comment vérifier si le pseudo et mail existe déjà avant l'inscription.

Merci beaucoup d'avance

Mammouth du PHP | 2937 Messages

07 déc. 2007, 18:39

Avec MySQL, il est possible de créer des clés d'index uniques appliquables à une ou plusieurs tables.

Autrement dit :

Code : Tout sélectionner

ALTER TABLE ta_table ADD UNIQUE pseudo (pseudo), ADD UNIQUE email (email);
Si les colonnes concernées sont de type TEXT ou BLOB, il faut ajouter avant la parenthèse fermante des parenthèses contenant un nombre (qui correspondant aux n premiers caractères pris en compte pour vérifier l'unicité de la chaîne de caractères) :

Code : Tout sélectionner

ALTER TABLE ta_table ADD UNIQUE pseudo (pseudo (255)), ADD UNIQUE email (email (255));
Pour schématiser :

Code : Tout sélectionner

ALTER TABLE tbl_name ADD UNIQUE index_name (index_col_name)
Ensuite, si quelqu'un réutilise un pseudo et/ou un e-mail déjà enregistrés dans la base de données, la requête SQL d'insertion échouera.

Eléphanteau du PHP | 43 Messages

07 déc. 2007, 18:49

bah c'est pas trop en mysql

je pense avec if() mais sa va faire beaucoup de if non?

exemple de la page
<?php
$pseudo = htmlspecialchars($_POST['pseudo']);
$pass = htmlspecialchars($_POST['pass']);
$pass2 = htmlspecialchars($_POST['pass2']);
$email = $_POST['email'];
$parrain = $_POST['parrain'];
$ip = $_SERVER['REMOTE_ADDR'];
$inscription = time();

if (isset($_POST) && !empty($_POST['pseudo']) && !empty($_POST['pass']) && !empty($_POST['email'])) {
	extract($_POST);
	$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM membres WHERE username=\'' . $pseudo . '\'') or die("Erreur SQL:" . mysql_error()) ;
	$donnees = mysql_fetch_array($retour);
	if ($pass2 != $pass) {
		echo '<p>Vous aves mal retapé votre mot de passe. <a href=\'javascript:history.go(-1)\'>Retour</a></p></p>';
		exit;
	} elseif($donnees['nbre_entrees'] == 0) {
		include("configdebdd.php");
		mysql_query("INSERT INTO membres (username,pass,email,argents,points,inscription, connexion,ip,affichage,statut,idparrain) values ('$pseudo','$pass','$email','','1000','$inscription','','$ip','','1','$parrain')") or die("Erreur SQL:" . mysql_error()) ;
		mysql_query("update membres set points='+500' WHERE username='$parrain'") or die("Erreur màj :" . mysql_error()) ;
		echo '<p>Votre inscription c\'est bien deroule<br />vous pouvez vous connecté <a href=\'my.php\'>Retour</a></p>';
		$Sujet = "Vos identifiants";
		$Message = "<p>Bonjour <b>$pseudo</b> et bienvenue sur .........</p><p>&Agrave; bient&ocirc;t,<br>Le staff</p>";
		envoimail($email,$Sujet,$Message);
	}else{
		echo '<p>Pseudo d&eacute;j&agrave; pris</p>';
	}
} else {
	echo '<p>Vous avez oublié de remplir un champ. <a href=\'javascript:history.go(-1)\'>Retour</a></p>';
	exit;
}

?>

Mammouth du PHP | 2937 Messages

07 déc. 2007, 19:11

Avec ma méthode présentée ci-dessus, tu t'épargnes une requête de vérification. :wink:

Eléphanteau du PHP | 43 Messages

07 déc. 2007, 20:12

mais sa mettre un msg a l'utilisateur :?:

Mammouth du PHP | 2937 Messages

07 déc. 2007, 20:20

mais sa mettre un msg a l'utilisateur :?:
Avec le code ci-dessous
<?php
$pseudo = htmlspecialchars($_POST['pseudo']);
$pass = htmlspecialchars($_POST['pass']);
$pass2 = htmlspecialchars($_POST['pass2']);
$email = $_POST['email'];
$parrain = $_POST['parrain'];
$ip = $_SERVER['REMOTE_ADDR'];
$inscription = time();

if (isset($_POST) && !empty($_POST['pseudo']) && !empty($_POST['pass']) && !empty($_POST['email'])) {
	extract($_POST);
	include("configdebdd.php");
	$resultat = mysql_query("INSERT INTO membres (username,pass,email,argents,points,inscription, connexion,ip,affichage,statut,idparrain) values ('$pseudo','$pass','$email','','1000','$inscription','','$ip','','1','$parrain')") or die("Erreur SQL:" . mysql_error()) ;
	if (mysql_insert_id () == 0)
	{
		echo '<p>Pseudo d&eacute;j&agrave; pris</p>';
	}else{
		mysql_query("update membres set points='+500' WHERE username='$parrain'") or die("Erreur màj :" . mysql_error()) ;
		echo '<p>Votre inscription c\'est bien deroule<br />vous pouvez vous connecté <a href=\'my.php\'>Retour</a></p>';
		$Sujet = "Vos identifiants";
		$Message = "<p>Bonjour <b>$pseudo</b> et bienvenue sur .........</p><p>&Agrave; bient&ocirc;t,<br>Le staff</p>";
		envoimail($email,$Sujet,$Message);
	}
} else {
	echo '<p>Vous avez oublié de remplir un champ. <a href=\'javascript:history.go(-1)\'>Retour</a></p>';
	exit;
}

?>
Le message "Pseudo déjà pris" s'affichera.

Eléphanteau du PHP | 43 Messages

07 déc. 2007, 21:08

La vous avez carrement viré un if(vérif des passe) non ?

Mammouth du PHP | 2937 Messages

07 déc. 2007, 21:09

La vous avez carrement viré un if(vérif des passe) non ?
J'en ai viré un pour en mettre un autre, qui vérifie s'il y a eu insertion ou non. :wink:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 déc. 2007, 21:18

La vous avez carrement viré un if(vérif des passe) non ?
J'en ai viré un pour en mettre un autre, qui vérifie s'il y a eu insertion ou non. :wink:
Faudrait peut être tout de même le remettre ce test sur la vérification (égalité) des 2 mots de passes "saisis" par l'utilisateur. :wink:

Par contre à quoi correspond ceci dans la requête UPDATE

Code : Tout sélectionner

set points='+500'

un "+500" :-k

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 43 Messages

07 déc. 2007, 21:29

la a ce que je comprends bien la

Il insert puis vérife :?:

Par contre à quoi correspond ceci dans la requête UPDATE

Code : Tout sélectionner

set points='+500'

un "+500" :-k
ajout 500 points au filleul

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 déc. 2007, 22:03

la a ce que je comprends bien la

Il insert puis vérife :?:
Oui si tu as suivis les conseils de Victor BRITO l'insertion en base ne se fera pas puisque le champ pseudo est décalré "unique" donc qui dit pas d'insertion dit mysql_insert_id() renvoit 0.

Pour l'ajout tu fais erreur:

Code : Tout sélectionner

set points += 500
fonctionnera mieux... avant tu ajoutais la chaine de caractère "+500" au champ points

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 43 Messages

07 déc. 2007, 23:23

merci du conseil Truc

Pour l'autre chose, j'ai pas tres bien compris :oops:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 déc. 2007, 23:25

c'est quoi "l'autre chose" :-k

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 75 Messages

07 déc. 2007, 23:31

Moi pour la vérification d'un pseudo, d'un email déjà existant et d'un champ "parrainage" j'utilise cela:

$pseudo = $_POST['pseudo'];
$mdp = $_POST['mdp'];
$email = $_POST['email'];
$date = date("d-m-Y");
$parrain = $_POST['parrain'];
$pays = $_POST['pays'];

// on regarde si le pseudo existe déjà
    $sql = "SELECT id FROM membre_tbl WHERE pseudo='$pseudo'";
    $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
    
    // on compte le nombre de résultats
    $res = mysql_num_rows($req);

    if($res!=0)  // le pseudo existe déjà, on affiche un message d'erreur
        {
        ?>
		<script language="JavaScript">
document.location.href="inscription.php?pseud=Le pseudo existe déjà!&#haut";
</script>
<?php
        }
    else  // Le pseudo n'existe pas, on continue la vérification
        {
		
		$sql = "SELECT id FROM membre_tbl WHERE email='$email'";
    $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
    
    // on compte le nombre de résultats
    $res = mysql_num_rows($req);

    if($res!=0)  // l'email existe déjà, on affiche un message d'erreur
        {
        ?>
		<script language="JavaScript">
document.location.href="inscription.php?mail=Cette e-mail est déjà pris!&#haut";
</script>
<?php
        }
    else  // L'email n'existe pas, on continue la vérification
        {
		$sql = "SELECT id FROM membre_tbl WHERE pseudo='$parrain'";
    $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
    
    // on compte le nombre de résultats
    $res = mysql_num_rows($req);

    if($res==0)  // le parrain n'existe pas, on affiche un message d'erreur
        {
        ?>
		<script language="JavaScript">
document.location.href="inscription.php?parra=Ce parrain n'existe pas!&#haut";
</script>
<?php
        }
    else  
        {

		// on crée la requête SQL
$sql = "INSERT INTO membre_tbl(id,pseudo,mdp,email,date,parrain,points,pays) VALUES('','$pseudo','$mdp','$email','$date','$parrain','','$pays')";

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

		// on crée la requête SQL
$sql = "UPDATE membre_tbl SET points=points+500 WHERE pseudo='$parrain'";

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

// on ferme la connexion à mysql
mysql_close();
Bon après je ne sais pas si c'est très sécurisé mais c'est ce que j'utilise et ça marche très bien! CHez moi en tout cas...^^

Eléphanteau du PHP | 43 Messages

08 déc. 2007, 00:31

Pardon :oops: truc

Pour la vérifier si le pseudo et mail existe déjà avec d'inscrire un membre

edit Volkow ahhh !! tu fait une vérif dans une vérif, pas con sa, je vais voir(je vois qu'on est dans la même categorie de site, sympa sa)