Page 1 sur 1

Syntaxe dans une requête

Posté : 17 sept. 2007, 14:58
par Débutant
Bonjour à tous.

J'ai un souci de synthaxe dans une requete mysql.

Voici le code

Je récupère 2 variables by et sort pour l'ordre de tri.

Cela ne fonctionne pas .
$BY=$_GET['by'];
$SORT=$_GET['sort'];

$result=mysql("$DBName","SELECT * FROM Produit WHERE Reference ORDER BY $BY $SORT ");


Lorsque j'utilise

$BY='Champ';
$SORT='ASC';

Cela fonctionne...
Merci de votre aide c'est surement une bétise mais je débute en php.

Bercy

Posté : 17 sept. 2007, 15:14
par Ryle
Qu'est ce qui ne fonctionne pas ? qu'est ce que ça fait ? qu'est ce que ça devrait faire ? quels sont les messages d'erreur ?

Affiche toujours les requêtes que tu génères lorsque tu as une erreur, histoire de voir ce qui ne va pas... déjà ton WHERE est assez curieux... Et quoi qu'il en soit, si tu utilises la clause ORDER BY il faut nécessairement spécifier (au moins) un nom de champ ensuite, donc ta variable $ORDER doit nécessairement être renseignée. A toi de t'assurer que tu la récupères bien à chaque fois et qu'elle n'est pas vide. Sinon utilises une valeur par défaut ou bien retire le ORDER BY dans ce cas :)

Posté : 17 sept. 2007, 15:18
par Invité
Exacte j'ai fais une erreur

Voici la bonne le rèquete
$result=mysql("$DBName","SELECT * FROM Produit ORDER BY ".$BY." ".$ASC." ");
Cette requète me permet de récupérer tous les produits d'una table. Ce qui ne fonctionne pas c'est le tri.

J'ai un souci de syntaxe au niveau du ORDER.

Merci

Posté : 17 sept. 2007, 15:28
par zeus
Ryle t'as donné un conseil pratiquement vital quand tu as un soucis de requête, c'est d'afficher la requête que tu vas exécuter.

Très souvent cet affichage permet de détecter l'erreur.

Posté : 17 sept. 2007, 15:32
par Invité
Comment dois je l'afficher ?

echo"$result";

Merci

Posté : 17 sept. 2007, 15:42
par fab
transforme
$result=mysql("$DBName","SELECT * FROM Produit ORDER BY ".$BY." ".$ASC." "); 
en :
$req = 'SELECT * FROM Produit ORDER BY '.$BY.' '.$ASC;
$result = mysql($DBName,$req);
echo $req; // ici pour afficher la requete 

[RESOLU]

Posté : 17 sept. 2007, 15:51
par Invité
Merci pour la méthode d'affiche.

Entre temps j'ai trouvé la bonne synthaxe

là voici pour les débutants comme moi
$result=mysql("$DBName","SELECT * FROM Produit ORDER BY '$BY' $SORT ");
$BY entre '' mais pas $SORT

N'étant pas enregistré je ne peux pas mettre le tag résolu.
Je m'inscris de suite.

Merci encore

Re: [RESOLU]

Posté : 17 sept. 2007, 16:49
par Truc
Entre temps j'ai trouvé la bonne synthaxe
là voici pour les débutants comme moi
L'est mieux le code de fab pour un débutant (comme toi :wink:)
$BY entre '' mais pas $SORT

$BY correspond à un champ de la base de données ?
Si oui alors tu ne dois pas mettre d'apostrophes car tu vas passer la variable $BY en tant que chaine de caractères et non comme un champ => pas le même résultat.
N'étant pas enregistré je ne peux pas mettre le tag résolu.

Tu confirmes la résolution et on le fera pour toi :wink:

Posté : 17 sept. 2007, 17:22
par Ryle
Je plussois la remarque de Truc, les apostrophes autour du $BY est une erreur et en aucun cas une solution. On tri selon un nom de champ ou un alias mais pas selon une chaine.

Comme je te l'ai dit plus haut, il te faut t'assurer que cette variable contient bien un nom de colonne avant de l'utiliser, ou bien retirer (voire de ne pas ajouter) la clause ORDER BY si ta variable est vide.

Posté : 27 sept. 2007, 19:56
par bercy
J'ai retrouvé mon login password.

Ce sujet est résolu pour moi. Merci @ tous