Jump to content


Photo

Resultado Em Colunas


  • Faça o login para participar
9 replies to this topic

#1 thescente

thescente

    Eron Venter

  • Usuários
  • 599 posts
  • Sexo:Não informado
  • Localidade:Novo Hamburgo/RS

Posted 25/11/2008, 15:42

Ae galera,

Imprimo o resultado de uma query sql em colunas (4), porem ele sempre gera uma coluna a mais e uma linha mais de divisoria,
gostaria de um help para remover eles...

<?php
	  
$cont = 1;
	  
for ($o=0; $o<$num_fotos; $o++)
{
$dad_fotos = $arr_fotos[$o]; 
		   
if ($cont == 1)
{
echo "<tr>\n";   
}
		
echo "<td width=\"165\" height=\"170\" align=\"center\" valign=\"middle\"><a href=\"edicao.php?secao=ensaio&id=".$_GET['id']."&pagina=".$o."\"><img src=\"/upload/ensaios/peq/".$dad_fotos['foto']."\" border=\"0\" /></a></td>";
echo "<td width=\"16\" height=\"170\" align=\"center\" valign=\"middle\"><img src=\"images/barra_vertical.gif\" /></td>\n";
		
if($cont == 4)
{
echo "</tr>\n";
echo "<tr>\n";
echo "<td width=\"165\" align=\"center\" valign=\"middle\"><img src=\"images/barra_horizontal.gif\" /></td>\n";
echo "<td width=\"16\" align=\"center\" valign=\"middle\"> </td>\n";
echo "<td width=\"165\" align=\"center\" valign=\"middle\"><img src=\"images/barra_horizontal.gif\" /></td>\n";
echo "<td width=\"16\" align=\"center\" valign=\"middle\"> </td>\n";
echo "<td width=\"165\" align=\"center\" valign=\"middle\"><img src=\"images/barra_horizontal.gif\" /></td>\n";
echo "<td width=\"10\" align=\"center\" valign=\"middle\"> </td>\n";
echo "<td width=\"165\" align=\"center\" valign=\"middle\"><img src=\"images/barra_horizontal.gif\" /></td>\n";
echo "</tr>\n";
				
$cont = 1;
} 
else 
{
$cont++;
}
}
?>

Pelo correto deveria ficar assim:
FOTO | FOTO | FOTO | FOTO
--------------------------
FOTO | FOTO | FOTO | FOTO
--------------------------
FOTO | FOTO | FOTO | FOTO
--------------------------
FOTO | FOTO | FOTO | FOTO
--------------------------
FOTO | FOTO | FOTO | FOTO

Porém esta ficando assim:
FOTO | FOTO | FOTO | FOTO |
--------------------------
FOTO | FOTO | FOTO | FOTO |
--------------------------
FOTO | FOTO | FOTO | FOTO |
--------------------------
FOTO | FOTO | FOTO | FOTO |
--------------------------
FOTO | FOTO | FOTO | FOTO |
--------------------------


#2 Renan L. Queiroz

Renan L. Queiroz

    Mestre

  • Usuários
  • 690 posts
  • Sexo:Masculino
  • Localidade:Brasilia - DF

Posted 25/11/2008, 15:57

hum perae

Então temos o seguinte:
....1........ 2....... 3......... 4
FOTO | FOTO | FOTO | FOTO |
........0......... 1........ 2......... 3 <<< $o

Seu form anda da seguinte maneira ... inicialisa o $o como 1:
for ($o = 1; $o < $num_fotos; $o++)
Caracas desculpe ai esse meu for ta errado mesmo.

Q quantidade de fotos não inicializa a contagem por zero provavelmente!!

Veja se ajuda. ;-)

Edição feita por: Renan L. Queiroz, 26/11/2008, 10:03.

Especialidade: Desenvolvimento e Banco de Dados.


Este post lhe ajudou? Agradeça: Posted Image


#3 thescente

thescente

    Eron Venter

  • Usuários
  • 599 posts
  • Sexo:Não informado
  • Localidade:Novo Hamburgo/RS

Posted 25/11/2008, 21:18

Na verdade a forma que vc citou nao mudou em nada, simplesmente deixou
de aparecer um registro...

Veja na imagem abaixo o que esta acontecendo:
Nesta vc verá que possui uma linha e a uma coluna de divisoria a mais
Posted Image

Veja abaixo como deveria ficar:
Este seria o modelo correto que deveria ficar na apresentação
Posted Image

Edição feita por: thescente, 25/11/2008, 22:01.


#4 hlegius

hlegius

    Turista

  • Usuários
  • 58 posts
  • Sexo:Masculino
  • Localidade:Guarulhos, SP
  • Interesses:Google Talk: hlegius em gmail ponto com

Posted 25/11/2008, 22:25

Essas linhas são criadas com o que ?
Se for uma imagem separada para elas, é só na quebra de linha evitar que ela seja adicionada.

Não é por nada não, mas seu código precisa de um refactoring hein ! Tá muito poluído !
Não sei o propósito do $count lá, acho que você pode usar o próprio contador do loop.

Para quebrar as linhas, use a matemática ! O módulo da divisão é a solução mais eficiente
<?php
for($i=1;$i<=$total;$i++) {
	if(($i % 4)  == 0) {
	  // nova linha
	}
	// linha normal
}
?>

Abraço!
hlegius.
http://www.hlegius.pro.br | http://www.programe.me
ArchLinux - A simple lightweight Linux distribution

#5 thescente

thescente

    Eron Venter

  • Usuários
  • 599 posts
  • Sexo:Não informado
  • Localidade:Novo Hamburgo/RS

