Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Diego Chiarelotto

Mostrar resultados em 2 colunas

Recommended Posts

Use dois loops, um dentro do outro. Enquanto um desenha a coluna o outro as linhas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Roani como eu faria.

 

criar 2 querys e 2 whiles?

 

um ficaria assim:

 

 

while($vetor=mysql_fecth_array($sql)) {

echo "<tr></tr>";

while($vetor1=mysql_fecth_array($sql)) {

echo"<td></td>";

}

}

 

logico colocando o conteudo dentro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A lógica é essa mesmo, se necessário pode fazer com com que o primeiro loop forneça uma variável com incremento para o segundo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Para apenas 4 elementos eu faria com echo, não usaria loops. Mas se você precisar expandir a tabela faria algo como isso:
$cols=2; // Pode ser modificado o numero de colunas
$linhas=2;
$id=1; // Id do primeiro dado a ser consultado.
 
while ($linhas>0)  // controla as linhas
{
$linhas++;
     echo "<tr></tr>";
     while ($cols>0)  // controla as colunas.
        {
           $cols++;
            echo"<td></td>";
            $id++; 
           // O id poderia ser usado numa query no caso de consulta ao banco de dados ou num array
        }
    }

 

Edit:

Por questão de eficiência é melhor fazer a consulta anter e usar um array no loop.

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz assim e não funcionou.

 

da um erro doido, parece que fica abrindo umas 200 vezes em 2 colunas:

 

 

 

