comment faire pour vérifier qu'un parrain existe?

comment faire pour vérifier qu'un parrain existe? - PHP - Programmation

Marsh Posté le 26-02-2006 à 17:12:35    

Salut à tous :)
 
J'ai quelques difficultés à mettre en place une boucle qui permet de vérifier si un parrain existe lors d'une inscription.
 
elseif($_POST['parrain'] == "" )
 {
 header("location:inscription.php?erreur=parrain" );
 $requete_parrain = mysql_query("SELECT pseudo FROM utilisateur WHERE pseudo='".$_POST['parrain']."'" );
 while($parrain = mysql_fetch_array($requete_parrain))
 {
 if(empty($parrain['pseudo']))
 {
 header("location:inscription.php?erreur=parrain" );
 }
 }
 }
 
L'inscription se valide quand meme avec un parrain fictif
J'espère que l'on pourra m'aider
Si j'ai oublié de préciser quelque chose dite le moi :)


---------------
http://forum.hardware.fr/hardwaref [...] 1293-1.htm
Reply

Marsh Posté le 26-02-2006 à 17:12:35   

Reply

Marsh Posté le 26-02-2006 à 18:16:33    

Vu ta requette, un simple mysql_num_rows() suffira : http://fr.php.net/manual/fr/functi [...] m-rows.php
Si la valeur retourné par mysql_num_rows est égale à 0 , alors le parain n'existe pas et si c'est supérieur à 0 alors c'est qu'il existe.
 
En général, pour ce genre de vérification, on demande à la base de donnée de nous dire le nombre de ligne correspondant au critére de recherche ( select count(*) nb from ... ) et on regarde le contenu de la "colone" nomé "nb". C'est plus propre vu qu'on retourne la valeur utile. C'est peut être aussi plus rapide mais ca demande un peu plus de code.
 
 
PS : Avec le code que t'avais fait, tu ne passais jamais dans le while quand le parain n'existe pas vu que mysql ne te retournais aucune donnée et donc tu ne passais jamais par le "header" de redirection. De plus même si t'envoie un header de redirection au navigateur, le serveur continuera à exécuter le reste du code vu qu'il ne se préocupe pas du contenu des données envoyé au navigateur.

Message cité 1 fois
Message édité par omega2 le 26-02-2006 à 18:19:29
Reply

Marsh Posté le 26-02-2006 à 18:21:49    

omega2 a écrit :

En général, pour ce genre de vérification, on demande à la base de donnée de nous dire le nombre de ligne correspondant au critére de recherche ( select count(*) nb from ... ) et on regarde le contenu de la "colone" nomé "nb". C'est plus propre vu qu'on retourne la valeur utile. C'est peut être aussi plus rapide mais ca demande un peu plus de code.


Ou bien alors on met le parrain en FK de l'utilisateur, on insère le tout (parrain compris) et l'insert se vautre si le parrain est invalide, problème rêglé :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 26-02-2006 à 18:25:17    

masklinn > Certe, moi, je me suis limité aux solutions 100% PHP, mais c'est vrai qu'une "foreign key" (clé étrangére) dans la base de donnée est une autre solution et qu'elle est sans risque celle là.
Encore faut il que le parain soit obligatoire ce qui n'est pas forcément le cas même si dans le cas de "cvex" ca semble être le cas.

Reply

Marsh Posté le 26-02-2006 à 18:47:36    

Oui le parrain est obligatoire dans mon cas
 
elseif($_POST['parrain'] == "" )
 {
 header("location:inscription.php?erreur=parrain" );
 $test_parrain = mysql_num_rows(mysql_query("SELECT pseudo FROM utilisateur WHERE pseudo='".$_POST['parrain']."'" ));
 if(test_parrain == 0)
 {
 header("location:inscription.php?erreur=parrain" );
 }
 }


---------------
http://forum.hardware.fr/hardwaref [...] 1293-1.htm
Reply

Marsh Posté le 26-02-2006 à 19:00:40    

au fait, tu as conscience que tu prépares une magnifique faille par SQL injection avec ta query?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 26-02-2006 à 19:14:04    

a bon?
Et on compte faire comment pour la corriger?
J'y connais rien en faille php
 
Edit : J'ai regardé ce que ca donne et je ne trouve pas de faille dans ma requete étant donné que je n'utilise pas *
C'est dans le $_POST qui pose le prob?


Message édité par cvex le 26-02-2006 à 19:35:18

---------------
http://forum.hardware.fr/hardwaref [...] 1293-1.htm
Reply

Marsh Posté le 26-02-2006 à 19:51:12    

demande toi ce qui se passe si le contenu de $_POST['parrain'] est un truc du genre:

Code :
  1. ' OR 1=1; drop table utilisateur; --


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 26-02-2006 à 19:59:14    

addslashes($_POST['parrain'])
 
C'est mieux?


---------------
http://forum.hardware.fr/hardwaref [...] 1293-1.htm
Reply

Marsh Posté le 26-02-2006 à 20:16:32    

non, il faut utiliser mysql_real_escape_string [:petrus75] (non c'est pas une blague)
 
et unquoter si les magic_quotes sont activées [:petrus75]
 
Ou alors utiliser mysqli* et les prepared statements si dispo (il faut PHP5)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 26-02-2006 à 20:16:32   

Reply

Marsh Posté le 26-02-2006 à 20:29:17    

Merci pour ton aide :p
 
J'ai trouvé un truc interressant :
http://www.nexen.net/index.php?opt [...] string.php
 
Je le diffuse si jamais quelqu'un passe et se pose des question ^^


Message édité par cvex le 26-02-2006 à 20:29:34

---------------
http://forum.hardware.fr/hardwaref [...] 1293-1.htm
Reply

Marsh Posté le 26-02-2006 à 20:30:23    

http://fr2.php.net/manual/fr/funct [...] string.php [:petrus75]
http://fr2.php.net/manual/en/funct [...] string.php [:petrus75]


Message édité par masklinn le 26-02-2006 à 20:30:45

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed