Incrémentation des cellules dans un tableau HTML

Eléphant du PHP | 78 Messages

28 sept. 2007, 10:53

Après une recherche approfondie dans le forum, je voulais savoir, si lorsque l'on récupère et affiche des données d'une bdd dans un tableau HTML, on peut en quelques sortes incrémenter les cellules.
Je mets ci-dessous mon code d'affichage et ensuite j'expliquerais un peu mieux ce que je recherche :



	   <table border=1 align=center summary="">
	<tr>
		<td height=24 bgcolor=#C0C0C0 style="font-family: Arial;" align=center>Date</td>
		<td height=24 bgcolor=#C0C0C0 style="font-family: Arial;" align=center>Destinataire</td>
		<td height=24 bgcolor=#C0C0C0 style="font-family: Arial;" align=center>Produit</td>
		<td height=24 bgcolor=#C0C0C0 style="font-family: Arial;" align=center>Transporteur</td>
		<td height=24 bgcolor=#C0C0C0 style="font-family: Arial;" align=center>Colis</td>
		<td height=24 bgcolor=#C0C0C0 style="font-family: Arial;" align=center>Bordereau</td>
		<td height=24 bgcolor=#C0C0C0 style="font-family: Arial;" align=center>Commentaires</td>
	</tr>
	<tr>
