Problème script affichage base de données

Répondre
sam06
le 08/06/2011 à 15:39
sam06
Bonjour tout le monde,

J'ai une base de données mysql où sont enregistrées des références de livres (titre,auteur,éditeur,etc.). Pour afficher mes données à l'écran, j'ai fait un tableau, chaque colonne correspondant à un champ de la base de données. J'ai un formulaire html avec champs "titre","auteur","editeur","genre" où l'utilisateur peut entrer sa recherche soit par nom d'auteur, soit part titre, soit par éditeur, soit par genre. J'ai fait un script PHP avec les requêtes mysql pour sortir les données demandées par l'utilisateur. Or j'ai un petit souci : alors que je voudrais que toutes les données d'un même critère soient dans le même tableau, elles se mettent chacune dans des tableaux différents. Je m'explique : si par exemple l'utilisateur veut sortir tous les livres d'un même auteur, il remplit le champ "auteur". Et au lieu que tous les livres de cet auteur soient dans le même tableau, il y a un tableau par livre de cet auteur. Cela fait 2 jours que je planche là-dessus et que je triture mon code dans tous les sens, sans succès. Il n'y a pas de parse error, donc il ne s'agit pas d'une erreur de syntaxe. Mon code doit être faux, mais je ne vois pas où ; seul je n'y arrive pas .
Est-ce que quelqu'un aurait la gentillesse de regarder mon code php et me dire quelles corrections je dois apporter ?

Voici mon code :
<?php

/*Connexion au serveur :*/
$id_sql=mysql_connect("127.0.0.1","user","password") OR die ('Erreur de connexion'.mysql_error());

/*Connexion à la base de données "bibliotheque" :*/
$ok=mysql_select_db("bibliotheque",$id_sql) OR die ('Erreur de sélection'.mysql_error());

/*Si le champ "auteur" est rempli :*/
if(isset($_POST['auteur']))
{
$sql='SELECT * FROM livres WHERE auteur="'.$_POST['auteur'].'"';
$req=mysql_query($sql) OR die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

while($tableau=mysql_fetch_array($req))
{
echo '<body bgcolor="#ffeecc"><br><br>
<h2><center>Auteur demand&eacute;&nbsp;:&nbsp;<i>'.$_POST['auteur'].'</i></center></h2>
<table border="1" cellpadding="10" cellspacing="0" width="90%" align="center">
<tr>
<th width="500">Titre</th>
<th width="500">Auteur</th>
<th width="500">Editeur</th>
<th width="150">Genre</th>
<th width="500">R&eacute;sum&eacute;</th>
</tr>
<tr>
<td align="center" style="font-size:11pt; font-weight:normal">"'.$tableau['titre'].'"</td>
<td align="center" style="font-size:11pt; font-weight:bold">'.$_POST['auteur'].'</td>
<td align="center" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['editeur'].'</td>
<td align="center" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['genre'].$tableau['autre_genre'].'</td>
<td align="justify" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['resume'].'</td>
</tr>
</table>';
}
}


C'est une partie du code ; j'ai ensuite un "if(isset($_POST)" par champ, puis à la fin je ferme la connexion au serveur mysql.

Je vous remercie d'avance pour l'aide apportée
LupusMic
le 08/06/2011 à 17:39
LupusMic
Tes explications ne sont pas claires car tu ne fais pas la distinction entre deux notions bien différentes. La première, c'est la notion de tableau PHP (array), et la seconde celle des tableaux HTML (table).

Bon, au vu du code, j'en ai déduit que tu as un problème avec le tableau HTML. En effet, à chaque itération sur le résultat de la requête, tu créé un nouvel élément body (alors qu'il doit être unique pour le document) et un élément table.

Tu dois pousser les lignes 18 et 19 avant la ligne 11, et la ligne 20 avant le while. La ligne 35 doit être poussé après la fermeture du block de code associé au while.

Ainsi, tu auras un code qui correspond à l'algo suivant :
afficher formulaire de recherche

si recherche alors
afficher critère de recherche
si résultat trouvé alors
afficher ouverture du tableau
pour chaque résultat de la requête
afficher ligne de résultat comme une ligne de tableau
fin pour chaque
afficher fermeture du tableau
sinon
afficher qu'on a pas trouvé de résultats
fin si
fin si


J'ai rajouter le block sinon pour te donner un indice sur ta question suivante : comment afficher qu'on a pas trouvé de résultat ;)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours