[PHP + MySQL] Comment faire pour voir un un champ existe déjà ?

Comment faire pour voir un un champ existe déjà ? [PHP + MySQL] - Programmation

Marsh Posté le 12-12-2001 à 18:13:29    

Voilà, je fais un site, mais quand quelqu'un s'inscrit, il ne faut pas qu'il prenne le même pseudo qu'un autre ... comment on vérifie ça en php ???
j'ai pensé à ça, mais ça marche pas ...

Code :
  1. $query="SELECT ID FROM users WHERE login=$login";
  2. $result=mysql_query($query));
  3. if ($result!="" ){
  4.  ecrire "Erreur, login déjà pris";
  5. }

Reply

Marsh Posté le 12-12-2001 à 18:13:29   

Reply

Marsh Posté le 12-12-2001 à 18:17:32    

Code :
  1. $result=mysql_query("SELECT ID FROM users WHERE login LIKE '$login'" );
  2. list($login2)=mysql_fetch_row($result);
  3. if ($login2)
  4. die("erreur, login déjà pris" );

Reply

Marsh Posté le 12-12-2001 à 18:18:50    

oui, ou :
$query="SELECT count(ID) AS nbLogin FROM users WHERE login='$login'";  
$result=mysql_query($query));  
if ($result->nbLogin!=0){  
 ecrire "Erreur, login déjà pris";  
}

Reply

Marsh Posté le 12-12-2001 à 18:19:19    

skylight a écrit a écrit :

Code :
  1. $result=mysql_query("SELECT ID FROM users WHERE login LIKE '$login'" );
  2. list($login2)=mysql_fetch_row($result);
  3. if ($login2)
  4. die("erreur, login déjà pris" );

 




 
pq un like ??

Reply

Marsh Posté le 12-12-2001 à 18:20:23    

ethernal a écrit a écrit :

 
 
pq un like ??  




 
case UNsensitive (ignore la casse)

Reply

Marsh Posté le 12-12-2001 à 18:22:33    

exaaaaactement :D
 :jap:

Reply

Marsh Posté le 12-12-2001 à 20:28:33    

plutot ceci -> mieux optimisé au niveau SQL et PHP
 
$res=mysql_query("SELECT ID FROM users WHERE login LIKE '$login' LIMIT 1" );
if(mysql_num_rows($res)) echo "Login pris";
 
voila, le tout sur 2 lignes .. tu peux rajouter un DIE a la place du echo ou autre suivant tes besoins  :benetton:

Reply

Marsh Posté le 12-12-2001 à 20:43:52    

j'ai jamais essayé mais tu dois peut etre pouvoir tout mettre sur 1 ligne meme si ca change pas grand chose au niveau des perfs :
 
if( mysql_num_rows(mysql_query("SELECT ID FROM users WHERE login LIKE '$login' LIMIT 1" )) ) echo "Login pris";

Reply

Marsh Posté le 12-12-2001 à 22:43:54    

fo tout de meme penser a reformater le login saisi.. :D

Reply

Marsh Posté le 12-12-2001 à 23:49:31    

potiron a écrit a écrit :

plutot ceci -> mieux optimisé au niveau SQL et PHP
 
$res=mysql_query("SELECT ID FROM users WHERE login LIKE '$login' LIMIT 1" );
if(mysql_num_rows($res)) echo "Login pris";
 
voila, le tout sur 2 lignes .. tu peux rajouter un DIE a la place du echo ou autre suivant tes besoins  :benetton:  




 
puisqu'on a dit précédemment que  
"select count(id)"
 était plus optimisé pour compter que
$result= mysql_query("select id from ..." );
nb= mysql_num_rows($result);
 
select count(id) as NB from ...";
est plus optimisé que ce que tu dis.
mais je n'ai jamais testé, j'ai cru les autres sur parole... ;)

Reply

Marsh Posté le 12-12-2001 à 23:49:31   

Reply

Marsh Posté le 13-12-2001 à 00:06:42    

comment savoir quelle requete sera plus rapide qu'une autre ?

Reply

Marsh Posté le 13-12-2001 à 00:18:19    

ethernal : suis pas d'accord, en faisant un count (id) tu forces la requete a passer sur TOUTES les lignes de ta table  :sarcastic: hors le but est qu'elle ne lit que tres peu de ligne ...
 
 
s0d4 : ben fait un bench, c'est tres important de verifier que ta prog/requete sont aux max de leurs capacités !
 
pour mysql tu as une fonction GENIAL qui s'appelle EXPLAIN .... si tu as des conf partout sur des requetes multi-tables alors tu peux etre content de toi .
 
pour PHP la seule soluce que je connaisse c'est de faire un script de bench en calculant le temps en microscondes en 2 actions .
je me suis fait une super interface justement pour tester toutes mes fonctions/idées ... ou je donne le Nb de boucle, et elle fait des moyennes en stockant tout ca dans cookies et txt .
j'ai aussi une fonction qui me permet d'etalonner le bench suivant le PC en le faisant tourner a vide !
n'hesite pas a te faire un script pour tes benchs, c'est tres tres important car des que tu vas passer sur des tables contenant des millions de lignes tu peux pas te permettre la moindre imperfection .

Reply

Marsh Posté le 13-12-2001 à 00:31:03    

potiron a écrit a écrit :

ethernal : suis pas d'accord, en faisant un count (id) tu forces la requete a passer sur TOUTES les lignes de ta table  :sarcastic: hors le but est qu'elle ne lit que tres peu de ligne ...




 
bha chai pas... si tu fais un count(id) where login like '$login' il te retournera qu'une seule ligne, mais c vrai qu'il parcourt les enregs jusqu'a la fin.
faut voir si qd tu lui mets un LIMIT, il s'arrête après avoir trouvé une ligne ou bien s'il continue jusqu'au bout et qu'il ne t'en retourne qu'une dans le recordset... s'ils ont bien codé mysql, c'est ce que ça devrait faire.  Mais je connais pas assez le développement de MySQL pour en être sûr. :(
Si tu me l'affirmes je te crois  :jap:

Reply

Marsh Posté le 13-12-2001 à 00:39:25    

ben c'est pour ca que j'ai rajouté LIMIT 1 dans ma requete !
il ce limite a 1 resultat donc des qu'il le trouve il stop !
evite le count, il est plus gourmand que le select id seul .

Reply

Sujets relatifs:

Leave a Replay

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