[RESOLU] Afficher les détail d'un livre selon son nom

Sabrina tech
Invité n'ayant pas de compte PHPfrance

17 déc. 2010, 11:53

Bonjour, je suis débutante en PHP, et j'ai un problem :
je suis entrain de créer un site d'une bibliothéque, j'ai une base de données qui contient une table livres, j'ai réussi à afficher dans une page, le titre et l'auteur de touts les livres contenu dans ma table, mon problem est le suivant :
j'ai le mot détail dont je veux l'utiliser comme un lien pour afficher tous les données et les champs qui existaient dans ma tables selon le titre du livre.

Remarque :
j'ai fais une tentative et j'ai réussis à afficher les détails de tous les livres. #-o mais malheureusement c faux car je dois afficher juste les détails d'un seul livre.
S'il vous plais essayer de m'aider car c trés urgent
Merci à vous.

Eléphant du PHP | 209 Messages

17 déc. 2010, 12:21

Quelle est la requete SQL que tu utilises ?
--
Eric

Sabrina tech
Invité n'ayant pas de compte PHPfrance

17 déc. 2010, 13:05

Je te transmet mon code d'affichage des livres, merci bien de me répondre

<?php 
 
// on prpare une requte permettant de calculer le nombre total d'lments qu'il faudra afficher sur nos diffrentes pages
 $sql = 'SELECT count(*) FROM Livres';  
  
 // on excute cette requte
 $resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
  
 // on rcupre le nombre d'lments  afficher
 $nb_total = mysql_fetch_array($resultat);  
 
 
 // on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0) {  
 echo 'Aucune rponse trouve';  
 }  
 else { 
   
    // sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas dj t dclare, et dans ce cas, on l'initialise  0
 if (!isset($_GET['debut'])) $_GET['debut'] = 0; 
   
     $nb_affichage_par_page = 10; 
	 
	 // Prparation de la requte avec le LIMIT
  $sql = 'SELECT Titre, Auteur, Cote, image FROM Livres ORDER BY titre ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;  
  
 // on excute la requte
 $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
 
 // on va scanner tous les tuples un par un
 
 //while ($data = mysql_fetch_array($req)) 
 while ($data = mysql_fetch_assoc($req))
 {  




//http://forum.phpfrance.com/sql-bases-donnees/lien-qui-lancent-sur-une-page-ordre-t1100.html


$titre = $data["Titre"];


  // on affiches les rsultats dans la <table>
 
 echo '<tr><td><td><p align="justify"><span class="header_01 Style4">' ,  htmlentities(trim($data['Titre'])) , '&nbsp;</span></p></td></tr>';  
  echo '<table><td><td><blockquote><p><span class="header_01 Style2"></span></p></blockquote></td>';

 
  $img=$data['image']; ?>
  
   <img src="images livres/<?php echo $img; ?>" hspace="2" vspace="2" align="right" />

  <?php 
  
 echo '<table><td><td><blockquote><p><span class="header_01 Style2"></span></p></blockquote></td>';
 echo '<table><td><td><blockquote><p><span class="header_01 Style2"></span></p></blockquote></td>';

 
 echo '<table><td><td><blockquote><p><span class="header_01 Style2">Auteur</span></p></blockquote></td>'; 
 echo '<td><td><blockquote><p Style4><strong >' , htmlentities(trim($data['Auteur'])) , '</strong></p></blockquote></td>'; 
 
 
echo '<table><td><td><blockquote><p><span class="header_01 Style2">Cote</span></p></blockquote></td>';
echo '<td><td><blockquote><p Style4><strong >&nbsp;&nbsp;&nbsp;&nbsp;' , htmlentities(trim($data['Cote'])) , '&nbsp;</strong></p></blockquote></td>'; 
   
  


echo '<table><tr><td><td><blockquote><p><span class="header_01 Style2"><a href="L selon titre.php?titre=$titre">Detail...</a></span></p></blockquote></td></tr>'; 

echo '<table><td><td><blockquote><p><span class="header_01 Style2"></span></p></blockquote></td>';
echo '<table><td><td><blockquote><p><span class="header_01 Style2"></span></p></blockquote></td>';

 
 }  
   
// on libre l'espace mmoire allou pour cette requte
  mysql_free_result ($req); 
     echo '</table><br />'; 
	 
	  // on affiche enfin notre barre
    echo '<span class="gras" >'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>';  
  }  
 // on libre l'espace mmoire allou pour cette requte
 mysql_free_result ($resultat);  
 // on ferme la connexion  la base de donnes.

 echo '</table><br />';  
	 
 
 
 ?>

