Bonjour,
Je me pose la question sur comment on peux réaliser des requêtes PDO dynamique pour le tri, exemple :
Requête de base
$sql = $DB->prepare(SELECT * ma_table ORDER BY id ASC);
$sql->execute();
....
Requête de tri sur le nom croissant
$sql = $DB->prepare(SELECT * ma_table ORDER BY nom ASC);
$sql->execute();
Requête de tri sur le nom décroissant
$sql = $DB->prepare(SELECT * ma_table ORDER BY nom DESC);
$sql->execute();
Etc pour le prenom, ville, ...
Pour simplifier et rendre le code biens plus léger, quelle méthode utiliser/existe t-il ?
Merci d'avance pour vos lumières.
Salut,
Oui je vais aller leur dire :D (ou pas)
Au pire essaye comme ça :
if (isset($_GET'sortKey'], $_GET'order'])) {
$sortKey = $_GET'sortKey'];
switch ($_GET'order']) {
case "ASC":
$sql = $bdd->prepare("SELECT * FROM news ORDER BY $sortKey ASC");
break;
case "DESC":
$sql = $bdd->prepare("SELECT * FROM news ORDER BY $sortKey DESC");
break;
}
if ($sql->execute()) {
while ($data = $sql->fetch(PDO::FETCH_OBJ)) {
echo 'Trié par ordre ', $_GET'order'], ' : ', $data->id, '<br />'; // Test
}
} else {
echo 'Erreur...';
}
}
L'URL doit donner : http://www.monsite.com/page.php?sortKey=champ&order=ASC (ou DESC)
Même si y'a sûrement d'autre moyen d'le faire ^^
Pour le prénom, ville, ...
Tu peux faire comme ça:
$sql = $DB->prepare(SELECT * FROM ma_table WHERE prenom=?);
$sql->execute(array($_GET'prenom']));
Et dans ton url tu écrira: index.php?prenom=Jean-Claude
Après pour le tri je ne sais pas, je suis encore novice et je n'ai pas encore commencé la leçon "Ecrire des données" sur le siteduzéro.com. :)
oui, je savais pour cette partie, comme expliqué c'est pour la partie ORDER BY.... que je coince
J'ai trouvé
$sql = $DB->prepare('SELECT * FROM ma_table ORDER BY id ' . $_GET'order'] . ' ');
$sql->execute(array($_GET'order']));
justement, j'ai pensé à cette piste, mais je suis pas sur que coté sécu c'est valable, puis aussi id doit changer en nom ou prenom etc.
Bien sur la question de bas c'est aussi avec la parti sécu de la chose.
Beh logiquement tu m'es ça:
$sql->execute(array(isset($_GET'order'])));
Et tu as lien tu genre
http://www.monsite.com/page.php?order=asc
Vue que tu as toujours par défaut une valeur pour order. Après tu m'es un lien pour l'order décroissant:
http://www.monsite.com/page.php?order=desc
le mieux serais
$sql = $DB->prepare(SELECT * FROM ma_table WHERE ?=?);
Mais j'ai un doute.
Mauvaise idée de passer par l'URL pour faire une requete... :)
Suffit qu'un utilisateur malveillant connaisse le nom de ta bdd pour vous faire un sale coup...
http://www.monsite.com/page.php?order=desc;DROP DATABASE tabdd
Essais de faire ça avec la function php sort() ( ou array_multisort() )
PhiSyx, ta solution me semble bonne, on ma aussi proposé un truc du genre :
$nom = 'nom';
$tri = 'ASC';
$req = 'SELECT * ma_table ORDER BY '.$nom.' '.$tri;
$sql = $DB->prepare($sql);
$sql->execute();
Maintenant la plus sécu, il me semble que ta technique est plus sur.
Merci beaucoup