Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2857 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème avec do while

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec do while

n°2047999
bastagogne
Posté le 11-01-2011 à 00:41:46  profilanswer
 

Bonsoir à tous,
Je suis en train de réaliser une boucle do while pour générer un hash unique de 4 caractères à mettre dans une sql.
La boucle sert à vérifier si le hash n'existe pas dans la base sinon on régénère un hash et on retest mais le problème est que j 'ai de temps en temps des doublons dans mes hash.
Voici mon code
 
      do {
      $caracteres = array("a", "b", "c", "d", "e", "g", "h", "k", "l", "m", "n", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", 1, 2, 3, 4, 5, 6, 7, 8, 9);
      $caracteres_aleatoires = array_rand($caracteres, 4);
         foreach($caracteres_aleatoires as $i) {
            $hash .= $caracteres[$i];
         }
      $sql=mysql_query("SELECT count(id) FROM url WHERE hash ='$hash'" )or die(mysql_error());
      $resultat = mysql_fetch_array($sql);
      } while ($resultat[id] != 0);
Ensuite je fais un insert du hash ds la sql
Avez vous une idée sur le pourquoi j'ai des hash identique ?
Merci de votre aide

mood
Publicité
Posté le 11-01-2011 à 00:41:46  profilanswer
 

n°2048011
billgatesa​nonym
Posté le 11-01-2011 à 07:48:04  profilanswer
 

Au lieu de

$sql=mysql_query("SELECT count(id) FROM url WHERE hash ='$hash'" )or die(mysql_error());


Ecrire

$sql=mysql_query("SELECT count(id) FROM url WHERE hash ='".$hash."'" )or die(mysql_error());


En PHP, les guillemets sont différents des apostrophes :
 
La variable qui est contenue entre deux guillemets est évaluée alors que celle entre deux apostrophes ne l'est pas.
 
(C'est incroyable le nombre de personnes qui ne connaissent pas cela, ou n'y font pas attention, ou bien qui sont trop paresseuses pour utiliser le point "." de la concaténation.)
 

n°2048013
jeff@be
Posté le 11-01-2011 à 08:09:40  profilanswer
 

billgatesanonym a écrit :

Au lieu de

$sql=mysql_query("SELECT count(id) FROM url WHERE hash ='$hash'" )or die(mysql_error());


Ecrire

$sql=mysql_query("SELECT count(id) FROM url WHERE hash ='".$hash."'" )or die(mysql_error());


En PHP, les guillemets sont différents des apostrophes :
 
La variable qui est contenue entre deux guillemets est évaluée alors que celle entre deux apostrophes ne l'est pas.
 
(C'est incroyable le nombre de personnes qui ne connaissent pas cela, ou n'y font pas attention, ou bien qui sont trop paresseuses pour utiliser le point "." de la concaténation.)
 


 
 
Sauf qu'en l’occurrence, la variable $hash est bien contenue dans des guillemets, et les apostrophes sont elles-mêmes des caractères de la chaîne, et non pas des délimiteurs...
 
Pour ce qui est du problème initial, je dirais:
- ajouter un alias à la colonne "count(id)" de la requête sql => "SELECT count(id) AS id FROM ..."  
- modifier le test du while =>  while ($resultat['id'] != 0);

n°2048022
bastagogne
Posté le 11-01-2011 à 09:08:02  profilanswer
 

@billgatesanonym
 
Merci de ta contribution, je vais tester ca dans l'aprem, et je retiens bien la différance entre les guillements et les apstrophes
 
@jeff@be
 
Merci aussi à toi aussi

n°2048024
flo850
moi je
Posté le 11-01-2011 à 09:10:51  profilanswer
 

billgatesanonym a écrit :

Au lieu de

$sql=mysql_query("SELECT count(id) FROM url WHERE hash ='$hash'" )or die(mysql_error());


Ecrire

$sql=mysql_query("SELECT count(id) FROM url WHERE hash ='".$hash."'" )or die(mysql_error());


En PHP, les guillemets sont différents des apostrophes :

 

La variable qui est contenue entre deux guillemets est évaluée alors que celle entre deux apostrophes ne l'est pas.

 

(C'est incroyable le nombre de personnes qui ne connaissent pas cela, ou n'y font pas attention, ou bien qui sont trop paresseuses pour utiliser le point "." de la concaténation.)

 



sauf que pour le coup ,

Code :
  1. $qualificatif = 'âne';
  2. echo  "toto est un  '$qualificatif'";


affiche  :  toto est un âne

Code :
  1. $qualificatif = 'âne';
  2. echo  'toto est un  $qualificatif';


affiche  :  toto est un $qualificatif


Message édité par flo850 le 11-01-2011 à 09:12:52
n°2048067
smaragdus
whores, drugs & J.S. Bach
Posté le 11-01-2011 à 11:13:36  profilanswer
 

bastagogne a écrit :


   ($resultat[id] != 0);


 
on écrit $resultat['id']
 
 

billgatesanonym a écrit :

Au lieu de

$sql=mysql_query("SELECT count(id) FROM url WHERE hash ='$hash'" )or die(mysql_error());


Ecrire

$sql=mysql_query("SELECT count(id) FROM url WHERE hash ='".$hash."'" )or die(mysql_error());


En PHP, les guillemets sont différents des apostrophes :
 
La variable qui est contenue entre deux guillemets est évaluée alors que celle entre deux apostrophes ne l'est pas.
 
(C'est incroyable le nombre de personnes qui ne connaissent pas cela, ou n'y font pas attention, ou bien qui sont trop paresseuses pour utiliser le point "." de la concaténation.)
 


 
Y a aucune différence entre les 2 syntaxes que tu as écrites (si ce n'est que la deuxième est moins lisible.  
 
Par contre, tu aurais pu faire remarquer que "OR DIE" est à proscrire à notre époque ou encore que les requetes préparées c'est plus propre.


Message édité par smaragdus le 11-01-2011 à 11:15:52
n°2048069
esox_ch
Posté le 11-01-2011 à 11:16:17  profilanswer
 

On va probablement me dire que je me répète, mais vu qu’apparemment ça rentre pas ..  
Arrêtez de vous emmerder avec des problèmes que vous vous créez vous-mêmes en vous acharnant à ne pas utiliser PDO bon sang... C'est fou comme le 90% des problèmes MySQL/PHP pourraient être résolu en prenant 15 min pour lire la doc PDO ..


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2048103
flo850
moi je
Posté le 11-01-2011 à 11:51:30  profilanswer
 

pdo est installé en standard ?  

n°2048105
smaragdus
whores, drugs & J.S. Bach
Posté le 11-01-2011 à 11:55:52  profilanswer
 

oui et depuis des lustres maintenant

n°2048107
flo850
moi je
Posté le 11-01-2011 à 12:00:23  profilanswer
 

j'étais resté à l'install via pear/pecl  
:jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème avec do while

 

Sujets relatifs
Problème avec boucle while qui ne s'arrêt pas[Oracle & PHP] boucle if dans while : problème
probleme avec 2 mysql_fetch_assoc dans une seule whileproblème boucle while
Probleme affichage + Boucle whileProblème while, if, else ...
[C] Problème de boucle Whileprobleme de boucle while
[GLUT] Probleme avec boucle whileprobleme while et <select>
Plus de sujets relatifs à : Problème avec do while


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR