Ir para conteúdo

POWERED BY:

Arquivado

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

Sttranho

Escrevendo tabela dinaminca na vertical com varias colunas e linhas

Recommended Posts

Como fazer o PHP escrever a tabela da seguinte forma:

 

 

 

Colunas: 5

Linhas: Variável

Conteúdo: Variável (números que coloquei abaixo 1 a 25 apenas como exemplo)

 

Exemplos de saída abaixo:

 

Exemplo: 01

 

1 6 11 16 21

2 7 12 17 22

3 8 13 18 23

4 9 14 19 24

5 10 15 20 25

 

 

Exemplo: 02

 

1 6 11 16 21

2 7 12 17 22

3 8 13 18

4 9 14 19

5 10 15 20

 

 

Exemplo: 03

 

1 3 5 7 9

2 4 6 8

 

Exemplo: 04

 

1 2 3 4 5

 

 

Exemplo: 05

 

1 2 3

 

Escrevi com 25, 22, 5 e 3, justamente para mostrar que o conteúdo que virá do banco, é variável, poderá vim 2, 10, 13, 45, efim, variável, como podem notar nos exemplos.

 

As colunas, obrigatóriamente terá que ser 5 preenchidas ou em branco, caso o conteúdo seja menor que 5, terá 1 ou mais celulas escritas em branco, sendo que a quantidade de linha é que irá trabalhar de acordo com o conteúdo que puxará do banco; pois tenho uma largura a ser seguida no layout, mas a altura é livre.

 

E ai segue os exemplos de como quero que seja escrito os dados, CRESCENTE, de cima para baixo, as colunas com preenchimento semelhantes.

 

entao para ter certeza que me entenderam, fiz o exemplo abaixo com saída Errada para saberem como não deve ficar.

Exemplo de saída errada.

1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

 

Valeu ai galera, aguardo ajuda de vocês.

 

;P \o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um exemplo simples:

$total = 27;
$colunas = 5;
$linhas = ceil( $total / $colunas );
$cont = 1;

echo "<table width=\"40%\">";

for ( $i = 1; $i <= $linhas; $i++ )
{
	echo "<tr>";
	for ( $j = 0; $j < $colunas; $j++ )
	{
		$num = $cont + $linhas*$j;
		echo '<td>' . ( $num <= $total ? $num : ' ' ) . '</td>';
	}
	echo "</tr>";
	$cont++;
}

echo "</table>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um exemplo simples:

$total = 27;
$colunas = 5;
$linhas = ceil( $total / $colunas );
$cont = 1;

echo "<table width=\"40%\">";

for ( $i = 1; $i <= $linhas; $i++ )
{
	echo "<tr>";
	for ( $j = 0; $j < $colunas; $j++ )
	{
		$num = $cont + $linhas*$j;
		echo '<td>' . ( $num <= $total ? $num : ' ' ) . '</td>';
	}
	echo "</tr>";
	$cont++;
}

echo "</table>";

Valeu pela ajuda, mas acho que vou ter que criar um array para isso, pois como você fez ai, tá ótimo, porém como o meu conteudo vem do banco, ele escreve na sequecia horizontal

 

Meu código.

 

$colunas = 5;
$linhas = ceil( $total / $colunas );
$cont = 1;
echo '<table border="0" align="left" cellpadding="0" width="300"cellspacing="0">';
//echo "<table width=\"40%\">";

for ( $i = 1; $i <= $linhas; $i++ )
{
	echo "<tr>";
	for ( $j = 0; $j < $colunas; $j++ )
	{
	$item_ref = mysql_fetch_array($sql_item_ref);
		$num = $cont + $linhas*$j;
		echo '<td>' . ( $num <= $total ? '<span class="view_txt_itens">'.$item_ref['item_ref'].'</span>' : ' ' ) . '</td>';
	   // echo '<td><span class="view_txt_itens">'.$item_ref['item_ref'].'</span></td>';
	}
	echo "</tr>";
	$cont++;
}
echo "</table>";

veja oque fiz e deu errado, alterei a seguinte linha:

echo '<td>' . ( $num <= $total ? $num : ' ' ) . '</td>';

 

para

 

echo '<td>' . ( $num <= $total ? '<span class="view_txt_itens">'.$item_ref['item_ref'].'</span>' : ' ' ) . '</td>';

 

Onde

$item_ref['item_ref'] - é o tal dado que vem do banco, ou seja quando ele escreve acaba ficando com o formato de sequencia na horizontal.

 

pensei em tentar colocar esse meu conteudo do bando dentro de uma array que eu possa escrever com base do numero ($num) que é usado no condigo acima, dessa forma daria certo.

 

ex:

$array_item = conteudo de banco que nao sei como fazer para colocar, pois seria um array dentro do outro, no meu entendiimento.

 

e a linha a ser escrita, ficaria da seguinte forma.

echo '<td>' . ( $num <= $total ? '<span class="view_txt_itens">'.$array_item[$num].'</span>' : ' ' ) . '</td>';

 

 

isso é oque imagino que dará certo, me corrija se eu estiver errado, e como fazer isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma possibilidade é usar mysql_data_seek dentro do loop, mas acho que isso vai sobrecarregar o programa.

é bom usar o array, como você disse. Ficará mais rápido com array

pois é...

Você sabe como é que eu coloco esses dados no array, para eu obter o resultado como quero ?

 

Valeu pela ajuda e atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

$arr = array();
$i = 0;
while ( $fetch = mysql_fetch_assoc($conulta) )
{
	$arr[$i] = $fetch;
	$i++;
}

$total = 27;
$colunas = 5;
$linhas = ceil( $total / $colunas );
$cont = 1;

echo "<table width=\"40%\">";

for ( $i = 1; $i <= $linhas; $i++ )
{
	echo "<tr>";
	for ( $j = 0; $j < $colunas; $j++ )
	{
		$num = $cont + $linhas*$j;
		echo '<td>' . ( $num <= $total ? $num : ' ' ) . '</td>';
	}
	echo "</tr>";
	$cont++;
}

echo "</table>";

desculpe minha ignorancia, mas to me quebrando aqui e nao to conseguindo juntar e fazer funcionar.

pode me ajudar a integrar esses 2 códigos?

 

Oque tem de errado com esse meu ?

<?
$colunas = 5;
$linhas = ceil( $total / $colunas );
$cont = 1;
// adiciona conteudo a Array
$sql_item_ref = mysql_query("Select * from item ORDER BY item_ref ASC ")or die(mysql_error("Erro com o Banco de Dados"));
$total = mysql_num_rows($sql_item_ref);
		$arr = array();
		$i = 0;
			while ( $item_ref = mysql_fetch_assoc($sql_item_ref) )
			{
				$arr[$i] = $item_ref['item_ref'];
				$i++;
			}
echo "<table width=\"40%\">";
$ni = 0;
for ( $i = 1; $i <= $linhas; $i++ )
{
	echo "<tr>";
	for ( $j = 0; $j < $colunas; $j++ )
	{
	echo '<td>' . ( $num <= $total ? '<span class="view_txt_itens">'.$arr[$ni].'</span>' : ' ' ) . '</td>';
	  //  $num = $cont + $linhas*$j;
//		echo '<td>' . ( $num <= $total ? $num : ' ' ) . '</td>';
$ni++;
	}
	echo "</tr>";
	$cont++;
}
echo "</table>";
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que usar $num no índice do array, não $ni

QUASE LÁ...

 

Vide o código, e logo a baixo uma pequena questão...

 

<?
$sql_item_ref = mysql_query("Select * from item where item_cpnt = '1' and item_mc = '8' and item_cat = '2' ORDER BY item_ref ASC")or die(mysql_error("Erro com o Banco de Dados"));
$total = mysql_num_rows($sql_item_ref);
$colunas = 5;
$linhas = ceil( $total / $colunas );
$cont = 0;
	$arr = array();
		$i = 0;
			while ( $item_ref = mysql_fetch_assoc($sql_item_ref) )
			{
				$arr[$i] = $item_ref['item_ref'];
				$i++;
			}
