[PHP] FCT qui foire

Discussion dans 'Web, design' créé par MbK_, 12 Septembre 2005.

Statut de la discussion:
Fermée.
  1. Offline
    MbK_ Etudjant
    Bon j'en peux plus.


    Ca fais 1h que je suis entrain de tester une fonction (pourtant simple) mais elle ne fonctionne pas!

    Elle sert a me dire si un pseudo (au niveau de l'inscription) est déjà pris ou pas.

    La voici :

    Code:
    	function pseudo_est_dispo($pseudo){
    		bdd();
    		global $prefix_table;
    		$query = "SELECT * FROM ".$prefix_table."membres WHERE pseudo = ".$pseudo."";
    		$query = mysql_query($query);
    		$number = @mysql_num_rows($query);
    		if($number != 0 || isset($number)){
    			return FALSE;
    		}
    		else{
    			return TRUE;
    		}
    	}
    j'ai fait des tests et ca ne va pas. Elle retourne toujours TRUE...


    Que faire?
    MbK_, 12 Septembre 2005
    #1
  2. Offline
    FoX SpeEd Touriste
    essaye en utilisant la fonction pour tout mettre en minuscule dans le pseudo (deso me couvien plus la quelle c'est) car si sa se trouve c'est tou bêtement que tu mes des majuscule parfois et donc il ne va pas le trouver dans la bdd
    FoX SpeEd, 12 Septembre 2005
    #2
  3. Offline
    zoheir cvm.mangaleet()
    c ton if qui est foireux, a ta place je mettrai:

    if(mysql_num_rows($query)) return false
    else return true
    zoheir, 12 Septembre 2005
    #3
  4. Offline
    MbK_ Etudjant
    No ca ne va pas mieux.

    PHP fait la difference entre Maj et Min :x
    MbK_, 12 Septembre 2005
    #4
  5. Offline
    zoheir cvm.mangaleet()
    lol rien à voir :D

    faut que jme mettes au mysql ^_^
    zoheir, 12 Septembre 2005
    #5
  6. Offline
    MbK_ Etudjant
    Bon j'ai mis ca

    Code:
    	function pseudo_est_dispo($pseudo){
    		bdd();
    		global $prefix_table;
    		$query = "SELECT * FROM ".$prefix_table."membres WHERE pseudo = ".$pseudo."";
    		$query = mysql_query($query) or die(mysql_error());
    		if(mysql_num_rows($query) != '1'){
    			return TRUE;
    		}
    		else{
    			return FALSE;
    		}
    	}
    
    et il me retourne une erreur

    En sachant que dans ma BDD, je n'ai rien. D'ou vient l'erreur?
    MbK_, 12 Septembre 2005
    #6
  7. Offline
    zoheir cvm.mangaleet()
    "FROM ".$prefix_table."membres"

    tu es sur que le nom de la table est correcte?

    et surtout n'y a t il pas confusion entre le "pseudo" et "$pseudo" ?

    change le nom de tes variables on ne sait jamais...
    zoheir, 12 Septembre 2005
    #7
  8. Offline
    MbK_ Etudjant
    Bon je suis arrivé a un truc qui va en réécrivant tout.

    Code:
    function pseudo_dispo($pseudo){
    	global $prefix_table;
    	$query1 = "SELECT * FROM ".$prefix_table."membres WHERE pseudo='".$pseudo."'";
    	$query = mysql_query($query1);
    	$number = @mysql_num_rows($query);
    		if ($number != '1'){
    			return TRUE;
    		}
    		else{
    			return FALSE;
    		}
    }
    Ca marche et je sais pas ce que j'ai changé. Et je veux pas le savoir
    :p

    Merci à tous
    MbK_, 12 Septembre 2005
    #8
  9. Offline
    noLain www.wearewise.be
    t'avais simplement oublié les ' ' autour de la variable pseudo dans ta requete.. du coup le server mysql pensait que c'etait un champ de la table ..

    ps: maintenant tu le sais kan meme :D :p
    noLain, 12 Septembre 2005
    #9
  10. Offline
    FoX SpeEd Touriste
    ca c'est ce qui est méga chiant en php lol un ptit guillement et plus rien ne va :D
    FoX SpeEd, 13 Septembre 2005
    #10
  11. Offline
    null ose();
    Code:
    function pseudo_est_dispo($pseudo)
    {
       bdd();
       global $prefix_table;
       
       $sql = mysql_query("SELECT * FROM ".$prefix_table."membres WHERE pseudo = '".$pseudo."' LIMIT 0,1");
       
       if(mysql_num_rows($sql) == 1)
          return FALSE;
       else 
          return TRUE;
    } //end pseudo_est_dispo()
    Comment ça c'est beaucoup plus propre et ça doit marcher. Il faut faire très attention à comment tu traites tes requêtes SQL pour éviter les SQL-Injections !

    PS: c'est plus propre de mettre le "GLOBAL" avant "bdd();" mais ça dépend si on peut en fonction de ton script.
    null, 13 Septembre 2005
    #11
  12. Offline
    WaKaaN JcQL
    Wé, fais gaffe aux injections avec ton code :wink: ...

    sécurise le un peu plus comme dit juste avant moi :wink:
    WaKaaN, 13 Septembre 2005
    #12
  13. Offline
    noLain www.wearewise.be
    ne faisont pas les choses à moitiés alors:

    Code:
    function pseudo_est_dispo($pseudo)
    {
       bdd();
       global $prefix_table;
       
       $pseudo = mysql_real_escape_string(htmlspecialchars($pseudo));
       $sql = mysql_query("SELECT * FROM ".$prefix_table."membres WHERE pseudo = '".$pseudo."' LIMIT 0,1");
       
       if(mysql_num_rows($sql) == 1)
          return FALSE;
       else
          return TRUE;
    } //end pseudo_est_dispo()
    noLain, 13 Septembre 2005
    #13
Statut de la discussion:
Fermée.