Page 1 sur 1

Blocage sur while

Posté : 28 juin 2006, 11:50
par bunk
Bonjour,

je bloque sur une petite boucle while avec un tableau, voici le code :
echo "<table border='0' width='97%'><tr>\n";

$li = 1;
						while ($val = mysql_fetch_array($req)){
							//$id_partenaire = $val ["id_partenaire"];
							$nom = $val ["nom_partenaire"];
							$description = $val ["description_partenaire"];
							//$type = $val ["type_partenaire"];
							//$genre = $val ["genre_partenaire"];
							$logo = $val ["logo_partenaire"];
							$lien = $val ["lien_partenaire"];
							$date = $val ["date_partenaire"];
																						
							echo "<td width='48%' valign='top'>\n";
							echo "<div align='justify'>\n";
							echo "<img src='http://" . $logo . "' style='vertical-align: middle;' alt='Logo de : ' width='88' height='31' /> <a href='http://" . $lien . "' target='_blank'>" . $nom . "</a>";
							echo "<br />" . $description . "\n";
							echo "<br /><font size='1'>Ajouté le : " . $date . "</font>\n";
							echo "<br /><br />\n";
							
							echo "</div>\n";
							echo "</td>\n";
							
							echo "<td width='2%'>\n";
							echo "</td>\n";

							if ($li == 2) {

								echo "</tr>\n";	
								echo "<tr>\n";	
								$li = 0;
							} 
							
							$li++;															
						}
echo "</table>\n";
quand je fais le test de validation avec w3.org il m'indique que le dernier <tr> est ouvert et qu'il est suivi de </table>

en fait je souhaite classé les données sur 2 colonnes.
Merci d'avance pour votre aide ![/code]

Posté : 28 juin 2006, 11:57
par guilt92
C est tout a fait normal ce message d erreur car tu ouvre un <tr> que tu ne refermes pas sur la derniere itération du while...

Je te conseille la chose suivante : gère les <tr> dans le while, tu l ouvres au début et tu le fermes à la fin ca sera mieux...

Enleve le <tr> dans la déclaration du table et fait un echo "<tr>"; au début du while et un echo "</tr>"; à la fin du while, c'est la meilleure méthode pour avoir une ligne par résultat... :)

Posté : 28 juin 2006, 12:43
par bunk
oui ca d'accord pour avoir un resultat par ligne mais ce n'est pas ce que je veux faire, je voudrais 2 resultat par ligne

Posté : 28 juin 2006, 12:52
par sadeq
Puisque tu a ouvert un <tr> avant le while, il faut le fermer après le while.
echo "</tr></table>\n";
sans rien changer dans ton code actuel.

Posté : 28 juin 2006, 13:03
par bunk
au début c'était comme ca mais j'ai quand même une erreur sur le dernier <TR> il me donne ca :

Code : Tout sélectionner

<tr> </tr></table>
donc non compatible w3

en fait avec ce code :

echo "<table border='0' width='97%'><tr>\n";

$li = 1;
						while ($val = mysql_fetch_array($req)){
							//$id_partenaire = $val ["id_partenaire"];
							$nom = $val ["nom_partenaire"];
							$description = $val ["description_partenaire"];
							//$type = $val ["type_partenaire"];
							//$genre = $val ["genre_partenaire"];
							$logo = $val ["logo_partenaire"];
							$lien = $val ["lien_partenaire"];
							$date = $val ["date_partenaire"];
																						
							echo "<td width='48%' valign='top'>\n";
							echo "<div align='justify'>\n";
							echo "<img src='http://" . $logo . "' style='vertical-align: middle;' alt='Logo de : ' width='88' height='31' /> <a href='http://" . $lien . "' target='_blank'>" . $nom . "</a>";
							echo "<br />" . $description . "\n";
							echo "<br /><font size='1'>Ajouté le : " . $date . "</font>\n";
							echo "<br /><br />\n";
							
							echo "</div>\n";
							echo "</td>\n";
							
							echo "<td width='2%'>\n";
							echo "</td>\n";

							if ($li == 2) {

								echo "</tr>\n";	
								echo "<tr>\n";	
								$li = 0;
							} 
							$li++;															
						}
echo "</tr></table>\n";
il faudrait que je puisse ne pas mettre le dernier <tr> qui n'aparais que quand (logique) le nombre de résultat est pair

merci pour votre aide