Sabrina tech
Invité n'ayant pas de compte PHPfrance

17 déc. 2010, 13:19

et voici le code de l'affichage des détails du livre
Remarque : ceci affiche les détails d'un seul livre mais tjrs le premier livre de la table donc ca marche pas :cry:

<?php


//Reception de l'id d'un livre selectionné

$titre = isset($_GET["titre"]) ? $_GET["titre"] : null;



if ($titre != ""){

        //Chercher le livre du titre choisi

        $sql ="SELECT * FROM livre WHERE titre = $titre ";

        //connecter au serveur mysql



$host="localhost";
$login="root";
$pass="";
$bd="biblio";

  $link= mysql_connect($host,$login,$pass) or exit(mysql_error());
  $datab = mysql_select_db($bd, $link) or exit(mysql_error());
  $requet="SELECT * FROM livres ";
  $resultt = mysql_query($requet) or exit(mysql_error().'Echec');
  
  
   // Préparation de la requête avec le LIMIT
  
  $sql = 'SELECT Titre, Auteur, Cote, Image FROM Livres ';  
  
 // on exécute la requête
 $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
 
 ?>
 
   <?php 



//http://forum.phpfrance.com/sql-bases-donnees/lien-qui-lancent-sur-une-page-ordre-t1100.html



if (mysql_num_rows($resultt) <= 0) echo "Aucun livre!";

else 
{

            //lire le resultat qui ne contient qu'une ligne (pas besoin de boucle while)

            $data = mysql_fetch_assoc($resultt);

            $titre = $data["Titre"];

      
      
//while( $data = mysql_fetch_assoc($resultt)) 
 // {
     
     $img=$data['Image']; ?>
  
  <div align="center" <img src="images livres/<?php echo $img; ?>" widht="335" height="364" align="top"/> </div>

      <p>&nbsp;</p>
      <p align="center">&nbsp;</p>
      <p align="center"><span class="header_01 Style1"><?php echo $data['Titre']; ?> </span></p>
      <p>&nbsp;</p>
      <p>&nbsp;</p>
     
        
            <div class="header_01"></div>
            

            <p><span class="Style2"><span class="Style3"><strong>Auteur</strong>: <?php echo $data['Auteur']; ?> </span></span></p>
            <p class="Style3"><span class="Style2"><strong>Editeur</strong> : <?php echo $data['Maison d edition']; ?></span></p>
            <p class="Style2"><strong>Annee :</strong> <?php echo $data['Date d edition']; ?> </p>
            <p class="Style2"> <strong>ISBN : </strong>: <?php echo $data['ISBN']; ?></p>
            <p class="Style2"><strong>Cote</strong>: <?php echo $data['Cote']; ?></p>
      <P  align="justify" class="Style2"> <strong>Resume</strong> : <?php echo $data['Resume']; ?></p>
      
       <?php 
 } 
 }
 ?>

ViPHP
xTG
ViPHP | 7331 Messages

17 déc. 2010, 13:24

// Préparation de la requête avec le LIMIT

$sql = 'SELECT Titre, Auteur, Cote, Image FROM Livres '; 
Ce code là n'est pas nécessaire, tu formes déjà la requêtes quelques lignes plus haut. ;)
De là vient ton soucis, car cette requête écrase l'autre, et surtout elle récupère tous les livres.

Sabrina tech
Invité n'ayant pas de compte PHPfrance

17 déc. 2010, 13:36

Merci bien, je l'ai enlevé mais rien n'as changé elle m'affiche tjrs le meme livres c le premier de la liste des livres. :cry:
Veulliez me répondre please et merci pour votre attention

ViPHP
xTG
ViPHP | 7331 Messages

17 déc. 2010, 13:40

Il y a une seconde requête qui n'a pas lieu d'être du même genre :
$requet="SELECT * FROM livres ";
$requet devrait être la requête définie plus haut par $sql

Sabrina tech
Invité n'ayant pas de compte PHPfrance

17 déc. 2010, 13:45

tjrs non :cry:

rine n'a changé si vous avez une autre idée ou autre code pour m'aider à afficher ces détails du livres sélectionné. veuillez m'aider
Merci

Eléphant du PHP | 209 Messages

17 déc. 2010, 14:09

Quel bazare ....

Ne faut-il pas mettre des quote autour de titre ?
$sql ="SELECT * FROM livre WHERE titre = '$titre' ";
Pourquoi ne pas executer tous de suite cette requête et afficher le résultat ?
--
Eric

Sabrina tech
Invité n'ayant pas de compte PHPfrance

17 déc. 2010, 14:17

