2009-12-13 3 views
0

Comment est-ce que j'obtiens l'incrément de la rangée à la rangée suivante? Je fais une table d'étiquettes 3 de large et dix de haut. Le résultat que j'obtiens est trois répétitions dans chaque rangée. Comment puis-je passer à la ligne suivante pour chaque cellule de tableau.incrémenter mysql_fetch_array?

$i =0; 
for ($i = 1; $i <= 3; ++$i){ 
while($row = mysql_fetch_array($result)){ 

$company = $row['company']; 
$comp_strt = $row['comp_strt']; 
$comp_city = $row['comp_city']; 
$comp_state = $row['comp_state']; 
$comp_zip = $row['comp_zip']; 
$celldata= $company."<br>".$comp_strt."<br>".$comp_city.",&nbsp;".$comp_state."&nbsp;".$comp_zip; 
if($i = 1){echo "<tr style='row-height: 5em;'><td>'".$celldata."'</td>";} 
if($i = 2){echo "<td>'".$celldata."'</td>";} 
if($i = 3){echo "<td>'".$celldata."'</td></tr>"; $i = 1;} 
}} 

Répondre

1

je ferais ceci:

$cellsPerRow = 3; 
$i = 0; 
echo '<table>'; 
while ($row = mysql_fetch_array($result)) { 
    if ($i % $cellsPerRow == 0) { 
     echo '<tr>'; 
    } 

    // process $row and echo the table cell 

    if ($i % $cellsPerRow == $cellsPerRow - 1) { 
     echo '</tr>'; 
    } 
    $i++; 
} 
if ($i > 0 && $i % $cellsPerRow != 0) { // finish off row if needed 
    while ($i % $cellsPerRow != 0) { 
     echo '<td></td>'; 
     $i++; 
    } 
    echo '</tr>'; 
} 
echo '</table>'; 

Cela vous donnera toujours une bonne table.

+0

Va me prendre un peu de temps (sans jeu de mots) pour digérer celui-ci. Il semble que cette solution ne laisse aucune place à une éventuelle erreur. Merci Gumbo. – Tom

+0

@Tom: Eh bien, il y en a un. Vous devriez tester s'il y a des lignes du tout. Sinon, les étiquettes de la table seront imprimées mais sans lignes/cellules. Donc, prenez 'mysql_num_rows' dans la condition d'une instruction supplémentaire * if * qui entoure tout le' echo '

'; ... echo '
'; '. – Gumbo

+0

Ouais, un autre if (! $ Result) devrait le gérer. – Tom

0

Si vous voulez dessiner 3 étiquette à côté de l'autre, il vous suffit d'insérer un bloc </tr><tr> dans la bonne position. Vous pouvez juste avoir une variable incrémenter, pas besoin de la boucle for:

$i = 0; 
echo '<table><tr>'; 
while($row = mysql_fetch_array($result)){ 
    if($i == 3) { 
     echo '</tr><tr>'; 
     $i = 0; 
    } 

    $company = $row['company']; 
    $comp_strt = $row['comp_strt']; 
    $comp_city = $row['comp_city']; 
    $comp_state = $row['comp_state']; 
    $comp_zip = $row['comp_zip']; 
    $celldata= $company."<br>".$comp_strt."<br>".$comp_city.",&nbsp;".$comp_state."&nbsp;".$comp_zip; 

    echo "<td>$celldata</td>"; 
    $i++; 
} 
echo '</tr></table>'; 

Alors maintenant, chaque fois que le compteur $i atteint 3, il crée une rupture de ligne de table et définit le $ i à zéro, ce qui en 3 cellules par rangée.

-3

se débarrasser du cycle si pour vous ne voulez pas le faire trois fois, ffs

1

Youre utilisant = pour vérifier l'égalité. Vous êtes censé utiliser ==

if($i == 1){echo "<tr style='row-height: 5em;'><td>'".$celldata."'</td>";} 
if($i == 2){echo "<td>'".$celldata."'</td>";} 
if($i == 3){echo "<td>'".$celldata."'</td></tr>"; $i = 1;} 

probablement ne résoudra pas votre problème, mais il est un bon début.

1

Le problème est que la boucle while ne sortira pas tant que les lignes mysql_fetch_array ne seront pas épuisées. Il suffit d'utiliser la boucle while et l'incrément $i intérieur de while:

$i= 0; 
while ($row = mysql_fetch_array($result)) { 
// process the row into $celldata 
if ($i==0 || $i%3==0) { 
    if ($i > 0) // close out existing row 
    // start a new row 
} 
// output cell data 
$i++; 
} 
// Output a closing '</tr>' tag if $i > 0 
+0

Sur cette note, l'opérateur de module **% ** utilisé ici est fortement recommandé plutôt que de réinitialiser le compteur. +1 –