Php tri

Lucas641
Invité n'ayant pas de compte PHPfrance

24 juin 2015, 04:30

Bonjours à tous,

j'essai depuis quelque heures d'afficher les données de ma base de données dans mon formulaire php en ordre Ascendant et Descendant ! J'utilise deux flèche en PNG et je souhaiterais cliquer sur ceux-ci pour trier mes donées ( fleche vers le haut -> croissant....)

J'ai chercher sur le net et j'ai essayer quelque truc comme vous pouvez voir mais sa ne fonctionne pas
Voici mon code :

<?php
try
{
	// On se connecte à MySQL
	$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
}
catch(Exception $e)
{
	// En cas d'erreur, on affiche un message et on arrête tout
        die('Erreur : '.$e->getMessage());
}

// Si tout va bien, on peut continuer

// On récupère tout le contenu de la table jeux_video
$reponse = $bdd->query('SELECT * FROM forum');

// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{

}

if($tri == "date_up")
{
$query="SELECT * FROM forum ORDER BY date ASC";
}
if($tri == "date_down")
{
$query="SELECT * FROM forum ORDER BY date DESC";
}
?>


    <p>
    <strong>Date</strong> : <?php echo $donnees['date']; ?><br/>
    <strong>Nom</strong> : <?php echo $donnees['nom']; ?><br />
   <strong>Commentaire</strong> : <?php echo $donnees['commentaire']; ?><br/>
   </p>
   
    
   
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Document sans titre</title>
<link href="index-cible-style.css" rel="stylesheet" type="text/css">

</head>


<body>
<title>Tp1-Programmation2</title>



<div class="options">
    
 <ul class="input2">
    <div class="button">
   	
              
   	 	<li class="message"><a href="message.php"> AJOUTER UN MESSAGE</a></li>
   	 	<li class="message"><a href="index-cible.php"> TABLEAU DES MESSAGES</a></li>
        
    </div> 
        
  </ul>

</div>


<div class="image">
<img src="LOGo.jpg"></a></div>



</head>


<body>

<div class="title">
TABLEAU DES MESSAGES


</div>

<div class="arrows">
SORT BY DATE

<td><a href="index-cible.php?tri=date_up"><img src="Fleche-up.png" alt="Trier par ordre croissant" width="15" height="10"/></a></td>
<td><a href="index-cible.php?tri=date_down"><img src="Fleche-down.png" alt="Trier par ordre décroissant" width="15" height="10"/></a></td>
</div>

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

24 juin 2015, 09:25

Hello !

Peut être faudrait-il gérer le tri AVANT de récupérer le contenu de ta table ?
// On récupère tout le contenu de la table jeux_video
if($tri == "date_up")
{
$query="SELECT * FROM forum ORDER BY date ASC";
}
else // if($tri == "date_down")
{
$query="SELECT * FROM forum ORDER BY date DESC";
}

// $reponse = $bdd->query('SELECT * FROM forum');
$reponse = $bdd->query($query);

// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{

}
En l'occurrence, ta requête avec le order est stocké dans une variable $query, mais n'est jamais exécutée... en tout cas pas dans le code que tu nous montres. Je suppose également que la variable $tri récupère le contenu de $_GET['tri'] à un moment où à un autre que l'on ne vois pas ici ?

A noter que ton while se ferme avant d'avoir bouclé sur les données à afficher...

Nota : "date" est un mot clé réservé du langage SQL, il est fortement déconseillé de s'en servir comme nom de colonne dans une table...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Lucas641
Invité n'ayant pas de compte PHPfrance

24 juin 2015, 22:59

Bon , je n'avais pas utilisé le GET car je ne comprend pas trop sa fonction .. désolé je suis assez débutant en php !

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

25 juin 2015, 12:12

Les super variables GET et POST te permettent de récupérer les données transmises respectivement via l'url de la page ou via un formulaire.

Historiquement, il suffisait d'utiliser une variable $tri qui était alimentée automatiquement par les valeurs reçues en get, ou en post, ou via un cookie, ... bref difficile de savoir ce que $tri allait contenir et en terme de sécurité, c'était plutôt moyen (on pouvait facilement bypasser une donnée en session en mettant le bon nom de variable dans l'url).

Du coup les versions de php qui ont suivi ont obligé les développeurs à dire explicitement d'où provenait la donnée qu'il souhaitaient utiliser. Ainsi $tri ne contenait rien (et n'était d'ailleurs pas définie automatiquement) et c'est à toi de dire que tu veux récupérer une info provenant de l'url de la page :
$tri = $_GET['tri'];
Sauf que cette info n'est pas toujours présente dans l'url (par exemple quand tu ouvres la page pour le première fois), il convient donc de vérifier si celle-ci existe bel et bien avant de l'utiliser
if (isSet($_GET['tri'])) 
    $tri = $_GET['tri'];
else
    $tri = 'date_up'; // si rien n'est passé dans l'url tu peux utiliser une valeur par défaut
Bref, tout ça pour dire qu'il te faut donc récupérer l'info envoyée par l'url (ou la valeur par défaut), écrire la requête que tu veux exécuter avec le "order by" qui va bien, exécuter celle-ci et enfin boucler sur les résultats retournés pour les afficher :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...