Posté : 28 juin 2006, 13:10
par guilt92
oui ca d'accord pour avoir un resultat par ligne mais ce n'est pas ce que je veux faire, je voudrais 2 resultat par ligne
$ligne=true;
while(...)
{
if($ligne) echo "<tr>";
//remplissage "normal des colonnes

if($ligne) {
echo "</tr>";
$ligne=false;
}
else $ligne=true;
}

Posté : 28 juin 2006, 13:24
par bunk
merci guilt92, cependant je ne comprend pas la difference avec ce que j'avais fait :
$li = 1;
$ligne=true;
						while ($val = mysql_fetch_array($req)){
							//$id_partenaire = $val ["id_partenaire"];
							$nom = $val ["nom_partenaire"];
							$description = $val ["description_partenaire"];
							//$type = $val ["type_partenaire"];
							//$genre = $val ["genre_partenaire"];
							$logo = $val ["logo_partenaire"];
							$lien = $val ["lien_partenaire"];
							$date = $val ["date_partenaire"];
															
						if($ligne) echo "<tr>";

							echo "<td width='48%' valign='top'>\n";
							echo "<div align='justify'>\n";
							echo "<img src='http://" . $logo . "' style='vertical-align: middle;' alt='Logo de : ' width='88' height='31' /> <a href='http://" . $lien . "' target='_blank'>" . $nom . "</a>";
							echo "<br />" . $description . "\n";
							echo "<br /><font size='1'>Ajouté le : " . $date . "</font>\n";
							echo "<br /><br />\n";
							
							echo "</div>\n";
							echo "</td>\n";
							
							if ($li == 1) {
								echo "<td width='2%'>\n";
								echo "</td>\n";
							}

							if ($li == 2) {
								$li = 0;
							} 
							
							if(!$ligne) $ligne=true;
							else {
								echo "</tr>";
								$ligne=false;
							}

							$li++;															
						}
echo "</table>\n";
la condition comme ceci est toujours vrai ce qui reviens à avoir 1 résultat par ligne

Posté : 28 juin 2006, 13:33
par sadeq
Remarque dans le while que quand la variable $l =1 alors tu fais un <tr>
alors de la même quand $l = 2 tu fais un </tr>

Et à ce moment là : pas de <tr> et </tr> avant et après la boucle while

Je te propose une correction où j'ai renommer $l par $col car il s'agit d'un compteur de colonnes et non de lignes (terminologie déroutante)

Ce qui donne ton code :
echo "<table border='0' width='97%'>\n"; 

$col = 1; 
                        while ($val = mysql_fetch_array($req)){ 
                            //$id_partenaire = $val ["id_partenaire"]; 
                            $nom = $val ["nom_partenaire"]; 
                            $description = $val ["description_partenaire"]; 
                            //$type = $val ["type_partenaire"]; 
                            //$genre = $val ["genre_partenaire"]; 
                            $logo = $val ["logo_partenaire"]; 
                            $lien = $val ["lien_partenaire"]; 
                            $date = $val ["date_partenaire"]; 
                             
                            //nouvelle ligne
                            if ($col == 1) { 
                                echo "<tr>\n";     
                            }   
   
                            //Une colonne                                         
                            echo "<td width='48%' valign='top'>\n"; 
                            echo "<div align='justify'>\n"; 
                            echo "<img src='http://" . $logo . "' style='vertical-align: middle;' alt='Logo de : ' width='88' height='31' /> <a href='http://" . $lien . "' target='_blank'>" . $nom . "</a>"; 
                            echo "<br />" . $description . "\n"; 
                            echo "<br /><font size='1'>Ajouté le : " . $date . "</font>\n"; 
                            echo "<br /><br />\n"; 
                             
                            echo "</div>\n"; 
                            echo "</td>\n"; 
                             
                            echo "<td width='2%'>\n"; 
                            echo "</td>\n"; 
                            
                            //fermer la ligne et passer à la suivante si existe => $col=0 
                            if ($col == 2) { 
                                echo "</tr>\n";     
                                $col = 0; 
                            } 
                            $col++;                                                             
                        } 
echo "</table>\n";

Posté : 28 juin 2006, 13:38
par bunk
Merci sadeq et merci aux autres de m'avoir aidé !

Posté : 28 juin 2006, 13:42
par guilt92
Juste pour terminer mon code n est pas toujours vrai cela alterne une ligne sur 2.

Mais tu avais mis un if(!$ligne) a la place d un if($ligne)....