Nous allons modifier la version du garage pour la rendre dynamique avec une base de données plutôt qu’un tableau
Pour se faire vous devez dans local ouvrir adminer dans local sous l’onglet database

Dans adminer créer une table (dans le menu à gauche)
Saisissez les infos ci-dessous

insérer les 8 voitures à la main
Créer un nouveau dossier dans votre dossier local sites/php/app/public/ nommé garage
Dans ce dossier dupliquer le contenu de l’ancien exercice garage
supprimer le tableau php $garage (array) et commentez la boucle foreach
A l’endroit où les voitures s’affichaient insérer le code php pour se connecter à la base de données
<?php
$servname = "localhost"; $dbname = "local"; $user = "root"; $pass = "root";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql="SELECT * FROM cars";
$sth = $dbco->prepare($sql);
$sth->execute();
$resultats = $sth->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>';
print_r($resultats);
echo '<pre>';
catch(PDOException $e){
echo "Erreur : " . $e->getMessage().'<br>'.$sql;
}
?>
A la place des lignes echo '<pre>' print_r et echo '</pre>' remettez la boucle en changeant le nom de la variable $garage par $resultats
Partie 2 Classement
Ajouter en dessous du titre un menu html pour classer les résultats :
<nav class="order">
<p class="price">
<a href="?order_by=price">Prix ↓</a>
<a href="?order_by=price&order=DESC">Prix ↑</a>
</p>
<p class="year">
<a href="?order_by=year">Année ↓</a>
<a href="?order_by=year&order=DESC">Année ↑</a>
</p>
<p class="kms">
<a href="?order_by=kms">KMS ↓</a>
<a href="?order_by=kms&order=DESC">KMS ↑</a>
</p>
</nav>
Remarquez les href qui envoient des paramètres dans l’url en GET
Ajouter un peu de css
nav.order{
flex-basis: 100%;
display: flex;
flex-direction:row;
flex-wrap:wrap;
gap:2em;
background: #ddd;
padding: .5rem 1rem;
border-radius:.8em;
}
nav.order>p{
flex-basis: auto;
}
nav.order a{
color: #000;
text-decoration: none;
display: inline-block;
margin-right: 0.3em;
}
Entre la 2è ligne $dbco qui connecte à la base de données et la ligne $sql qui créer la requête.
A l’aide de la fonction isset de php (pour contrôler qu’une variable existe et d’un switch ou d’une suite de if / else if / else créer des tests pour récupérer dans un premier temps le paramètre $_GET order_by et ainsi modifier la requête SQL pour qu’elle ressemble à cela : SELECT * FROM cars ORDER BY price ou SELECT * FROM cars ORDER BY price ou SELECT * FROM cars ORDER BY kms
Le pseudo code serait le suivant :
si la variable $_GET['order_by'] existe
si order_by est égal à prix
ajoute ORDER_BY price à $sql
autrement si order_by est égal à year
ajoute ORDER_BY year à $sql
autrement si order_by est égal à kms
ajoute ORDER_BY kms à $sql
fin de si $_GET existe
Faire la même chose avec $_GET[‘order’] pour classer croissant ou décroissant pour que les requêtes ressemblent à ceci : SELECT * FROM cars ORDER BY price DESC ou SELECT * FROM cars ORDER BY kms DESC