8797 sujets

Développement web côté serveur, CMS

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 :

	/*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.
Modifié par sam06 (08 Jun 2011 - 15:09)
Bonjour,
Je ne sais pas si j'ai bien capté ton souci, mais ne devrais-tu pas faire comme ceci:

/*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());
			 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>';
		 while($tableau=mysql_fetch_array($req)){
			 echo '<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>';
			}                          
		 } 
Tout ce que tu mets dans une boucle risque de se répéter tu dis que ton problème c'est que ton tableau se répète peut être parce que tu ne devrais pas mettre tout ton tableau dans ta boucle mais simplement la ligne que tu veux répéter.
PS : evite les echo de html tu perds la coloration syntaxique!!! tu peux faire :


while($tableau=mysql_fetch_array($req)){
?>
			 <tr>

			 <td align="center" style="font-size:11pt; font-weight:normal"><?=$tableau['titre']?></td>
//etc

PS2 : @lddsoft tu as laissé le </table> dans la boucle !
Modifié par Su4p (08 Jun 2011 - 16:29)
@Su4p >

< /table> == distraction de ma part Smiley confused

echo => il est certain que le code peut être optimisé, de même que l'aspect graphique
Un grand merci à vous deux. Oui en sortant le tableau de la boucle ça marche beaucoup mieux. Cependant, j'ai encore un souci, je ne sais pas si vous pouvez encore m'aider : après chaque tableau, j'ai systématiquement un tableau "genre" qui s'affiche, avec une dizaine de livres qui ne sont pas forcément les 10 premiers de la base de données, et avec des genres mélangés. Exemple : je demande "Emile Zola" j'ai le tableau avec tous les livres de cet auteur, mais en-dessous j'ai un 2e tableau, "genre" qui ne correspond à rien et qui est totalement indésirable. Et pour tous les champs c'est pareil.

Je mets l'intégralité de mon code cette fois :


	/*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());
		
		if(mysql_num_rows($req)>0)
    {
			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>';
						
			while($tableau=mysql_fetch_array($req))
    	{
    		echo '<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>';
			}
			echo '</table>';
			}	
			
		}
		
		/*Si le champ "titre" est rempli :*/
		if(isset($_POST['titre']))
		{
			$sql='SELECT * FROM livres WHERE titre="'.$_POST['titre'].'"';
			$req=mysql_query($sql) OR die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		
			if(mysql_num_rows($req)>0) 
			{
				echo '<body bgcolor="#ffeecc"><br><br>
						<h2><center>Livres demand&eacute;s&nbsp;:</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>';
							
					while($tableau=mysql_fetch_array($req))
    	{
    		echo '<tr>		
								<td align="center" style="font-size:11pt; font-weight:bold">"'.$_POST['titre'].'"</td>
								<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['auteur'].'</td>
								<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['editeur'].'</td>
								<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['genre'].$tableau['autre_genre'].'</td>
								<td align="justify" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['resume'].'</td>
							</tr>';
					}
				echo	'</table>';
			}
		}
		
		/*Si le champ "éditeur" est rempli :*/	
		if(isset($_POST['editeur']))
		{
			$sql='SELECT * FROM livres WHERE editeur="'.$_POST['editeur'].'"';
			$req=mysql_query($sql) OR die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		
			if(mysql_num_rows($req)>0) 
			{
				echo '<body bgcolor="#ffeecc"><br><br>
						<h2><center>Editeur demand&eacute;&nbsp;:&nbsp;<i>'.$_POST['editeur'].'</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>';
							
			while($tableau=mysql_fetch_array($req))
    	{
    		echo '<tr>
								<td align="center" style="font-size:11pt; font-weight:normal">"'.$tableau['titre'].'"</td>
								<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['auteur'].'</td>
								<td align="center" style="font-size:11pt; font-weight:bold">&nbsp;'.$_POST	['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>';
				}
				echo	'</table>';	
			}
		}
		
		/*Si le champ "genre" est rempli :*/
		if(isset($_POST['genre']))
		{
			$sql='SELECT * FROM livres WHERE genre="'.$_POST['genre'].'"';
			$req=mysql_query($sql) OR die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		
			if(mysql_num_rows($req)>0) 
			{
				echo '<body bgcolor="#ffeecc"><br><br>
						<h2><center>Genre demand&eacute;&nbsp;:&nbsp;<i>'.$_POST['genre'].'</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>';
							
			while($tableau=mysql_fetch_array($req))
    	{
    		echo '<tr>							
								<td align="center" style="font-size:11pt; font-weight:normal">"'.$tableau['titre'].'"</td>
								<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['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:bold">&nbsp;'.$_POST['genre'].'</td>
								<td align="justify" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['resume'].'</td>
							</tr>';
					}
					echo	'</table>';
			}
		}
	/*Fermeture de la connexion :*/				
	mysql_close();


J'espère que vous pourrez encore m'aider.
D'avance un grand merci.
Genre , je sais pas si j'ai compris....
Je crois comprendre que tu ne veux pas que le tableau genre s'affiche.
si le tableau genre s'affiche c'est que la variable $_POST['genre'] est envoyé ...
Cependant si celle-ci est vide tu peux decider de ne pas afficher le tableau ou bien tu peux faire des else donc :
soit :
 if(isset($_POST['genre'])&& $_POST['genre']) 

soit :
  if(isset($_POST['titre'])){}elseif(isset($_POST['genre'])){} 


Mais comme je t'ai dit pas sûr d'avoir compris ce que tu veux ....
Idem pour moi! Pas sûr de bien comprendre le problème...
Commente toute la partie /*Si le champ "genre" est rempli :*/ pour voir ce que ça dit.
/*Si le champ "genre" est rempli :*/
if(isset($_POST['genre']))
Soit dit en passant ton test ne test pas si le champs genre est rempli mais si la variable existe peu importe que le champs soit rempli ou pas si tu veux vraiment tester que le champs genre est remplis le test est : if(isset($_POST['genre'])&& $_POST['genre'])
Modifié par Su4p (08 Jun 2011 - 18:06)
Tout à fait d'accord! D'ailleurs, je trouve que sam06 devrait travailler avec des variables dès le début de son script. Ce serait bien plus commode.
Merci à vous 2. Finalement j'ai testé "!empty($_POST['genre'])" et je n'ai plus de problème de ce côté-là.

Merci d'excuser mon ignorance en php, mais je débute en programmation, et je fais là ma toute 1ere application web (c'est le baptème !). C'est sûr que mon code pourrait être mieux, et il le sera certainement dans quelque temps. Un grand merci pour votre patience et votre aide précieuse ; seul je n'y arrive pas.

