Eviter le duplicate d'un pseudo

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Eviter le duplicate d'un pseudo

par raptor » 18 juil. 2005, 09:39

hello,

encore une ptite optimisation

Code : Tout sélectionner

$query = "insert into person (pseudo) values ('".$pseudo."')";

@+

par starkeus » 17 juil. 2005, 21:05

:arrow: Ouai il a oublié, en simplifiant tu peux avoir ca:
<?
//pseudo issu d'un formulaire posté donc on utilise $_POST mais tu peux utiliser GET aussi comme on t'a dit précédemment 
if (isset($_POST['pseudo']))
{
$pseudo=addslashes($_POST['pseudo']);


$myhote="******";
$myuser="*****";
$mypass="*****";
$base_id = mysql_connect($myhote, $myuser,$mypass);
if (!$base_id)
{
	echo "Connexion à la base de données impossible !";
}

mysql_select_db("xvices");

// on vérifie si le pseudo n'est pas utilisé -- simplifie la requete on retourne l'id seulement et pas de calcul car mysql_num_rows le fait.
$req_verif = "SELECT id FROM person WHERE pseudo = '".$pseudo."'";

// exécution de la requête
$exec_verif = mysql_query($req_verif) or die(mysql_error()); 

//On compte le nombre de résultat retourné par la requete précédente
$nb= mysql_num_rows($exec_verif)

//si $nb=0 alors ce pseudo est libre sinon pseudo déjà utilisé.
if ($nb==0)
{
//pseudo libre
$query = "insert into person values ('"."','".$pseudo."')";
$result = mysql_query($query) or die(mysql_error()); 

}
else
{
//pseudo deja utilisé
echo "Ce pseudo est déjà utilisé, vous devez en choisir un autre.";
}


}
else{
//fin du 1er if vérifiant l'existence de la variable $_POST['speudo']
echo "Vous n'avez pas entrer de pseudo.<br>"."Veuillez revenir en arriere et entrer un pseudo.";
exit();
}
?>
Voilà en espérant ne pas m'être planté.
:) Ca te paraitra un chouillat plus clair certainement. :wink:

par pjl » 17 juil. 2005, 15:43

Je n'ai pas compris cette portion de code :
<?php
mysql_query($sql) or die(mysql_error());
?>
Je ne vois pas ou tu donnes une valeur à $sql.

par ouckileou » 17 juil. 2005, 15:39

je n'ai pas les mains dans le cambouis depuis tant d'années, si je dis que c'est simple c'est que tu as déjà manipulé des variables et dialogué avec une base de données donc tu devrais t'en sortir ;)

déjà prend l'habitude d'indenter le code, de décaler le code qui suit un if, un while... etc, c'est plus lisible quand tu as plusieurs conditions imbriquées.
<?
if (!$pseudo)
{
	echo "Vous n'avez pas entrer de pseudo.<br>"."Veuillez revenir en arriere et entrer un pseudo.";
	exit;
}

$pseudo = addslashes($pseudo);

$myhote="******";
$myuser="*****";
$mypass="*****";
$base_id = mysql_connect($myhote, $myuser,$mypass);
if (!$base_id)
{
	echo "Connexion à la base de données impossible !";
}

mysql_select_db("xvices");

// on vérifie si le pseudo n'est pas utilisé
$req_verif = "SELECT COUNT(*) AS nb_compte FROM person WHERE pseudo = '".$pseudo."'";
// exécution de la requête
$exec_verif = mysql_query($req_verif);
// récupération du résultat dans un tableau associatif
$resultat = mysql_fetch_array($exec_verif);
// s'il n'existe aucun compte qui utilise ce pseudo c'est ok
if ($resultat["nb_compte"] == 0) {	
	$query = "insert into person values ('"."','".$pseudo."')";
	$result = mysql_query($query);
	if ($result)
		echo "Données bien envoyées.";
} else {
	echo "Ce pseudo est déjà utilisé, vous devez en choisir un autre.";
}

mysql_query($sql) or die(mysql_error());
?>
question : tu récupères directement la variable $pseudo de ton formulaire ?
si celui-ci utilise la méthode GET, tu dois récupérer la valeur de pseudo comme ça :
$pseudo = $_GET['pseudo'];
si la méthode est POST, même chose mais avec $_POST

par Cyrus » 17 juil. 2005, 15:26

Oui lol c toujours simple quand on a les mains dans le cambuits depuis des années :wink:
<? if (!$pseudo)
{
echo "Vous n'avez pas entrer de pseudo.<br>"."Veuillez revenir en arriere et entrer un pseudo.";
exit;
}
$pseudo = addslashes($pseudo);

$myhote="******";
$myuser="*****";
$mypass="*****";
$base_id = mysql_connect($myhote, $myuser,$mypass);
if (!$base_id)
{
echo "Connexion à la base de données impossible !";
}

mysql_select_db("xvices");
$query = "insert into person values ('"."','".$pseudo."')";
$result = mysql_query($query);
if ($result)
echo "Données bien envoyées.";


?>
<?php 
mysql_query($sql) or die(mysql_error()); 
?>  
Voila mon bout de code si tu vois mieux, enfin c assez difficile pour moi d'appliquer ta reponse

merci encore

par ouckileou » 17 juil. 2005, 15:24

si tu peux poster du code ici, mais pense à l'encadrer des balises [ php][/php] (il y a un bouton au dessus de la fenêtre d'édition du message)

mais c'est très simple :

- tu récupère ton formulaire d'inscription, donc une variable $login
- tu fais la test donc je t'ai parlé : requête sur ce login, récupération du nombre
-> si 0 tu fais la création du compte
-> sinon tu renvoies au formulaire avec un message d'erreur

par Cyrus » 17 juil. 2005, 15:19

Cool pour la reponse rapide, merci beaucoup

Par contre je suis vraiment debutant en php, alors ce que tu viens de m'indiquer est un peu vague

Je sais pas si on peut poster des morceaux de code source ici, que tu vois a quoi ressemble mon script d'insertion.

@+

par ouckileou » 17 juil. 2005, 15:03

si ton champ est unique tu peux récupérer le numéro de l'erreur renvoyée (le duplicata doit avoir un code précis) et le tester

soi tu fais avant ton insertion cette requête :
$requete = "SELECT COUNT(*) AS nb_compte FROM comptes WHERE login = '".$login."'";
qui te renverra le nombre de compte qui utilisent le pseudo choisi par l'utilisateur
si ce nombre est supérieur à 0, tu lui demandes de changer ;)

Eviter le duplicate d'un pseudo

par Cyrus » 17 juil. 2005, 14:54

Salut a tous,

Voila je debute en php, mon premier script permet a un internaute d'envoyer un pseudo vers ma base de donnée. tout fonctionne sauf qu'on peut envoyer toujours le meme pseudo.

J'ai alors ajouter un UNIQUE dans la base de donnée et la on peut plus envoye deux fois le meme pseudo ( normal me direz vous ;-) )

Seulement j'aimerais que sur la page du site cela soit dis a l'internaute, mais je sais pas trop comment faire.

merci par avance de votre aide.

@+