Page 1 sur 2

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

Posté : 07 déc. 2007, 18:20
par solodown
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

Posté : 07 déc. 2007, 18:39
par Victor BRITO
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.

Posté : 07 déc. 2007, 18:49
par solodown
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;
}

?>

Posté : 07 déc. 2007, 19:11
par Victor BRITO
Avec ma méthode présentée ci-dessus, tu t'épargnes une requête de vérification. :wink:

Posté : 07 déc. 2007, 20:12
par solodown
mais sa mettre un msg a l'utilisateur :?:

Posté : 07 déc. 2007, 20:20
par Victor BRITO
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.

Posté : 07 déc. 2007, 21:08
par solodown
La vous avez carrement viré un if(vérif des passe) non ?

Posté : 07 déc. 2007, 21:09
par Victor BRITO
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:

Posté : 07 déc. 2007, 21:18
par Truc
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

Posté : 07 déc. 2007, 21:29
par solodown
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

Posté : 07 déc. 2007, 22:03
par Truc
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

Posté : 07 déc. 2007, 23:23
par solodown
merci du conseil Truc

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

Posté : 07 déc. 2007, 23:25
par Truc
c'est quoi "l'autre chose" :-k

Posté : 07 déc. 2007, 23:31
par Volkow
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...^^

Posté : 08 déc. 2007, 00:31
par solodown
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)