J'ai encore un souci : dans mon formulaire html j'ai des boutons radio pour que l'utilisateur puisse cocher le genre de son livre. Au cas où le genre ne serait pas dans la liste, il y a un champ de saisie "text" qui s'appelle "autre_genre" dans lequel l'utilisateur peut entrer le genre de son livre.
Mon script php actuel renvoie les genres entrés par les boutons radios, mais pas ceux entrés par le champ de saisie "autre_genre". Pourtant j'ai rajouté une partie "if(isset($_POST['autre_genre'])" à la suite du "if(isset($_POST['genre'])". J'avais essayé aussi de faire "(if(isset($_POST['genre']) || ($_POST['autre_genre'])))", mais ça ne marche pas, ça ne retourne jamais les genres entrés par le champ de saisie.

Voici le code que j'ai fait (et qui doit être faux...) :

/*Si le champ "genre" est rempli :*/
		if(isset($_POST['genre']) && !empty($_POST['genre']))
		{
			$sql='SELECT titre,auteur,editeur,resume FROM livres WHERE genre="'.$_POST['genre'].'"';
			$req=mysql_query($sql) OR die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		
			if(mysql_num_rows($req)>0) 
			{
				echo '<body bgcolor="#ffeecc"><br><br>
						<h2><center>Genre demand&eacute;&nbsp;:&nbsp;<i>'.$_POST['genre'].'</i></center></h2>
						<table border="1" cellpadding="10" cellspacing="0" width="90%" align="center"> 
							<tr bgcolor="#f15609">
								<th width="500">Titre</th>
								<th width="500">Auteur</th>
								<th width="500">Editeur</th>
								<th width="500">R&eacute;sum&eacute;</th>
							</tr>';
							
			while($tableau=mysql_fetch_array($req))
    	{
    		echo '<tr>							
								<td align="center" style="font-size:11pt; font-weight:bold">"'.$tableau['titre'].'"</td>
								<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['auteur'].'</td>
								<td align="center" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['editeur'].'</td>
								<td align="justify" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['resume'].'</td>
							</tr>';
					}
					echo	'</table>';
			}
		}
		
		
		/*Si le champ "autre_genre" est rempli :*/
		if(isset($_POST['autre_genre']) && !empty($_POST['autre_genre']))
		{
			$sql='SELECT titre,auteur,editeur,resume FROM livres WHERE genre="'.$_POST['autre_genre'].'"';
			$req=mysql_query($sql) OR die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		
			if(mysql_num_rows($req)>0) 
			{
				echo '<body bgcolor="#ffeecc"><br><br>
						<h2><center>Genre demand&eacute;&nbsp;:&nbsp;<i>'.$_POST['autre_genre'].'</i></center></h2>
						<table border="1" cellpadding="10" cellspacing="0" width="90%" align="center"> 
							<tr bgcolor="#f15609">
								<th width="500">Titre</th>
								<th width="500">Auteur</th>
								<th width="500">Editeur</th>
								<th width="500">R&eacute;sum&eacute;</th>
							</tr>';
							
			while($tableau=mysql_fetch_array($req))
    	{
    		echo '<tr>							
								<td align="center" style="font-size:11pt; font-weight:bold">"'.$tableau['titre'].'"</td>
								<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['auteur'].'</td>
								<td align="center" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['editeur'].'</td>
								<td align="justify" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['resume'].'</td>
							</tr>';
					}
					echo	'</table>';
			}
		}		
	
	/*Fermeture de la connexion :*/				
	mysql_close();


