Diogo Muniz Diogo Muniz - 1 year ago 70
MySQL Question

PHP Variable table size with restricted number of columns

I'm trying to make an image preview in a table, just for checking the submitted files. The table can't have more than 3 cols, and the number of rows and cels is variable, because I skip the "not found" images in DB.
I did the code below, but couldn't solve the logic by myself. The table shows the same image for row, and jumps 2 results for the next one.

$dados = mysql_fetch_array (mysql_query("SELECT id,placa,usuario FROM dados WHERE id='".$_SESSION['novaOS']."'"));
$itens = mysql_result (mysql_query("SELECT itens_acessorios FROM vist_aval WHERE idp='".$_SESSION['novaOS']."'"),0);

$sqlFotos = "SELECT * FROM imagens WHERE idp='".$_SESSION['novaOS']."'";
$qrFotos = mysql_query($sqlFotos) or die();
$rowFotos = mysql_fetch_array($qrFotos) or die();


$dir_img = "../uploads/fotos/";
$foto = $rowFotos[$f];
$td = '<td><img src="'.$dir_img.''.$foto.'" style="margin:0;width:100%;height:auto"></td>';
$tr = '<tr id="gridpreview"></tr>';
if ($foto != false){
for ($r=0;$r<=3;$r++){
if ($r>0){
echo $td;
echo $tr;

Generated Table

In addiction, the message "Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\app\Finalizar.php on line 88" appears on loading. The line 88 refers to
if ($foto != false)

Answer Source

That's not how you do a columnar output. It should be more like

$col = 0;
echo '<tr>';
while($row = ... fetch row from result ...) {
    echo "<td>$row[whatever]</td>";
    if ($col > 2) {
       echo '</tr><tr>';
       $col = 0;
echo '</tr>';

You don't need two loops, just the one loop, which keeps repeating until there's more no results left in the DB.