Problème : Requête de recherche du nombre d'enregistrements

lawrencium
Invité n'ayant pas de compte PHPfrance

03 mars 2011, 20:13

Bonsoir,

Je suis en train de monter un site web avec une zone membre, dans celle ci j'ai besoin de rechercher dans ma base de donnée les différentes entrées effectuées par l'utilisateur dans une table et de les afficher dans un tableau (donc de longueur inconnue).

J'utilise ce code pour rechercher le nombre d'entrées de l'utilisateur et donc le nombre de lignes de mon tableau :

Code : Tout sélectionner

$select = "SELECT heure,date,livraison,message,etat,login FROM `commande` WHERE `login` LIKE '.$login'"; $result = mysql_query($select,$base) or die ('Erreur : '.mysql_error() ); $NbreData = mysql_num_rows($result);
$login est le login de la session en cour obtenu par le code suivant :

Code : Tout sélectionner

$login = htmlentities(trim($_SESSION['login']));
Seulement a chaque fois il me renvois la valeur "0" alors que des enregistrements avec ce login existent.

Une erreur de ma part dans le code ? (Sans doute ^^)

ViPHP
ViPHP | 5462 Messages

03 mars 2011, 21:18

t'as pas a faire un htmlentites a cette endroit mais un mysql_real_escape_string

ViPHP
ViPHP | 2577 Messages

04 mars 2011, 09:05

Bonjour,

`login` LIKE '.$login' => `login` = '.$login'

Ensuite vérifie le contenu de $login en affichant la requête et en regardant le contenu de ta table avec phpmyadmin ou un autre client mysql.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 mars 2011, 21:05

A mon avis, c'est le point qui traine dans la chaine qui fait que tu ne retrouves pas ton login dans la table...

Ceci étant, comme l'indique Mazarini, la commande "LIKE" est faite pour rechercher une chaine partielle et s'utilise avec des % en guise de joker. Pour une correspondance exacte telle que celle dont tu as besoin, c'est l'opérateur "=" qu'il convient d'utiliser
 $select = "SELECT heure,date,livraison,message,etat,login FROM commande WHERE login = '" .$login. "'";
A noter également que sortir les variables des chaines permet de rendre ton code plus lisible. De même les ` de Mysql ne sont utiles que si tu as mal nommé tes tables ou tes champs. Si tes tables sont bien construites (c'est dire si tu n'utilises pas de mots clés réservés) tu peux t'en passer, ce qui rend également ton code plus facile à lire et à maintenir :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

devlop78
Invité n'ayant pas de compte PHPfrance

05 mars 2011, 21:59

L'utilisation de count(*) te permettra aussi d'éviter de retourner des valeurs inutiles si le but est uniquement de connaître le nombre de résultats