Pourriez-vous m'aider ? (ou quelqu'un d'autre).
Bonjour,
Dans ton formulaire tu devrais avoir qqch comme:
 Autre genre : <input type="text" name="autre_genre" size="30" />

En soumettant le formulaire, tu récupères dans ton script php les données saisies dans ce champ:
$autregenre = $_POST['autre_genre'];
et tu fais les mêmes vérifications ou actions que pour les autres points.
Merci de ta réponse. Ce que j'ai oublié de préciser, c'est qu'il faut que les valeurs de "autre_genre" s'inscrivent dans la même colonne que celle des données "genre". En effet dans la base de données je n'ai créé qu'une seule colonne "genre", et les valeurs de "genre" et "autre_genre" s'y inscrivent. Mais lorsque je veux récupérer dans mon tableau formaté les valeurs "autre_genre" dans la colonne "genre" (ça doit être transparent pour l'utilisateur) là ça ne fonctionne plus. J'avais déjà essayé de faire ce que tu me dis, mais sans succès. Voici le code que j'avais fait :

/*Si le champ "genre" est rempli :*/
		if(isset($_POST['genre']) && !empty($_POST['genre']))
		{
			$sql='SELECT titre,auteur,editeur,resume FROM livres WHERE genre="'.$_POST['genre'].'"';
			$req=mysql_query($sql) OR die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		
			if(mysql_num_rows($req)>0) 
			{
				echo '<body bgcolor="#ffeecc"><br><br>
						<h2><center>Genre demand&eacute;&nbsp;:&nbsp;<i>'.$_POST['genre'].'</i></center></h2>
						<table border="1" cellpadding="10" cellspacing="0" width="90%" align="center"> 
							<tr bgcolor="#f15609">
								<th width="500">Titre</th>
								<th width="500">Auteur</th>
								<th width="500">Editeur</th>
								<th width="500">R&eacute;sum&eacute;</th>
							</tr>';
							
			while($tableau=mysql_fetch_array($req))
    	{
    		echo '<tr>							
								<td align="center" style="font-size:11pt; font-weight:bold">"'.$tableau['titre'].'"</td>
								<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['auteur'].'</td>
								<td align="center" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['editeur'].'</td>
								<td align="justify" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['resume'].'</td>
							</tr>';
					}
					echo	'</table>';
			}
		}
		
		
		/*Si le champ "autre_genre" est rempli :*/
		if(isset($_POST['autre_genre']) && !empty($_POST['autre_genre']))
		{
			$sql='SELECT titre,auteur,editeur,resume FROM livres WHERE genre="'.$_POST['autre_genre'].'"';
			$req=mysql_query($sql) OR die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		
			if(mysql_num_rows($req)>0) 
			{
				echo '<body bgcolor="#ffeecc"><br><br>
						<h2><center>Genre demand&eacute;&nbsp;:&nbsp;<i>'.$_POST['autre_genre'].'</i></center></h2>
						<table border="1" cellpadding="10" cellspacing="0" width="90%" align="center"> 
							<tr bgcolor="#f15609">
								<th width="500">Titre</th>
								<th width="500">Auteur</th>
								<th width="500">Editeur</th>
								<th width="500">R&eacute;sum&eacute;</th>
							</tr>';
							
			while($tableau=mysql_fetch_array($req))
    	{
    		echo '<tr>							
								<td align="center" style="font-size:11pt; font-weight:bold">"'.$tableau['titre'].'"</td>
								<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['auteur'].'</td>
								<td align="center" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['editeur'].'</td>
								<td align="justify" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['resume'].'</td>
							</tr>';
					}
					echo	'</table>';
			}
		}		
	
	/*Fermeture de la connexion :*/				
	mysql_close();