Posted 26/11/2008, 07:23

Dei uma modificada no meu codigo para efetuar testes, e estamos chegando la...
Porem ainda sobra uma linha divisoria, mas somente qdo o total de registros é um numero par...

<table border="0">
<?php
$cont = 1;

for($i = 1; $i <= 15; $i++)
{
  if($cont == 1)
  {
	  print "<tr>";
  }
?>
	<td width="100" align="center" bgcolor="#FFFFCC">Coluna <?=$i;?></td>
	
	<?php
	if ($cont < 4)
	{
	?>
	
	<td width="20" align="center">|</td>
	
	<?
	}
	?>

<?php
  if($cont == 4)
  {
	 echo "</tr>";
	 $cont = 1;
	 
	 echo "<tr>";	
	 echo "<td><hr></td>";
	 echo "<td></td>";
	 echo "<td><hr></td>";
	 echo "<td></td>";
	 echo "<td><hr></td>";
	 echo "<td></td>";
	 echo "<td><hr></td>";
	 echo "<td></td>";
	 echo "</tr>";
	 
  }
  else
  {
	 $cont++;
  }
}
?>
</table>

Edição feita por: thescente, 26/11/2008, 07:52.


#6 hlegius

hlegius

    Turista

  • Usuários
  • 58 posts
  • Sexo:Masculino
  • Localidade:Guarulhos, SP
  • Interesses:Google Talk: hlegius em gmail ponto com

Posted 26/11/2008, 08:44

Veja se consegue adaptar a idéia para tuas necessidades:

<?php
for($i=0;$i<15;$i++) {
	 if(($i % 4) == 0) {
		  if($i != 0)
		   echo '--- <br />'; // ultimo elemento + quebra de linha
	 }else{
	  echo ' --- |  '; // elementos normais...
	 }
}
?>

A idéia é a mesma, só que você vai usar em tabelas...


Abraço!

Edição feita por: hlegius, 26/11/2008, 08:45.

hlegius.
http://www.hlegius.pro.br | http://www.programe.me
ArchLinux - A simple lightweight Linux distribution

#7 Renan L. Queiroz

Renan L. Queiroz

    Mestre

  • Usuários
  • 690 posts
  • Sexo:Masculino
  • Localidade:Brasilia - DF

Posted 26/11/2008, 10:47

Nó, ainda to de cara com o vacilo do for ... rs!! :shit:

<?php
	if($cont == 4 && $i < 15){

		echo "</tr>";
		$cont = 1;

		continua ...

Como não tenho o ambiente aqui para PHP fiz um teste com Js
<script>		document.write('<table border="0">')	cont = 1;	for(i = 1; i <= 16; i++){		if(cont == 1){			document.write('<tr>');		}		document.write('<td width="100" align="center" bgcolor="#FFFFCC">')			document.write('Coluna '+ i)		document.write('</td>')		if(cont < 4){			document.write('<td width="20" align="center">|</td>')		}		if(cont == 4 && i < 16){			cont = 1;			document.write('</tr>')			document.write('<tr>')				document.write('<td><hr></td>')				document.write('<td></td>')				document.write('<td><hr></td>')				document.write('<td></td>')				document.write('<td><hr></td>')				document.write('<td></td>')				document.write('<td><hr></td>')				document.write('<td></td>')			document.write('</tr>')		}		else{			cont++;		}	}	document.write('</table>')</script>

Edição feita por: Renan L. Queiroz, 26/11/2008, 10:50.

Especialidade: Desenvolvimento e Banco de Dados.


Este post lhe ajudou? Agradeça: Posted Image


#8 thescente

thescente

    Eron Venter

  • Usuários
  • 599 posts
  • Sexo:Não informado
  • Localidade:Novo Hamburgo/RS

Posted 26/11/2008, 16:39

Renan L. Queiroz,

Agradeço sua ajuda, mas a medida que vou testando descubro alguns problemas hehehe
No seu exemplo em js, funcionou legal, porém agora to me escabelando pra resolver outra
encrenca...

Por exemplo, se o total de colunas geradas for menor que 4, ele continua mantendo uma
barra divisória a mais...


Ele fica assim dai:
FOTO | FOTO | FOTO |

Enquanto deveria ficar assim:
FOTO | FOTO | FOTO

Ou seja, a barra de divisoria só deve ser impressa quando o total de colunas for igual ao total-1
Utilizei isso no if mas dai nao rola...

A barra divisoria corresponde a esta linha:
if(cont < 4){
document.write('<td width="20" align="center">|</td>');
}


#9 Renan L. Queiroz

Renan L. Queiroz

    Mestre

  • Usuários
  • 690 posts
  • Sexo:Masculino
  • Localidade:Brasilia - DF

Posted 26/11/2008, 16:46

A barra divisoria corresponde a esta linha:

if(cont < 4){
document.write('<td width="20" align="center">|</td>');
}


Assim resolveu para 3 fotos ... Js:
if(cont < 4 && i < 3){
document.write('<td width="20" align="center">|</td>');
Onde 3 é a quantidade de fotos ...

Edição feita por: Renan L. Queiroz, 26/11/2008, 16:50.

Especialidade: Desenvolvimento e Banco de Dados.


Este post lhe ajudou? Agradeça: Posted Image


#10 thescente

thescente

    Eron Venter

  • Usuários
  • 599 posts
  • Sexo:Não informado
  • Localidade:Novo Hamburgo/RS

Posted 26/11/2008, 16:51

Cara perfeito, brigadão!!
Agradeço demais sua ajuda!!!




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq