visto il codice che hai postato e il risultato, solo per darti uno spunto ti mostro come lo avrei scritto io (non avendo una query da ciclare, ho usato un array e un foreach invece del while)
Codice PHP:
<?php
// array di test
$arr = array("pippo", "pluto", "topolino", "minnie", "paperoga");
$count = 0; //il contatore da utilizzare nel ciclo while
// inizializzo una variabile per creare la tabella
$table = "<table>\n";
foreach($arr as $v) {
// concateno i "pezzi" della tabella alla variabile
if($count % 2 == 0) {
$table .= "\t<tr>\n";
}
$table .= "\t\t<td>$v</td>\n";
$table .= "\t\t<td>$v</td>\n";
$table .= "\t\t<td><a href='$v'><img src='$v'></a></td>\n";
if($count %2 != 0) {
$table .= "\t</tr>\n";
}
$count++;
}
// nel caso in cui la query (o l'array) restituisca un numero di righe dispari
// devo chiudere la riga della tabella, inserendo anche le colonne che mancano
if($count % 2 != 0) {
$table .= "\t\t<td> </td>\n";
$table .= "\t\t<td> </td>\n";
$table .= "\t\t<td> </td>\n";
$table .= "\t</tr>\n";
}
$table .= "</table>\n";
// stampo la tabella
echo $table;
?>
non è che sia il modo più elegante di scrivere una tabella in PHP, ci sono modi molto più eleganti (ad esempio, un template engine)
EDIT: dimenticavo di dirti che l'HTML della tua tabella ha qualche problemino, guarda bene i vari td e tr