Donc, si j'ai bien compris, dans ta table "livres", tu as un champ nommé "genre", mais tu n'as pas de champ nommé "autre_genre". Les données introduites dans l'input type text "autre genre" du formulaire sont stockées dans la champ "genre" de ta table "livres".
C'est bien ça?
Si c'est la cas, quel "type" dans la structure de ta table as-tu assigné à ce champ?

Il est dommage de ne pas disposer de ton code complet (formulaire html, table mysql ...). Ce serait plus simple pour t'aider Smiley cligne .

J'ai aussi pensé à ceci : il faudra prévoir d'empêcher que l'utilisateur puisse à la fois cocher un bouton radio ET remplir le champ "autre genre" Smiley cligne .
Modifié par lddsoft (09 Jun 2011 - 15:56)
Non, je me suis trompé, dans ma table mysql j'ai une colonne "genre" où viennent s'inscrire les boutons radio cochés, et une colonne "autre_genre" où viennent s'inscrire les valeurs entrées par le champ de saisie du formulaire. Le type de ces 2 champs mysql est VARCHAR. Le formulaire possède une liste de boutons radio qui liste différents genres de livres (ex :roman, cuisine, photo, bd, etc) et en-dessous un champ de type="text" pour entrer un genre qui n'est pas dans cette liste (ex : poésie, sport...). L'insertion des données dans la table mysql se fait bien dans les bonnes colonnes. Mais la sortie, quand on veut retrouver une référence pose problème. Si l'utilisateur cherche tous ses livres de cuisine ou de photo, pas de problème ça les renvoie : c'est ce qui correspond à la liste des boutons radio. Mais s'il veut ses livres de sport ou de poésie, là ça ne renvoie rien (page blanche) : c'est ce qui correspond aux entrées dans le champ texte du formulaire. Et pourtant il y a bien des livres de sport ou de poésie dans la base de données.

L'affichage de mes données se fait dans un tableau html avec une colonne par champ de la table mysql (titre, auteur, éditeur, genre, résumé). Mais je n'ai pas fait de colonne spécifique dans le tableau html pour la rubrique "autre_genre" car je veux que les données "genre" et "autre_genre" s'affichent dans la même colonne du tableau html. L'utilisateur n'a pas besoin de connaître la "cuisine" qui est derrière : qu'il ait entré le genre de son livre en cochant un bouton ou en l'écrivant en toutes lettres, pour lui c'est pareil, et le tableau doit seulement dire : "Vous avez demandé tel genre, voici tous les livres qui correspondent", quellle que soit la façon dont le genre a été entré dans la base de données. Et donc c'est ça qui ne fonctionne pas comme je veux.

Effectivement, je n'avais pas pensé à la possibilité qu'on coche un bouton ET qu'on remplisse un champ. Je viens d'essayer : mes 2 colonnes "genre" et "autre_genre" de la base de données sont remplies... Mais ça je ne sais pas faire.

Voici mon script php pour l'extraction des données :