Ok et elle m'affiche tjrs aucun livre
car je pense qu'il me manque un Get en principe nn ? mais je sais pas comment je dos l'ajouter et où ?

ViPHP
ViPHP | 2577 Messages

17 déc. 2010, 14:18

Bonjour,

Je pense que ca marche à quelques erreurs près :
<?php
//Reception de l'id d'un livre selectionné
$titre = isset($_GET["titre"]) ? $_GET["titre"] : "";
if ($titre = ""){
echo "Pas de livre sélectionné";
exit;
}

//connecter au serveur mysql
$host="localhost";
$login="root";
$pass="";
$bd="biblio";

$link= mysql_connect($host,$login,$pass) or exit(mysql_error());
$datab = mysql_select_db($bd, $link) or exit(mysql_error());
//Chercher le livre du titre choisi
$sql ="SELECT * FROM livre WHERE titre = '$titre' ";
// on exécute la requête
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
if (mysql_num_rows($req) <= 0) {
echo "Aucun livre!";
exit;
}
//lire le resultat qui ne contient qu'une ligne (pas besoin de boucle while)
$data = mysql_fetch_assoc($req);
$titre = $data["Titre"];
$img=$data['Image']; 
?>
<div align="center" <img src="images livres/<?php echo $img; ?>" widht="335" height="364" align="top"/> </div>
<p>&nbsp;</p>
<p align="center">&nbsp;</p>
<p align="center"><span class="header_01 Style1"><?php echo $data['Titre']; ?> </span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="header_01"></div>
<p><span class="Style2"><span class="Style3"><strong>Auteur</strong>: <?php echo $data['Auteur']; ?> </span></span></p>
<p class="Style3"><span class="Style2"><strong>Editeur</strong> : <?php echo $data['Maison d edition']; ?></span></p>
<p class="Style2"><strong>Annee :</strong> <?php echo $data['Date d edition']; ?> </p>
<p class="Style2"> <strong>ISBN : </strong>: <?php echo $data['ISBN']; ?></p>
<p class="Style2"><strong>Cote</strong>: <?php echo $data['Cote']; ?></p>
<P align="justify" class="Style2"> <strong>Resume</strong> : <?php echo $data['Resume']; ?></p>
Edit : corrections de quelques erreurs....

Sabrina tech
Invité n'ayant pas de compte PHPfrance

17 déc. 2010, 14:28

malheureusement aussi meme affichage avec qqs d'autres erreurs mais ca ne m'affiche que meme livres mais pas le livres selectionné
Que ce que je dois faire ?????

Sabrina tech
Invité n'ayant pas de compte PHPfrance

17 déc. 2010, 14:31

Merci encore,
Vous avez tous les données de ma base et vous connaissez le but de mon programme, donc si vous avez d'autres idées à résoudre ce problème, ou un autre programme qui affiche ceci merci de m'aider

J'attends avec impatience

ViPHP
ViPHP | 2577 Messages

17 déc. 2010, 14:45

re^^

Quelques remarques sur ton PHP :

- Tu peux par exemple faire une fonction pour te connecter à la base de données et tu l'utiliseras dans tes 2 scripts

- Tu peux faire une fonction pour la lecture du livre dans la table et une autre pour l'affichage ca donnera un code du genre :
<?PHP
if (isset($_get['titre']) 
{
   $titre = $_get['titre']
}
else 
{
   echo "titre non renseigné"; 
   exit
}

connection_base();
$data = lecture_par_titre($titre);
if (!data)
{
   echo "titre inconnu"; 
   exit
}

affichage_un_livre($data)
?>
et tu mets dans un autre fichier (ou plusieurs) les fonctions connection_base(),lecture_par_titre($titre) et affichage_un_livre($data)

Au passage $sql ="SELECT * FROM livre WHERE titre = '$titre' " n'est pas bon car ca ne marchera pas lorsqu'il y a une quote dans le titre. Il faut utiliser $titre = mysql_real_escape_string($titre); avant. Il me semble qu'utiliser le code IBSN serait mieux pour identifier le livre que le titre.

ViPHP
ViPHP | 2577 Messages

17 déc. 2010, 14:55

J'ai fait des corrections dans le script (2 ou 3 erreurs, je suis loin d'être parfait), tu a essayé avec la dernière version ?

Normalement, tu vois l'url du genre :
http://localhost/xxxxxxxxx.php?titre=azerty
Est ce que le titre affiché est le bon ?

Eventuellement ajoute phpinfo(): en début de script et recherche le titre dans la page, tu auras la bonne variable à utiliser (je mélange souvent $_GET et $_POST