<?php
$host = "127.0.0.1";
$user = "root"; 
$pass = ""; 
$bdd = "expeditions"; 
$table = "force"; 
$table = "produit";
$table = "expes" ;
// connexion 
@mysql_connect($host,$user,$pass) or die("Impossible de se connecter");
@mysql_select_db("$bdd") or die("Impossible de se connecter"); 
$Recherche = (isset($_POST['Recherche'])) ? $_POST['Recherche'] : ""; 
if($Recherche=="") { echo "Vous devez taper une recherche."; } 
else 
	{ 
	

if (isset($_POST['nom']))	$nom=$_POST['nom'];
else $nom="";

if (isset($_POST['produit']))	$produit=$_POST['produit'];
else $produit="";

if (isset($_POST['date']))	$date=$_POST['date'];
else $date="";

if (isset($_POST['expe']))	$expe=$_POST['expe'];
else $expe="";

if (isset($_POST['bordereau']))	$bordereau=$_POST['bordereau'];
else $bordereau="";

if (isset($_POST['colisage']))	$colisage=$_POST['colisage'];
else $colisage="";

if (isset($_POST['commentaires']))	$commentaires=$_POST['commentaires'];
else $commentaires="";

		

					?>
      
		
		<td style="font-family: Arial;" align=center>
		<?php 
		$requete ="SELECT DATE_FORMAT(date, '%d-%m-%Y') as datefr FROM `expes` WHERE `nom` LIKE '%".$Recherche."%' ORDER BY `date` DESC";	
		
		//$requete ="SELECT * FROM `expes` WHERE `date` LIKE '%".$Recherche."%' ORDER BY `date` DESC, `nom` ASC";

		$rs = mysql_query($requete) or die (mysql_error(). ": <br :>".$requete);
		if(mysql_num_rows($rs) == 0) 
			{ 
			echo 'Pas de résultat.';
			} 
			else 
				{ 
while ($row = mysql_fetch_array($rs))
{
	echo "".$row["datefr"]."<BR>"; }}

		?></td>
		<td style="font-family: Arial;" align=center>
		<?php 
$requete ="SELECT nom FROM `expes` WHERE `nom` LIKE '%".$Recherche."%' ORDER BY `nom` ASC , `date` DESC,  `id_test` ASC";
		$rs = mysql_query($requete) or die (mysql_error(). ": <br :>".$requete);
		if(mysql_num_rows($rs) == 0) 
			{
			echo 'Pas de résultat.';
			} 
			else 
				{ 
while ($row = mysql_fetch_array($rs))
{ echo "".$row["nom"]."<BR>"; }}
		?></td>
		<td style="font-family: Arial;" align=center>
		<?php 
		$requete ="SELECT produit FROM `expes` WHERE `nom` LIKE '%".$Recherche."%' ORDER BY `date` DESC, `nom` ASC, `id_test` ASC";

		$rs = mysql_query($requete) or die (mysql_error(). ": <br :>".$requete);
		if(mysql_num_rows($rs) == 0) 
			{
			echo 'Pas de résultat.';
			} 
			else 
				{ 
while ($row = mysql_fetch_array($rs))
{ echo "".$row["produit"]."<BR>"; }}
		?></td>
		<td style="font-family: Arial;" align=center>
		<?php 
		$requete ="SELECT expe FROM `expes` WHERE `nom` LIKE '%".$Recherche."%' ORDER BY `date` DESC, `nom` ASC, `id_test` ASC";

		$rs = mysql_query($requete) or die (mysql_error(). ": <br :>".$requete);
		if(mysql_num_rows($rs) == 0) 
			{
			echo 'Pas de résultat.';
			} 
			else 
				{ 
while ($row = mysql_fetch_array($rs))
{ echo "".$row["expe"]."<BR>"; }}
		?></td>
		<td style="font-family: Arial;" align=center>
		<?php 
		
$requete ="SELECT colisage FROM `expes` WHERE `nom` LIKE '%".$Recherche."%' ORDER BY `date` DESC, `nom` ASC, `id_test` ASC";

		$rs = mysql_query($requete) or die (mysql_error(). ": <br :>".$requete);
		if(mysql_num_rows($rs) == 0) 
			{
			echo 'Pas de résultat.';
			} 
			else 
				{ 
while ($row = mysql_fetch_array($rs))
{ echo "".$row["colisage"]."<BR>"; }}
		?></td>
		<td style="font-family: Arial;" align=center>
		<?php 
		
$requete ="SELECT bordereau FROM `expes` WHERE `nom`LIKE '%".$Recherche."%' ORDER BY `date` DESC, `nom` ASC, `id_test` ASC";

		$rs = mysql_query($requete) or die (mysql_error(). ": <br :>".$requete);
		if(mysql_num_rows($rs) == 0) 
			{
			echo 'Pas de résultat.';
			} 
			else 
				{ 
while ($row = mysql_fetch_array($rs))
{ echo "".$row["bordereau"]."<BR>"; }}
		?>
		<td style="font-family: Arial;" >
		<?php 
		
$requete ="SELECT commentaires FROM `expes` WHERE `nom`LIKE '%".$Recherche."%' ORDER BY `date` DESC, `nom` ASC,`id_test` ASC";

		$rs = mysql_query($requete) or die (mysql_error(). ": <br :>".$requete);
		if(mysql_num_rows($rs) == 0) 
			{
			echo 'Pas de résultat.';
			} 
			else 
				{ 
while ($row = mysql_fetch_array($rs))
{ echo "".$row["commentaires"]."<BR>"; }}
		?></td>
		<?php
Ce qui me gêne surtout c'est que si dans mon champ "commentaire" (varchar 255), il y a trop de choses écrites, cela décale tous mes résultats, tout comme lorsque je ne fais pas une recherche (dans le moteur) assez fine. Il me semble que pour ce second cas, celà vienne du fait que dans mon "SELECT" j'utilise LIKE, ce qui me donne trop de résultats.
Je voudrais que chaque ligne soit dans un <tr></tr> et pas que dans un <td></td>. Il me semble avoir vu qu'on pouvait le faire avec du PHP.

Sinon ce post fait suite à une petite série d'autres, qui m'ont bien permis d'avancer et d'être en train de finaliser ma petite application. Encore une fois merci à tous ceux qui m'ont aidé là-dedans, pas seulement en me donnant la solution, mais aussi en m'aidant à comprendre et à progresser. 8-)

Je comprends pas pourquoi, encore une fois, je n'arrive pas à voir le code entre les balises php et /php... sauf quand je fais prévisualisation du message.

Si quelqu'un pouvait me dire si c'est pareil pour lui, au moins que je mette le code différement ou si un modo pouvait résoudre ça, SVP, merci.

d0m
Mammouth du PHP | 1141 Messages

28 sept. 2007, 11:05

[...] cela décale tous mes résultats [...]
c'est à dire ?vers le coté? vers le bas? les informations correspondantes aux colonnes sont bien en dessous de leur intitulé d'entête?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

28 sept. 2007, 11:11

je n'arrive pas à voir le code entre les balises php et /php
S'il s'agit d'un problème avec le forum, il faudrait que tu postes une explication plus détaillée du phénomène dans le forum PHPFrance.