<html>
<head>
<link rel="stylesheet" type="text/css" href="./styles.css">
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0">

		<tr>

			<td><a href="../projet/contenu.html"><img src="../projet/ressources/bouton-page_daccueil.jpeg" alt="bouton" ></td>

			<td><a href="../projet/enregistrement.html"><img src="../projet/ressources/bouton-enregistrement.jpeg" alt="bouton" ></td>
			<td><a href="../projet/consultation.html"><img src="../projet/ressources/bouton-consultation.jpeg" alt="bouton" ></td>

			<td><a href="../projet/suppression.html"><img src="../projet/ressources/bouton-suppression.jpeg" alt="bouton" ></td>		

		</tr>

	</table>
</body>
</html>
<?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']) && !empty($_POST['auteur']))
	{
		$sql='SELECT titre,genre,editeur,resume FROM livres WHERE auteur="'.$_POST['auteur'].'"';
		$req=mysql_query($sql) OR die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		
		if(mysql_num_rows($req)>0)
   	{
			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" style="border-collapse:collapse; border:solid black 2px;"> 
						<tr bgcolor="#f15609">
							<th width="500">Titre</th>
							<th width="150">Genre</th>
							<th width="500">Editeur</th>
							<th width="500">R&eacute;sum&eacute;</th>
						</tr>';
						
			while($tableau=mysql_fetch_array($req))
    		{
    			echo '<tr>	
							<td align="center" style="font-size:11pt; font-weight:bold">"'.$tableau['titre'].'"</td>
							<td align="center" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['genre'].$tableau['autre_genre'].'</td>
							<td align="center" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['editeur'].'</td>
							<td align="justify" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['resume'].'</td>
						</tr>';
			}
			echo '</table>';	
		}	
	}
	
		/*Si le champ "titre" est rempli :*/
		if(isset($_POST['titre']) && !empty($_POST['titre']))
		{
			$sql='SELECT * FROM livres WHERE titre="'.$_POST['titre'].'"';
			$req=mysql_query($sql) OR die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		
			if(mysql_num_rows($req)>0) 
			{
				echo '<body bgcolor="#ffeecc"><br><br>
						<table border="0" cellpadding="0" cellspacing="0">

		
						<h2><center>Livres demand&eacute;s&nbsp;:</center></h2>
						<table border="1" cellpadding="10" cellspacing="0" width="90%" align="center" style="border-collapse:collapse; border:solid black 2px;"> 
							<tr bgcolor="#f15609">
								<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>';
							
					while($tableau=mysql_fetch_array($req))
    				{
    					echo '<tr>		
								<td align="center" style="font-size:11pt; font-weight:bold">"'.$_POST['titre'].'"</td>
								<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['auteur'].'</td>
								<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['editeur'].'</td>
								<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['genre'].$tableau['autre_genre'].'</td>
								<td align="justify" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['resume'].'</td>
							</tr>';
					}
				echo	'</table>';
			}
		}
		
		/*Si le champ "éditeur" est rempli :*/	
		if(isset($_POST['editeur']) && !empty($_POST['editeur']))
		{
			$sql='SELECT titre,auteur,genre,resume FROM livres WHERE editeur="'.$_POST['editeur'].'"';
			$req=mysql_query($sql) OR die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		
			if(mysql_num_rows($req)>0) 
			{
				echo '<body bgcolor="#ffeecc"><br><br>
						<h2><center>Editeur demand&eacute;&nbsp;:&nbsp;<i>'.$_POST['editeur'].'</i></center></h2>
						<table border="1" cellpadding="10" cellspacing="0" width="90%" align="center" style="border-collapse:collapse; border:solid black 2px;"> 
							<tr bgcolor="#f15609">
								<th width="500">Titre</th>
								<th width="500">Auteur</th>
								<th width="150">Genre</th>
								<th width="500">R&eacute;sum&eacute;</th>
							</tr>';
							
				while($tableau=mysql_fetch_array($req))
    			{
    				echo '<tr>
								<td align="center" style="font-size:11pt; font-weight:bold">"'.$tableau['titre'].'"</td>
								<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['auteur'].'</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>';
			}
				echo	'</table>';	
		}
	}
		
		/*Si le champ "genre" est rempli :*/
		if(isset($_POST['genre']) && !empty($_POST['genre']))
		{
			$sql='SELECT titre,auteur,editeur,resume FROM livres WHERE genre="'.$_POST['genre'].'"';
			$req=mysql_query($sql) OR die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		
			if(mysql_num_rows($req)>0) 
			{
				echo '<body bgcolor="#ffeecc"><br><br>
						<h2><center>Genre demand&eacute;&nbsp;:&nbsp;<i>'.$_POST['genre'].'</i></center></h2>
						<table border="1" cellpadding="10" cellspacing="0" width="90%" align="center" style="border-collapse:collapse; border:solid black 2px;"> 
							<tr bgcolor="#f15609">
								<th width="500">Titre</th>
								<th width="500">Auteur</th>
								<th width="500">Editeur</th>
								<th width="500">R&eacute;sum&eacute;</th>
							</tr>';
							
				while($tableau=mysql_fetch_array($req))
    			{
    				echo '<tr>							
								<td align="center" style="font-size:11pt; font-weight:bold">"'.$tableau['titre'].'"</td>
								<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['auteur'].'</td>
								<td align="center" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['editeur'].'</td>
								<td align="justify" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['resume'].'</td>
							</tr>';
				}
					echo	'</table>';
			}
		}			
	/*Fermeture de la connexion :*/				
	mysql_close();