<?php
$id = $_GET['id'];
$sql_conta = mysql_query("SELECT * FROM recapagem where categoria = '$id'");
$sql1 = mysql_query("select * from catrecapagem order by titulo ASC", $conexao);
$total = mysql_num_rows($sql_conta);
while ($vetor=mysql_fetch_array($sql_conta)) {
$cols=2; // Pode ser modificado o numero de colunas
$linhas=$total;
while ($linhas>0) // controla as linhas
{
$linhas++;
echo "<tr></tr>";
while ($cols>0) // controla as colunas.
{
$cols++;
echo"<td valign=\"top\"><img src=\"imgs/envios/$vetor[imagem]\" width=\"100\" /></td>
<td valign=\"top\"><?php echo $vetor[titulo]; ?></br><a href=\"pagina.php?i=ver_recapagem.php&id=$vetor[id]\"><img src=\"imgs/site/vermais.png\" border=\"0\" /></a></td>";
// O id poderia ser usado numa query no caso de consulta ao banco de dados ou num array
}
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

já pensou em usar DIV e não precisar ficar contando colunas e ajustar tudo via CSS?

seria bem mais simples.

 

Outra coisa - esse código do post #6 tá errado.

Vai dar um loop infinito legal ali hein

while( $cols > 0 ) {
  $cols++;
  ....

Desse jeito, $cols sempre vai ser maior que zero.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim tem uns errinhos, tenta assim que acredito que funcione:

$linhas=5;
$id=1; // Id do primeiro dado a ser consultado.
 
while ($linhas>0)  // controla as linhas
{
$linhas--;
     echo "<tr>";
$cols=2;
     while ($cols>0)  // controla as colunas.
        {
           $cols--;
            echo'<td></td>';
            $id++; 
           // O id poderia ser usado numa query no caso de consulta ao banco de dados ou num array
        }
echo "</tr>";
    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz assim, so que agora o erro é que ele repete na linha o registro.

 

ele mostra nas 2 colunas o mesmo registro, ate que o posicionamento das 2 colunas esta ok, o problema e que repete o registro ao inves de mostrar outro!!!.

 

 

 

<?php
$sql_conta = mysql_query("SELECT * FROM recapagem order by id DESC limit 0,4");
$sql1 = mysql_query("select * from catrecapagem order by titulo ASC", $conexao);
$total = mysql_num_rows($sql_conta);
$linhas=$total;
while ($linhas>0) // controla as linhas
{
$linhas--;
while ($vetor=mysql_fetch_array($sql_conta)) {
echo "<tr>";
$cols=2;
while ($cols>0) // controla as colunas.
{
$cols--;
echo"<td valign=\"top\"><img src=\"imgs/envios/$vetor[imagem]\" width=\"100\" id=\"foto\" />$vetor[titulo]</br><a href=\"pagina.php?i=ver_recapagem.php&id=$vetor[id]\"><img src=\"imgs/site/vermais.png\" border=\"0\" /></a></td>";
// O id poderia ser usado numa query no caso de consulta ao banco de dados ou num array
}
echo "</tr>";
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema esta no seu echo, por isso sugeri usar o incremento "id" no vetor no meu exemplo. Você pode usar $vetor[0] em vez de $vetor[titulo]. Adaptando a sua necessidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá não olhei todo seu código, na minha opinião usaria div.

 

mas no caso para fazer as colunas desse jeito resolve

 

<?php

$qtd_cols = 3;
$linhas   = 0;

$tabela  = '<table border="1">';
$tabela .= '  <tr>';
while($vetor=mysql_fetch_array($sql_conta)):

	if($i % $qtd_cols == 0):
		$tabela .='</tr><tr>'; 
	endif;
	$tabela .= "<td>cols {$i}</td>";
	
	$linhas++;
	
endwhile;
$tabela .= '  </tr>';
$tabela .= '</table>';

echo $tabela;

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

erison, esta questão é facil: Table para dados tabulares e div + css para o resto. O Diego não disse o contexto mas como pediu linhas e colunas presumi dados tabulares.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu sei mas pelo visto ele não entende muito de css, dei a solução que ele estava procurando,

 

mas como falei no post recomendo css.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tabela para dados tabulares :assobiando:

 

Se quiser usar tabela, não precisa de toda aquela gambiarra while dentro de while, blá blá blá. Basta dar um fetch adicional dentro do laço e pronto.

 

 

$sql = mysql_query...
 
while($dados = mysql_fetch_assoc($sql)){
echo '<tr>
<td>'.$dados['nome_da_coluna'].'</td>';
 
//Lê a próxima linha da consulta
$dados = mysql_fetch_assoc($sql);
 
if($dados['nome_da_coluna'] != ''){
//Valida, se não estiver em branco monta a tabela
echo '<td>'.$dados['nome_da_coluna'].'</td>';
}else{
//Se estiver em branco o fetch não tinha nada para ler, ou seja, fim da consulta, apenas fecha a tabela
echo '<td></td>';
}
 
echo '</tr>';
 
}

 

Observe que eu fiz uma validação ali, mas dependendo da estrutura da sua tabela, nem é preciso, porque se o resultado retornar em branco será montado a tabela vazia de qualquer jeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Respondendo sua pergunta,

 

Sem tabela

$rs = $pdo->query('SELECT * FROM materias');
$rows = $rs->fetchAll(PDO::FETCH_ASSOC);

echo '<div id="main-container">';
foreach($rows as $row) {
  printf('<div class="item"> %s </div>', $row['materia']);
}
echo '</div>';

Com tabela

$rs = $pdo->query('SELECT * FROM materias');
$rows = $rs->fetchAll(PDO::FETCH_ASSOC);

echo '<table width="100%" border="1">';

$headersCreated = false;

foreach($rows as $row) {
  if(!$headersCreated){
    echo '<tr>';
    foreach($row as $name => $value){
      echo '<th>', $name, '</th>';
    }
    echo '</tr>';
    $headersCreated = true;
  }
  echo '<tr>';
  foreach($row as $name => $value){
    echo '<th>', htmlentities($value ?: '--'), '</th>';
  }
  echo '</tr>';
}

echo '</table>';

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se quiser usar tabela, não precisa de toda aquela gambiarra while dentro de while, blá blá blá. Basta dar um fetch adicional dentro do laço e pronto.

Não se trata de gambiarra, já comentei anteriormente que para apenas quatro elementos sequer é preciso um loop while mas se a tabela crescer complica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não se trata de gambiarra, já comentei anteriormente que para apenas quatro elementos sequer é preciso um loop while mas se a tabela crescer complica.

 

Pode até não ser gambiarra para você, mas pra mim é... além do que, a minha solução serve para 1, 2, 3.... 903249023489 registros, tanto faz.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Pode até não ser gambiarra para você, mas pra mim é... além do que, a minha solução serve para 1, 2, 3.... 903249023489 registros, tanto faz.

 

Nem tanto, quero ver você colocar esses 249023489 registros numa tabela com 100 colunas dando echo em cada "<td></td>"

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.