Eléphant du PHP | 78 Messages

28 sept. 2007, 11:30

[...] cela décale tous mes résultats [...]
c'est à dire ?vers le coté? vers le bas? les informations correspondantes aux colonnes sont bien en dessous de leur intitulé d'entête?
Désolé d'avoir omis ça. ça décale vers le bas en fait. Donc plus aucune information ne correspond à celle du destinataire ou de la date.

d0m
Mammouth du PHP | 1141 Messages

28 sept. 2007, 11:44

en fait tu t'y prends très mal pour faire ce que tu veux faire.

Premièrement tu fais tout un tas de requête alors qu'une seule serait suffisante et plus pratique puisque tout est dans la même table.
Au lieu de faire tout un tas de SELECT, tu en fais juste un :
//requete SQL
$requete ="SELECT DATE_FORMAT(date, '%d-%m-%Y') as datefr, nom, produit,expe,cloisage,bordereau,commentaire
           FROM `expes`
           WHERE `nom` LIKE '%".$Recherche."%' ORDER BY `date` DESC";
$rs = mysql_query($requete) or die (mysql_error(). ": <br :>".$requete);

//rangement des résultats dans un tableau
$expeditions = array();
while ($row = mysql_fetch_assoc($rs)){
  $expeditions[] = $row;
}
tu obtiens donc un tableau qui contient n sous tableaux associatifs, chacun représentant une ligne de ta requete.

ensuite tu peux les afficher lignes par lignes dans un tableau html :
foreach($expeditions as $expedition){
  //ceci est une ligne du tableau
  echo '<TR>';
  foreach($expedition as $nom_information => $information){
    //ceci est une colonne du tableau (date ou nom ou ....)
    echo '<TD>'.$information.'</TD>;
  }
  echo '</TR>';
}

Eléphant du PHP | 78 Messages

28 sept. 2007, 11:49

je n'arrive pas à voir le code entre les balises php et /php
S'il s'agit d'un problème avec le forum, il faudrait que tu postes une explication plus détaillée du phénomène dans le forum PHPFrance.
c'est fait :
http://www.phpfrance.com/forums/voir_re ... php#213586


Ok d0m ça marche nickel.
Maintenant... et dernière chose pour que cela relève de la perfection :wink: dans ma page avec moteur de recherche, j'ai deux formulaires, 1 pour la recherche par destinataire et un pour la date, ce qui n'est pas top logique dans la mesure où il suffirait certainement d'en avoir qu'un seul.

La requête qui suit te semble-t-elle aberrante avec un WHERE sur le `nom`et la `date`?
//requete SQL
$requete ="SELECT DATE_FORMAT(date, '%d-%m-%Y') as datefr, nom, produit,expe,colisage,bordereau,commentaires
FROM `expes`
WHERE `nom` , `datefr` LIKE '%".$Recherche."%' ORDER BY `date` DESC";
$rs = mysql_query($requete) or die (mysql_error(). ": <br :>".$requete);

d0m
Mammouth du PHP | 1141 Messages

28 sept. 2007, 13:01

La requête qui suit te semble-t-elle aberrante avec un WHERE sur le `nom`et la `date`?
Le meilleur moyen c'est de tester et de voir si ca te retourne bien ce que tu veux :wink:

Eléphant du PHP | 78 Messages

28 sept. 2007, 13:14

La requête qui suit te semble-t-elle aberrante avec un WHERE sur le `nom`et la `date`?
Le meilleur moyen c'est de tester et de voir si ca te retourne bien ce que tu veux :wink:
Malheureusement non. Il me retourne un message d'erreur du style :

Champ 'datefr' inconnu dans where clause:
SELECT DATE_FORMAT(date, '%d-%m-%Y') as datefr, nom, produit,expe,colisage,bordereau,commentaires FROM `expes` WHERE `nom` OR `datefr` LIKE '%london%' ORDER BY `date` DESC

En sachant que si je fais avec le champ `date`, il n'y a même pas de message d'erreur.

d0m
Mammouth du PHP | 1141 Messages

28 sept. 2007, 13:16

et sans les quotes autour de datefr?

Eléphant du PHP | 78 Messages

28 sept. 2007, 13:31

et sans les quotes autour de datefr?
Exactement le même résultat en m'indiquant que le champ n'existe pas.