?>	



Et le formulaire html :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Page enregistrement</title>

<link rel="stylesheet" type="text/css" href="./styles.css">

<script type="text/javascript" >
	/*Teste les champs de saisie texte :*/
	<!--
	function test()
		{
			var ok=0;
			if (document.formulaire1.titre.value=='')
			{
				document.formulaire1.titre.value=prompt('Veuillez remplir le champ "Titre" :');
				ok=1;
			}
				if (document.formulaire1.auteur.value=='')
			{
				document.formulaire1.auteur.value=prompt('Veuillez remplir le champ "Auteur" :');
				ok=1;
			}
			if (document.formulaire1.editeur.value=='')
			{
				document.formulaire1.editeur.value=prompt('Veuillez remplir le champ "Editeur" :');
				ok=1;
			}
			if (ok==0)
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		-->
</script>

<script type="text/javascript" >
	/*Teste les boutons radio :*/
	<!--
	function verifRadio()
	{
		var radio=document.formulaire1.genre;
		var rlength=radio.length;
		var oui=false;
		var champ="";
		for (var i=0; i<rlength; i++)
		{
			if (radio[i].checked || champ !="")
			{
				oui=true;
			}
		}
		if (oui)
		{
			return true;
		}
		else
		{
			if (document.getElementById('autre_genre').value != "")
			{
				return true;
			}
			else
			{
				window.alert("Veuillez indiquer le genre du livre");
				return false;
			}
		}
	}
	-->
</script>

<script type="text/javascript" >
	/*Script pour contrôler l'affichage du formulaire si JavaScript n'est pas activ&eacute; :*/
	<!--
	function displayJsElements(parent)
	{
		parent=(parent ? parent:document.body);
		var nodes=parent.childNodes;
		for (var i=0;i<nodes.length;i++)
		{
			if(nodes[i].tagName)
			{
				//On supprime l'éventuelle présence de "jsactif" :
				if(nodes[i].className)
				{
					var class_list=nodes[i].className.split(' ');
					nodes[i].className='';
					for (var j=0;j<class_list.length;j++)
					{
						if (class_list[j] != 'jsactif')
						{
							nodes[i].className += class_list[j];
						}
					}
				}
				displayJsElements(nodes[i]);
			}
		}
	}
	-->
</script>
</head>

<body onload="displayJsElements();">
	<div class="jsactif">
	<table border="0" cellpadding="0" cellspacing="0">
		<tr>
			<td><a href="../projet/contenu.html"><img src="../projet//ressources/bouton-page_daccueil.jpeg" alt="bouton" ></td>
			<td><a href="../projet/consultation.html"><img src="../projet/ressources/bouton-consultation.jpeg" alt="bouton" ></td>
			<td><a href="../projet/suppression.html"><img src="../projet/ressources/bouton-suppression.jpeg" alt="bouton" ></td>		
		</tr>
	</table>
	
	<form method="post" action="./insertion_table.php" name="formulaire1" onsubmit="return verifRadio();">
	<table class="table_form" cellpadding="0" cellspacing="0">
	<caption class="gros_titre">Nouveau livre</caption>
		<tr>
			<td class="chapo">
				Vous pouvez enregistrer sur cette page tous les livres de votre biblioth&egrave;que, et par la suite tous les nouveaux livres que vous acquerrez.<br>
				Attention : tous les champs sont OBLIGATOIRES, sauf le r&eacute;sum&eacute; de livre qui, bien que facultatif, est fortement recommand&eacute;.
			</td>
		</tr>
		<tr>
			<td height="60">&nbsp;</td>
		</tr>
		
		<tr>
			<td>
				<fieldset>
					<legend class="texte_fieldset">R&eacute;f&eacute;rences du livre</legend>
						<table border="0" cellpadding="0" cellspacing="10">
								<tr>              
									<td class="legende"><label for="titre">Titre&nbsp;:&nbsp;</label></td>
									<td><input name="titre" id="titre" type="text" size="40" class="champ"></td>
								</tr>
				
								<tr>
									<td class="legende"><label for="auteur">Auteur&nbsp;:&nbsp;</label></td>
									<td><input name="auteur" id="auteur" type="text" size="30" class="champ"></td>
								</tr>
								
								<tr>
									<td class="legende"><label for="editeur">&Eacute;diteur&nbsp;:&nbsp;</label></td>
									<td><input name="editeur" id="editeur" type="text" size="30" class="champ"></td>
								</tr>
								<tr>
									<td height="5">&nbsp;</td>								
								</tr>
								<tr>
									<td><input type="reset" name="reset" value="   Recommencer   " class="bouton_simple"></td>
								</tr>
							</table>		
				</fieldset>
				
				<fieldset>
					<legend class="texte_fieldset">Genre</legend>
						<table border="0" cellpadding="0" cellspacing="0">
							<tr>
								<td>
								<input type="radio" name="genre" id="roman" value="roman"><label for="roman" class="legende">Roman</label><br>
								<input type="radio" name="genre" id="informatique" value="informatique"><label for="informatique" class="legende">Informatique</label><br>
								<input type="radio" name="genre" id="sante" value="sante"><label for="sante" class="legende">Sant&eacute;</label><br>
								<input type="radio" name="genre" id="spiritualite" value="spiritualite"><label for="spiritualite" class="legende">Spiritualit&eacute;</label><br>
								<input type="radio" name="genre" id="cuisine" value="cuisine"><label for="cuisine" class="legende">Cuisine</label><br>
								<input type="radio" name="genre" id="bricolage" value="bricolage"><label for="bricolage" class="bricolage">Bricolage</label><br>
								<input type="radio" name="genre" id="nature" value="nature"><label for="nature" class="legende">Nature</label><br>
								<input type="radio" name="genre" id="photo" value="photo"><label for="photo" class="legende">Photo</label><br>
								<input type="radio" name="genre" id="bd" value="bd"><label for="bd" class="legende">Bande dessin&eacute;e</label><br>
								</td>
							</tr>
							
							<tr>
								<td>&nbsp;</td>							
							</tr>
							
							<tr>
								<td class="legende">
									<label for="autre_genre">Autre genre :&nbsp;</label><input type="text" name="autre_genre" id="autre_genre" size="30" class="champ">
								</td>							
							
						</table>
				</fieldset>
				
				<fieldset>
					<legend class="texte_fieldset">Fiche r&eacute;sum&eacute;</legend>
					<table border="0" cellpadding="0" cellspacing="0"> 
						<tr> 
							<td><i><font size="2">Faites ici un court r&eacute;sum&eacute; de votre livre&nbsp;:</font></i></td>
						</tr>
						<tr> 
							<td><textarea name="resume" id="resume" rows="20" cols="110" class="champ"></textarea></td>
						</tr>
					</table>				
				</fieldset>	
			</td>
		</tr>	
				
		</tr>	
			<td>
			<input type="reset" name="reset" value="  Tout recommencer  " class="bouton_simple2">
			<input type="submit" name="submit" value="   Valider   " class="bouton_simple" onclick="test();">
			</td>		
		<tr>	
	</table>
	</form>
	</div>
	
<script type="text/javascript" >
	document.formulaire1.titre.focus();
</script>

<noscript>
	<div>
	<table bgcolor="red" border="0" cellpadding="0" cellspacing="0" width="100%" height="250">
		<tr bgcolor="#ffeecc" >
			<td>&nbsp;</td>		
		</tr>
		<tr>
			<td align="center">			
				<h1>ERREUR</h1>
				JavaScript n'est pas activ&eacute; sur votre navigateur.
				<h2>Activez-le pour pouvoir faire fonctionner cette page correctement</h2><br>
				(Menu "&Eacute;dition"=>"Pr&eacute;f&eacute;rences"=>onglet "Contenu")
			</td>
		</tr>
	</table>
	</div>				
</noscript>

</body>
</html>


Voilà. Merci pour ton aide.[/i][/i][/i][/i][/i][/i][/i]
sam06 a écrit :
Mais s'il veut ses livres de sport ou de poésie, là ça ne renvoie rien (page blanche)

N'est-ce pas assez normal dans la mesure où tu ne vas pas lire ce que contient le champ "autre_genre" de la table "livres" dans ta BDD ? On ne voit que ceci dans ton code:
$sql='SELECT titre,auteur,editeur,resume FROM livres WHERE genre="'.$_POST['genre'].'"';
lddsoft a écrit :

N'est-ce pas assez normal dans la mesure où tu ne vas pas lire ce que contient le champ &quot;autre_genre&quot; de la table &quot;livres&quot; dans ta BDD ? On ne voit que ceci dans ton code:
$sql='SELECT titre,auteur,editeur,resume FROM livres WHERE genre=&quot;'.$_POST['genre'].'&quot;';




Mais non, j'ai fait plein de combinaisons de codes possibles et imaginables, et rien ne marche. J'ai aussi fait ça ce matin, et c'est pas mieux :



		/*Si le champ "genre" est rempli :*/
		if(isset($_POST['genre']) && !empty($_POST['genre']))
		{
			$sql='SELECT titre,auteur,editeur,resume FROM livres WHERE genre="'.$_POST['genre'].'"';	
   		$genre = $_POST['genre'];
		} 
		elseif(isset($_POST['autre_genre']) && !empty($_POST['autre_genre'])) 
		{			
			$sql='SELECT titre,auteur,editeur,resume FROM livres WHERE genre="'.$_POST['autre_genre'].'"';
    		$genre = $_POST['autre_genre'];
		}
 
			$req=mysql_query($sql) OR die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
 
		if(mysql_num_rows($req)>0) 
		{
		echo '<body bgcolor="#ffeecc"><br><br>
				<h2><center>Genre demand&eacute;&nbsp;:&nbsp;<i>'.$genre.'</i></center></h2>
				<table border="1" cellpadding="10" cellspacing="0" width="90%" align="center" style="border-collapse:collapse; border:solid black 2px;"> 
				<tr bgcolor="#f15609">
					<th width="500">Titre</th>
					<th width="500">Auteur</th>
					<th width="500">Editeur</th>
					<th width="500">R&eacute;sum&eacute;</th>
				</tr>';
				
		while($tableau=mysql_fetch_array($req))
		{
		echo '<tr>							
					<td align="center" style="font-size:11pt; font-weight:bold">"'.$tableau['titre'].'"</td>
					<td align="center" style="font-size:11pt; font-weight:normal">'.$tableau['auteur'].'</td>
					<td align="center" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['editeur'].'</td>
					<td align="justify" style="font-size:11pt; font-weight:normal">&nbsp;'.$tableau['resume'].'</td>
				</tr>';
		}
		echo	'</table>';
		
		
		
		/*Fermeture de la connexion :*/				
	mysql_close();
?>


J'ai mis l'autre code dans mon précédent post car rien ne marche et dans le tas j'en ai pris un qui marche pas au hasard. Dans mon post de 11 h ce matin, j'avais envoyé une autre combinaison qui ne fonctionne pas non plus. Je ne peux pas non plus poster tous les scripts que j'ai essayé sinon je vais saturer le forum. Là je t'en envoie encore un autre modèle qui pourtant paraît logique, mais qui ne marche pas. Je ne sais plus quoi faire. C'est à se taper la tête contre les murs. Ma page de retour quand je demande un genre entré par le champ texte est toujours BLANCHE.....
Normal, tu vas pas étaler toutes tes "errances" sur le forum.
Ne serait-il pas préférable de supprimer le champ "autre_genre" de ta table "livres" et d'inscrire dans le champ "genre" de cette même table la valeur de l'input type=text "autre_genre"?

P.S.: excuse-moi, mais je ne pourrai plus être disponible aujourd'hui.
Modifié par lddsoft (09 Jun 2011 - 20:08)