Je dispose d'une base de données stockant tous les titres de livres que je lis. Cette base contient en autres les auteurs, l'image de la couverture du livre, la photo de l'auteur, sa biographie et un résumé.
L'objectif de l'exercice : En sélectionnant un auteur dans une liste déroulante, récupérer l'ensemble des titres lus.
j'ai créé un formulaire qui récupère dans un liste déroulante tous les noms des auteurs qui sont dans la base de données (Concaténation des nom et prénom.)
Je choisis un auteur et la requête me renvoie la liste des livres comme attendu mais là ou ça coince, la requête me renvoie n-1 titres
En conséquence, si je n'ai lu qu'un titre d'un auteur, la requête ne me retourne rien
Je vous mets ci dessous le code de mes deux pages :
1) le Formulaire :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Synopsis à la demande</title>
</head>
<body>
<h1>Retrouver un titre</h1>
<form method='post' action='SynopsisAlaDemande.php'/>
<!-- encadre les champs du formulaire -->
<fieldset>
<legend>Liste des auteurs disponibles</legend>
<?php
//Préparation de la requete et Connexion
$sql = 'SELECT concat(t_prenomauteur.LibelPrenom, \' \', t_auteurs.LibelNom) as idAuteur
FROM t_identiteauteurs
INNER JOIN t_prenomauteur ON t_prenomauteur.CodePrenom = t_identiteauteurs.CodePrenom
INNER JOIN t_auteurs ON t_auteurs.CodeAuteur = t_identiteauteurs.CodeAuteur';
try
{
$bdd = new PDO('mysql:host=localhost;dbname=bibliotheque;charset=utf8','root','root');
$bdd->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}
catch(PDOexception $e)
{
die('Erreur : ' .$e->getMessage());
}
$req = $bdd->query($sql);
$donnees =$req->fetchALL();
?>
<select name="idAuteur">
<?php
foreach($donnees as $NomAuteur)
{
echo '<option value = "' .$NomAuteur['idAuteur']. '">' .$NomAuteur['idAuteur']. '</option>';
}
?>
</select>
<?php
$req->closeCursor();
?>
</fieldset>
<input type="submit" name="Envoyer">
</form>
</body>
</html>
La page de traitement des données :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Liste des Titres des livres</title>
</head>
<body>
<h1>Affichage des résultats de la requête</h1>
<?php
// Connexion à la base de données
try
{
$bdd=new PDO ('mysql:host=localhost;dbname=bibliotheque;charset=utf8','root','root');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOexception $e)
{
die('Erreur : ' .$e->getMessage());
}
// La requete de sélection
$req = $bdd->prepare('SELECT t_livres.Titre, concat(t_prenomauteur.LibelPrenom, \' \', t_auteurs.LibelNom) as idAuteur
FROM t_auteurs
INNER JOIN t_identiteauteurs ON t_identiteauteurs.CodeAuteur = t_auteurs.CodeAuteur
INNER JOIN t_prenomauteur ON t_identiteauteurs.CodePrenom = t_prenomauteur.CodePrenom
INNER JOIN t_auteurslivres ON t_identiteauteurs.CodeIdentite = t_auteurslivres.CodeIdentite
INNER JOIN t_livres ON t_auteursLivres.CodeLivre = t_livres.CodeLivre
WHERE concat(t_prenomauteur.LibelPrenom, \' \', t_auteurs.LibelNom) = ?');
$req->execute(array($_POST['idAuteur']));
// Récupération de l'auteur
$reponse = $req->fetch();
// Lecture de la requete
?>
<h3>Livres écrits par : <strong><?php echo $reponse['idAuteur']; ?></strong></h3>
<?php
while ($reponse = $req->fetch())
{
echo $reponse['Titre'];
?>
<br />
<?php
}
$req->closeCursor();
?>
<p>
<a href="SynopsisForm.php">Retour au formulaire </a>
</p>
</body>
</html>
Je vous remercie pour votre coup de pouce
EDIT :
En continuant mes recherches, je me suis rendu compte que j'interrogeai la requête une première fois avant la boucle
// Récupération de l'auteur
$reponse = $req->fetch();
// Lecture de la requete
?>
<h3>Livres écrits par : <strong><?php echo $reponse['idAuteur']; ?></strong></h3>
Ainsi je commençais la lecture du résultat de la requete et ainsi je perdais le premier enregistrement.
J'ai modifié comme suit la récupération du nom de l'auteur et tout va bien
// Récupération de l'auteur
$ecrivain = $_POST['idAuteur'];
// Lecture de la requete
?>
<h3>Livres écrits par : <strong><?php echo $ecrivain; ?></strong></h3>
Merci beaucoup à tous ceux qui auraient pu se pencher déjà sur ma problématique
D'un autre coté, il ne peut pas y avoir d'auteur sans titre. Il s'agit d'une appli personnelle dans laquelle je reprends les livres que je lis.
Actuellement réalisée sur Access, elle me permet d'avoir sur mon téléphone la liste de tous les livres que j'ai lus afin de ne pas redemander les mêmes à la bibliothèque.
Je souhaiterai pouvoir en plus, lorsque je discute d'un livre avec quelqu'un, avoir le synopsis du livre et la bio de l'auteur (sur mon téléphone ou ma tablette).
[…] il ne peut pas y avoir d'auteur sans titre. Il s'agit d'une appli personnelle dans laquelle je reprends les livres que je lis.
D'où le fait que mon code comporte la partie qui gère cela en commentaire
JeanBallat a écrit:
Je souhaiterai pouvoir en plus, lorsque je discute d'un livre avec quelqu'un, avoir le synopsis du livre et la bio de l'auteur (sur mon téléphone ou ma tablette).
Tu fais déjà les jointures semble-t'il, si la table contenant les synopsis en fait partie, à toi d'ajouter les champs dans l'affichage et dans la requête, ce n'est pas un souci normalement.
Pour l'instant, j'arrive à récupérer le synopsis d'un titre sélectionné par rapport à un auteur. Par contre, comme la page se remet à jour, le résultat ne me convient pas.
Par des recherches sur le net, je me suis rendu compte qu'il fallait en passer par "ajax".
Je vais donc m'y coller.
Bonne journée
Jean
Ma requête ne récupère pas tous les enregistrement
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.