Problème avec do while - PHP - Programmation
Marsh Posté le 11-01-2011 à 07:48:04
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.)
Marsh Posté le 11-01-2011 à 08:09:40
billgatesanonym a écrit : Au lieu de
|
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);
Marsh Posté le 11-01-2011 à 09:08:02
@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
Marsh Posté le 11-01-2011 à 09:10:51
billgatesanonym a écrit : Au lieu de
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 :
|
affiche : toto est un âne
Code :
|
affiche : toto est un $qualificatif
Marsh Posté le 11-01-2011 à 11:13:36
bastagogne a écrit : |
on écrit $resultat['id']
billgatesanonym a écrit : Au lieu de
|
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.
Marsh Posté le 11-01-2011 à 11:16:17
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 ..
Marsh Posté le 11-01-2011 à 00:41:46
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