Mounting dynamic HTML table with PHP

0

I'm not sure how to build a PivotTable with PHP.

I'm setting up an HTML table in which some data entered in a database will be displayed, I already created the SELECT that brings the database information, but I'm not sure how to build the loop to display the information since the table will have 4 columns.

I tried to mount a loop FOR but he displayed the table as follows.

Item 1 | Item 1 | Item 1 | Item 1
Item 2 | Item 2 | Item 2 | Item 2
Item 3 | Item 3 | Item 3 | Item 3

When should it show

Item 1 | Item 2 | Item 3 | Item 4
Item 5 | Item 6 | Item 7 | Item 8
Item 9 | Item 10 | Item 11 | Item 12

Loop Structure

<?php while ( $linha = mysqli_fetch_assoc($executaSelect) ) { ?>
  <tr>
    <?php for ($i = 1 ; $i <= 4 ; $i++) { ?>
      <td><?php echo $linha["nome"]; ?></td>
   <?php } ?>
  </tr>
<?php } ?>
    
asked by anonymous 16.03.2015 / 22:48

2 answers

1

I made a very detailed adaptation. The code looks great because of comments, line breaks, etc. I did this to make it easy to read and understand the code.

<?php 
/*
Inicia o contador geral que será usado para comparar a quantidade de registros retornados do banco de dados.
*/
$c = 0;
/*
Inicia o contador de colunas
*/
$i = 1;
/*
Quantidade de colunas por linha
*/
$l = 4;

/*
Quantidade de registros retornados do banco de dados
*/
$rows = mysqli_num_rows($executaSelect);

/*
Itera a consulta ao banco de dados
*/
while ( $linha = mysqli_fetch_assoc($executaSelect) )
{
    /*
    Se o valor do contador de colunas $i for igual a 1, indica que uma nova linha deve ser aberta.
    Se uma nova linha está sendo aberta, quer dizer que uma linha anterior deve ser fechada. No entando, é preciso verificar se já passou pela primeira linha, pois antes da primeira linha não há o que ser fechado.
    Para verificar isso, podemos aproveitar o contador geral $c
    */
    if( $i <= 1 )
    {
        if( $c > 0 ){echo '</tr>'} // Fecha uma linha
        echo '<tr>'; // Abre uma linha
    }

    /*
    Escreve a coluna com o valor obtido da consulta ao banco de dados
    */
    echo PHP_EOL . '<td>' . $linha["nome"] . '</td>';

    /*
    Checagem para incrementar ou resetar o contador de colunas.
    */
    if($i <= $l )
    {
        /*
        Incrementa o valor de $i para indicar que será escrita a próxima linha 
        */
        $i++;
    }else{
        /*
        Reseta para o valor 1, pois será formada nova linha caso não tenha chegado ao final indicado pela condição $c == $row
        */
        $i = 1;
    }

    /*
    Incrementa o valor do contador geral.
    Deve ser livre, sem condicionais.
    */
    $c++;

    /*
    Verifica se encontrou o final da consulta.
    Esse passo é muito importante para evitar que a última linha fique sem a tag de fechamento pois a quantidade de registros pode ser um número que não seja múltiplo do valor definido na variável $l
    */
    if( $c == $row )
    {
        echo '</tr>';
    }
}
?>
    
17.03.2015 / 01:07
1

Try the following:

<?php
$i=0;
echo '<table border="0">'
while ( $linha = mysqli_fetch_assoc($executaSelect) ) {
    if ($i === 0) echo '<tr>'
    echo '<td>' . $linha["nome"] . '</td>';
    $i++;
    if ($i === 4) { 
        echo '</tr>'; // A cada 4 colunas fecha uma linha
        $i=0; // Zera o contador para abrir nova linha no início do loop
    }
}
if ($i > 0) echo '</tr>'; // Caso a última linha tenha menos de 4 colunas, fecha a linha
echo '</table>';
?>
    
17.03.2015 / 00:48