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 :
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)....