Liste des éditeurs
Reprenez l'exemple de la liste des auteurs et présentez une
liste des éditeurs conçue sur le même principe.
liste des éditeurs
La liste est triée alplhabétiquement sur le nom de
l'éditeur.
edWeb doit être un lien réel
sur le site de l'éditeur.
Schéma
de la base de données
Une
solution possible
Liste des livres simple
Reprenez l'exemple de la liste des auteurs et présentez une
liste des livres conçue sur le même principe.
liste des livres
La liste est triée alplhabétiquement sur le titre.
Quand le livre est écrit en français (liLangue
= 'FR' ), le prix doit être affiché comme 123.45 € (le symbole €
est l'entité HTML € ). Sinon
le prix doit être affiché comme $123.45.
Le nom de l'éditeur est un lien vers son site web.
Schéma
de la base de données
Une
solution possible
Exercice : Exercice : liste des livres simple
<?php
ob_start();
require('bib_params.php');
require('bib_fonctions.php');
htmlDebut('Liste des livres', 'bd.css');
$bd = bdConnecter();
//-- Requête ----------------------------------------
$sql = 'SELECT liTitre, liAnnee, liPages,
liPrix, edNom, liLangue, edWeb
FROM livres,
editeurs
WHERE edID = liIDEditeur
ORDER BY liTitre';
$r = mysqli_query($bd, $sql) or bdErreur($bd, $sql);
//-- Traitement -------------------------------------
htmlTable(array('Titre', 'Année', 'Pages',
'Prix', 'Editeur'),
'tab-bd');
while ($enr = mysqli_fetch_assoc($r)) {
htmlProteger($enr);
// Mise en forme du prix
if ($enr['liLangue'] == 'FR') {
$enr['liPrix'] .= ' €';
} else {
$enr['liPrix'] = '$'.$enr['liPrix'];
}
// Le nom de l'éditeur est un lien vers son site Web
$enr['edNom'] = '<a href="http://'.trim($enr['edWeb']).'">'
.$enr['edNom'].'</a>';
// Suppression des éléments non affichés
unset($enr['liLangue'], $enr['edWeb']);
htmlLigne($enr);
}
echo '</table>';
// Libération de la mémoire associée au résultat de la requête
mysqli_free_result($r);
//-- Déconnexion ------------------------------------
mysqli_close($bd);
htmlFin();
?>
Liste des livres par catégorie
Présentez la liste des livres par catégorie (liCat ).
liste des livres par catégories
Une
solution possible
Exercice : Exercice : liste des livres par
catégorie
<?php
ob_start();
require('bib_params.php');
require('bib_fonctions.php');
htmlDebut('Livres par catégorie', 'bd.css');
$bd = bdConnecter();
//-- Requête ----------------------------------------
$sql = 'SELECT liTitre, liAnnee, liPages,
edNom, liCat
FROM livres,
editeurs
WHERE edID = liIDEditeur
ORDER BY liCat, liTitre';
$r = mysqli_query($bd, $sql) or bdErreur($bd, $sql);
//-- Traitement -------------------------------------
$cat = '';
$nb = 0;
echo '<table class="tab-bd-700">';
while ($enr = mysqli_fetch_assoc($r)) {
// Rupture catégorie : on fait le titre catégorie
// et le nouvel en-tête de table
if ($cat != $enr['liCat']) {
$cat = $enr['liCat'];
$nb = 0;
htmlLigne(array(htmlentities($cat, ENT_COMPAT,
'ISO-8859-1'), '', '', ''), 'tr-titre');
htmlLigne(array('Titre', 'Année', 'Pages', 'Editeur'),
'tr-sous-titre');
}
// Affichage des lignes
unset($enr['liCat']); // Suppression élt non affiché
htmlProteger($enr);
htmlLigne($enr, ($nb++ % 2) ? 'tr-fonce' : '');
}
echo '</table>';
// Libération de la mémoire associée au résultat de la requête
mysqli_free_result($r);
//-- Déconnexion ------------------------------------
mysqli_close($bd);
htmlFin();
?>
La fonction htmlLigne() est modifiée
pour accepter un paramètre supplémentaire : une classe CSS pour la
ligne.
/**
* Envoie à la sortie standard une ligne d'une table HTML
*
* @param array $elts Elements à afficher dans les colonnes
* @param string $css Classe CSS éventuelle de la ligne
*/
function htmlLigne($elts, $css = '') {
echo '<tr', ($css == '') ? '>' : " class='$css'>";
foreach ($elts as $elt) {
echo '<td>', $elt, '</td>';
}
echo '</tr>';
}
Liste des livres et de leur(s) auteur(s)
Présentez la liste des livres et de leur(s) auteur(s).
liste des livres par auteur
La liste est triée alplhabétiquement sur le titre puis sur
le nom / prénom de(s) l'auteur(s).
On utilise une seule requête SQL.
Schéma
de la base de données
Une
solution possible
Exercice : Exercice : liste des livres et de
leur(s) auteur(s)
<?php
ob_start();
require('bib_params.php');
require('bib_fonctions.php');
htmlDebut('Livres avec les auteurs', 'bd.css');
$bd = bdConnecter();
//-- Requête ----------------------------------------
$sql = 'SELECT liID, liTitre, liAnnee, liPages,
auNom, auPrenom
FROM livres,
auteurs,
aut_livre
WHERE al_IDLivre = liID
AND auID = al_IDAuteur
ORDER BY liTitre, auNom, auPrenom';
$r = mysqli_query($bd, $sql) or bdErreur($bd, $sql);
//-- Traitement -------------------------------------
$livreID = -1;
$livre = array(); // stockage livre avant affichage
htmlTable(array('Titre', 'Année', 'Pages', 'Auteur(s)'),
'tab-bd');
while ($enr = mysqli_fetch_assoc($r)) {
// Même livre : il a donc plusieurs auteurs
if ($livreID == $enr['liID']) {
$livre['aut'] .= '<br>'
.htmlentities($enr['auPrenom']
.' '.$enr['auNom'], ENT_COMPAT,
'ISO-8859-1');
continue;
}
// Affichage d'un livre
if ($livreID != -1) {
htmlLigne($livre);
}
// Stockage des éléments du livre
$livre['titre'] = $enr['liTitre'];
$livre['an'] = $enr['liAnnee'];
$livre['pages'] = $enr['liPages'];
$livre['aut'] = $enr['auPrenom'].' '.$enr['auNom'];
htmlProteger($livre);
$livreID = $enr['liID'];
}
if ($livreID != -1) {
htmlLigne($livre);
}
echo '</table>';
// Libération de la mémoire associée au résultat de la requête
mysqli_free_result($r);
//-- Déconnexion ------------------------------------
mysqli_close($bd);
htmlFin();
?>