echo '<table width="100%" border=>';
for ( $i = 1; $i <= $linhas; $i++ )
{
	echo "<tr>";
	for ( $j = 0; $j < $colunas; $j++ )
	{
		$num = $cont + $linhas*$j;
		echo '<td width="20%">' . ( $num <= $total ? '<span class="view_txt_itens">'.$arr[$num].'</span>' : ' ' ) . '</td>';
		$num++;
	}
	echo "</tr>";
	$cont++;
}
echo "</table>";
?>

olha só, ali onde tinha no condigo anterior

$cont = 1;

tive que alterar para

$cont = 0;

Pois com "1", estava ocultutanto o primeiro registro. e deu tudo certo.

 

agora tem um pequeno detalhe que não estou conseguindo tratar.

Tudo está funcionando perfeitamente, quando o número de registros são entre 1 e 5 ou maior que 10 registros,

porém com determinadas quantidades de registros, acabam ficando de uma forma que o cliente não quer.

por exemplo quando tenho 6 ou 12 registros, eu não escreve como deveria, com 5 colunas.

o cliente quer que sempre escreva 5 colunas, segue abaixo exemplos.

 

Exemplo Certo.

1 3 4 5 6

2

 

Ou

 

1 4 7 9 11

2 5 8 10 12

3 6

 

Exemplo Como tá ficando.

1 3 5

2 4 6

 

 

ou

 

1 4 7 10

2 5 8 11

3 6 9 12

 

espero que tenha como fazer isso, e que vocês possam me ajudar.

 

Forte Abraço a todos.

\o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não poderia simplesmente ser:

1 2 3 4 5

6 7 8 9 10

11 12

?

1 2 3 4 5

6

?

Ai bastaria jogar cada registro num LI, e flutuar ele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não poderia simplesmente ser:

1 2 3 4 5

6 7 8 9 10

11 12

?

1 2 3 4 5

6

?

Ai bastaria jogar cada registro num LI, e flutuar ele.

pior que não, pois o cliente quer que os códigos das peças sejam de ordem crescente na vertical, para facilitar a busca visual do usuário no catalogo, impresso que será gerado através desse sisteminha php.

 

para você ter uma ideia dos dados que irão compor nessa matriz olha ai abaixo, esse bloco ai fechou certo as 5 colunas

 

3C24-11000-AA F7LU-11001-BA F7PU-11000-LA F7SU-11000-AA F87Z-11002-AA

3C2Z-11002-AA F7LZ-11002-AA F7PZ-11002-AA F7SU-11000-AB F87Z-11002-CA

5F9T-11000-AA F7LZ-11002-BA F7PZ-11002-BA F7SZ-11002-AA F89U-11000-CA

5F9Z-11002-AA F7PU-11000-AA F7PZ-11002-CA F7UU-11000-AA SA-842

6F9Z-11002-AA F7PU-11000-BA F7PZ-11002-DA F7UZ-11002-AA SA-848

F6VU-11000-AA F7PU-11000-CA F7PZ-11002-EA F81U-11000-AA SA-873

F6VZ-11002-AA F7PU-11000-DA F7PZ-11002-FA F81U-11000-AC SA-875

F75U-11000-AA F7PU-11000-EA F7PZ-11002-GA F81Z- 11002-AA SA822

F75U-11000-AB F7PU-11000-FA F7PZ-11002-HA F87U-11000-A1 XL1U-11000-AA

F75U-11000-AC F7PU-11000-GA F7PZ-11002-JA F87U-11000-A1 XL1U-11000-AB

F75Z-11002-AA F7PU-11000-HA F7PZ-11002-KA F87U-11000-AA XL1Z-11002-AA

F7LU-11000-AA F7PU-11000-JA F7PZ-11002-LA F87U-11000-CA

F7LU-11000-BA F7PU-11000-KA F7SU-11000-A1 F87U-11000-CB

 

sendo assim, o usuáriio final vai passando olhando os códigos e terá facilidade de comparar os códigos estando um a baixo do outro, em ordem crescente.

 

pena que aqui não dá para dar mais de 1 espaço juntos, pois dificulta bastante para visualizar os códigos ai acima.

 

Valeu

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.