Vérifier l'existence d'un utilisateur

Flo86
Invité n'ayant pas de compte PHPfrance

05 août 2005, 01:58

Bonjour,
Je souhaiterais créer une fonction qui vérifie si invité qui écrit un article sur mon site ne "pique" pas le nom d'un membre déjà inscrit.
J'ai donc créé ce petit bout de code :
<?
$sql = "SELECT login FROM ma_base";
$result = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$row = mysql_fetch_array($result);
if($row['login']==$_POST['pseudo']) {
echo "NON ! ce nom d'utilisateur existe déjà" }
?>

Mais ça ne marche pas...
Comment faire ?

Eléphant du PHP | 417 Messages

05 août 2005, 06:15

Salut. D'abord, clarifions quelques points.

1- Si "login" serait le nom du nouveau utilisateur, dans ce cas,
$_POST['pseudo'] provient d'ou?
2- Est-ce que "login" est un champs qui existe réellement dans ta base (parce que tu l'inclus dans ta requête)? Et pseudo?
3- Pourquoi tu utilises mysql_fetch_array si ton objectif est de tester l'occurence d'un seul champs et d'une seule ligne dans ta base? Un mysql_num_rows aurait suffi, non?
4- Et finalement, d'après la logique que je perçois de ton bout de code, qu'arrive-t-il si un "vrai' membre se connecte, il risque d'être "refusé" même s'il a le bon login?

Bref, donnes-nous un petit plus de précisions sur ce que tu souhaites faire, et on pourrait mieux t'aider.

Mammouth du PHP | 19672 Messages

05 août 2005, 07:45

J'ajouterais que si tu veux éviter l'usurpation d'identité, un mot de passe serait utile en plus du pseudonyme.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Flo86
Invité n'ayant pas de compte PHPfrance

05 août 2005, 13:13

Re-bonjour, et merci pour votre aide, c'est vrai que mon premier message n'est pas vraiment clair.
Donc, en fait, j'ai un formulaire qui permet de publier des articles : les membres peuvent bien entendu poster, mais les non-membres aussi.
$_POST['pseudo'], c'est le pseudo avec lequel l'utilisateur envoie l'article... Dans ce cas, le membre n'est pas connecté en tant que membre (car sinon, une session est ouverte, et l'utilisateur n'a pas besoin d'entrer son pseudo...).
Sur la page de validation de l'article, j'aimerais vérifier que cet utilisateur qui n'est pas connecté, ne pose pas avec le pseudo d'un membre...
"login", c'est le nom du champ "ma_table" qui contient tous les membres du site,
J'aimerais donc vérifer que $_POST['pseudo'] soit différent de tous les "login" avant de pouvoir poursuivre la publication de l'article...

En espérant avoir été plus clair :)

Eléphant du PHP | 147 Messages

05 août 2005, 13:38

Une requete du genre

Code : Tout sélectionner

SELECT login FROM ma_base WHERE login = $_POST[login]
Ensuite tu compte le nombre de resultat, si il y en a 1 tu rejette sinon c'est ok

Mammouth du PHP | 543 Messages

05 août 2005, 13:57

ne pas oublier les ' quand on verifie une égalité avec une chaine

Eléphant du PHP | 147 Messages

05 août 2005, 14:06

C'est vrai j'ai taper sa vite fait donc j'assume l'entière responsabilité de mon erreur

Administrateur PHPfrance
Administrateur PHPfrance | 250 Messages

05 août 2005, 14:26

ne pas oublier les ' quand on verifie une égalité avec une chaine
et aussi et surtout ne pas faire confiance a ce qui provient de l'utilisateur
si dans la requete

Code : Tout sélectionner

"SELECT login FROM ma_base WHERE login = '".$_POST['login']."'";
$_POST['login'] contient

Code : Tout sélectionner

admin' OR 1 IS NOT NULL;#
alors ta requete devient:

Code : Tout sélectionner

SELECT login FROM ma_base WHERE login = 'admin' OR 1 IS NOT NULL;#'
ce qui te retournera le premier enregistrement qui sera dans 95 % des cas celui de l'admin...

verifiez toujours les données (provenant des utilisateurs)...

Mammouth du PHP | 543 Messages

05 août 2005, 14:32

le bon vieux addslashes() ^^

Invité
Invité n'ayant pas de compte PHPfrance

05 août 2005, 14:35

mdr merci, les magic_quotes sont activés de toute façon (je suis en mutualisé)

Mammouth du PHP | 543 Messages

05 août 2005, 14:38

Ca résoud le probleme d'une certaine manière ;)

Flo86
Invité n'ayant pas de compte PHPfrance

05 août 2005, 14:48

J'ai donc essayé ça :
<?$sql = "SELECT login FROM ma_table WHERE name='".$_POST['login']."'";
$result = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$row = mysql_num_rows($result);
if($row['name']=="1")
{
echo "NON!";
exit;
}
?>
Mais ça ne marche pas... Pas d'erreur SQL, rien ! Et pourtant j'essaye avec un nom qui est dans la base...

(Je précise bien évidement que la connexion est ouverte ^^)[/code]

Invité
Invité n'ayant pas de compte PHPfrance

05 août 2005, 14:52

Désolé, à la 4ème ligne il fallait lire
if($row['login']=="1") 

Mammouth du PHP | 543 Messages

05 août 2005, 15:03

if($row==1)
@++

Mammouth du PHP | 19672 Messages

05 août 2005, 15:07

if($row['login'] == 1)
Enlève les guillemets autour du 1 sinon le nombre sera traité en chaine de caractère et la comparaison retournera FALSE.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: