Order by $_post

Bonjour,

J’ai un petit problème pour trier le résultat d’une requête sql
Le code:

$order = htmlspecialchars($_POST['order']);
require ('config.php');
mysql_connect("$host", "$bdd", "$pass");
mysql_select_db("$bdd");

$req = mysql_query ("SELECT * FROM jeux ORDER BY '".$order."'");
while ($rep = mysql_fetch_array($req)) {

Le problème c’est que ca ne fonctionne pas… j’ai vérifier le $_POST[‘order’] il est correct!

Merci de votre aide!
Edité le 24/10/2008 à 15:40

ajout un

or die( mysql_error() );

apres la ) du mysql_query, tu auras le retour de l’erreur sql et tu pouras débugger par toi même.

Et ça ne te dérange pas du tout d’injecter comme ça une donnée utilisateur?

Genre il trafique ta page et mets ce qu’il veut après le ORDER BY ?

Faut que tu fasse ça avant de lancer ta requête : if ($order != ‘asc’ && $order != ‘desc’) $order = ‘asc’;

Enlève les ’ autour de $order


$req = mysql_query ("SELECT * FROM jeux ORDER BY ".$order);

Si je ne me trompe pas, cela n’est pas nécessaire d’être explicite. Par défaut le tri est Ascendant, et d’ailleurs en faisant ton bricolage il obtiendrait une clause du genre :
ORDER BY ASC
qui lancerait d’office une erreur…

–> ORDER BY nomTable.nomColonne ASC / DESC (un des deux)
Edité le 24/10/2008 à 11:55

Ouaip.

Sur la forme, c’est faux mais la requête l’est déjà à la base :slight_smile:

Je ne fais que préciser les règles de base en SQL :slight_smile:

Merci de vos réponse, mais ca ne fonctionne toujour pas

$req = mysql_query ("SELECT * FROM jeux ORDER BY" .$order) or die (mysql_error());

me retourne cette erreur:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’ at line 1

Pour ce qui est de l’injection de données utilisateur… c’est une page protégée par un .htaccess je suis le seul à pouvoir y accéder! (théoriquement)

Edit: en fait ca fonctionne quand on choisis dans la liste mais c’est à l’arriver de la page que j’ai cette erreur, normal puisqu’il n’y a pas d’order, puisque pas de $_POST…
Edité le 24/10/2008 à 15:32

J’ai résolu le problème en rejoutant:

if (!isset($_POST['order'])) { $order = "id"; } else { $order = htmlspecialchars($_POST['order']); }

Merci beaucoup!