Dans cette séance de TP vous allez faire un site web avec des albums de musique et des chansons.
Dans le répertoire r213 que vous avez déjà créé, ajoutez un répertoire nommé r213-tp4 pour sauvegarder les exercices de cette séance (TP #4).
Dans ce répertoire r213-tp4, créez un répertoire appelé exo1 pour le premier exercice, exo2 pour le deuxième, etc. Vos exercices ne seront pas corrigés si vous ne respectez pas ces instructions.
À la fin de la séance, vous devez compresser (en format ZIP ou RAR) le répertoire r213-tp4 avec tous vos exercices et le soumettre sur AMeTICE.
Seuls les exercices marqués avec une étoile (*) seront évalués. La date limite pour rendre vos exercices est visible sur AMeTICE, et aucun travail ne sera accepté après. Le corrigé sera affiché après l'évaluation des exercices.
Vous allez faire un site web avec une liste d'albums de musique. En cliquant sur un album, on verra ses chansons.
Pour ces exercices vous utiliserez cette base de données. Elle contient trois tables :
Remarquez que la relation entre les chansons et les albums se fait par les identifiants. Le champ chansons.album_id contient l'identifiant d'un album, c'est-à-dire album.id.
Dans cet exercice vous allez faire la page d'accueil index.php du site web.
Cette page ne contient qu'une liste de liens vers les pages de chaque album. Vous devez générer cette liste en PHP en utilisant la table albums de la base de données.
Le résultat doit être comme ceci :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>R213</title>
</head>
<body>
<p>
Albums des Talking Heads
</p>
<ul>
<li><a href="album.php?titre=talking-heads-77">Talking Heads: 77</a> (1977)</li>
<li><a href="album.php?titre=more-songs-about-buildings-and-food">More Songs About Buildings and Food</a> (1978)</li>
...
</ul>
</body>
</html>
Il vous faut :
<li>
avec un lien vers la page de l'album. Ce lien contient une variable avec le slug de l'album, qui se trouve dans la base de données.
Dans cet exercice vous allez faire la page album.php qui affiche les chansons d'un album.
Vous devez faire une requête à la base de données pour obtenir les chansons de l'album qui a été choisi dans la liste. Ensuite vous affichez les chansons sous forme de liste à puces. Lé résultat doit être comme ceci :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>R213</title>
</head>
<body>
<ul>
<li>Uh-Oh, Love Comes to Town</li>
<li>New Feeling</li>
...
</ul>
<p>
<a href="index.php">Retour</a>
</p>
</body>
</html>
Cette fois-ci, la requête SQL contient une variable (l'album), donc il vous faut utiliser un marqueur nominatif. De plus, la requête SQL doit faire une jointure interne pour bien identifier les chansons à afficher. Voici un exemple de ce à quoi elle devrait ressembler :
SELECT chansons.titre FROM chansons
INNER JOIN albums ON chansons.album_id = albums.id
WHERE albums.slug = 'talking-heads-77'
Astuce : si vous avez des erreurs de PHP avec votre requête SQL, insérez cette instruction après l'exécution de la requête :
$sth->debugDumpParams();
Elle permet de voir la requête finie, après avoir remplacé les marqueurs nominatifs par les valeurs du tableau $values
. Vous trouverez plus d'informations sur cette instruction dans la documentation.
Maintenant que vous savez afficher les titres des chansons, vous pourrez afficher facilement toutes les informations des chansons.
Dans cet exercice vous allez afficher toutes les informations des chansons dans la page album.php.
Vous allez mettre toutes ces données dans un tableau. Le résultat attendu est comme ceci :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>R213</title>
<style>
table {
border: 3px solid black;
}
th, td {
padding: 10px;
}
</style>
</head>
<body>
<table>
<thead>
<th>#</th>
<th>Titre</th>
<th>Auteur</th>
<th>Durée</th>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Uh-Oh, Love Comes to Town</td>
<td>David Byrne</td>
<td>2:48</td>
</tr>
...
</tbody>
</table>
<p>
<a href="index.php">Retour</a>
</p>
</body>
</html>
Il ne reste qu'à afficher le titre de l'album avant ses chansons.
Dans cet exercice vous allez afficher le titre de l'album et son année de sortie avant la liste des chansons.
Avant d'afficher la liste de chansons, vous devez faire une requête à la base de données pour obtenir le titre de l'album et son année de sortie. Deux remarques :
$results[0]['titre']
.
Le résultat attendu est comme ceci :
...
<body>
<p>
Chansons de <strong>Talking Heads: 77</strong>
</p>
...
Dans le prochain TP, nous allons afficher et modifier des commentaires sur les albums.