select where = all

Répondre
RDUVRAC
le 10/03/2008 à 23:34
RDUVRAC
Bonjour,

j'ai ce code
SELECT * FROM matable WHERE visiblesursite = 'Y' AND categorie = $_GET['categorie']


Je réaffiche la page grace à un menu de redirection vers cette même page mais avec "?categorie=mavaleur" en plus.
Lorsque ma demande est faite sur une categorie j'ai mis dans l'URL la categorie en question exemple :
mapage.php?categorie=fun
ou
mapage.php?categorie=sport

Lorsque je souhaite afficher toutes les categories j'ai mis :
mapage.php?categorie=All

ça marche très bien avec chaque categorie mais lorsque je met All pas du tout (et c'est normal puisque chaque fiche est repérée dans une catégorie bien précise)

Comment formuler le code pour lui dire d'afficher toutes les categories ?
Faut il mettre un truc du genre dans l'URL :
mapage.php?categorie=funORsport
sachant que ça marche pas bien sûr ce truc ;-)
ou plutot travailler sur la formulation de la requete ?

Merci pour l'aide
LA GLOBULE
le 11/03/2008 à 00:30
LA GLOBULE
Ben si $_GET['categorie'] vaut All, tu exécutes sans condition sur la catégorie, c'est tout.

Mais ta question te trahis. En effet, on voit bien que tu prends ce que tu reçois dans $_GET['categorie'], tu le colles à ta requête SQL sans vérifier ce que tu reçois dans cette variable (si tu vérifiais tes paramètres, tu ne poserais même pas cette question).
Et en plus, tu n'escapes pas ta requête SQL : en gros, tu joues avec le feu la.

Donc mes conseils :
- avant de forger ta requete, clean ton paramètre $_GET['categorie'] : regarde ce que tu y recois (All ? ou bien une catégorie valide ? etc.)
- si tu recois 'All', alors crée une requete sans condition sur l'attribut categorie. A priori, All veut dire "aucune catégorie spécifiée (ex. if ($test == 'all') $sql = 'requete sans condition sur categorie'; else $sql = 'requete avec condition sur categorie';). Mais bon, après tout depend de ta base, et tu auras peut etre un OR massif à faire comme tu comptais le faire, mais la, tu es le seul à pouvoir le savoir.
- escape ta requete, des fonctions sont la pour ca, comme mysql_escape_string, et entoure ton test SQL avec des quotes (sinon, MySQL croit recevoir un INT et non une chaine de caractère. ex : WHERE blu = 'polom' << MySQL doit recevoir ca et non WHERE blu = polom)
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours