Ir para conteúdo

Arquivado

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

Claudiobrother

do-while bagunçando exibição

Recommended Posts

Boa noite! Minha dúvida é a seguinte:

Tenho uma página que exibe os resultados de uma consulta no MySql (imagem e descrição).

Quando eu mando repetir os resultados com do-while minha página fica assim:

Imagem Postada

 

Mas quando eu faço manualmente a repetição aparece direitinho. Vejam:

Imagem Postada

 

Sr. Moderador peço desculpas se postei no lugar errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigão, existem N formas de se fazer isso com do-while, while, for, etc.... se você não postar seu código fica difícil adivinhar o erro.... :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código de repetição é esse:

<div id="global"> 
  <?php  do { ?>
	<div id="repeticao"> 
	  <a href="#">
		<img src="<?php echo $resultado['campo']; ?>" />
		<p><?php echo $resultado['campo']; ?></p>
	  </a>
	</div>
	<!-- /repeticao -->
  <?php  } while ($resultado = mysql_fetch_assoc($consulta)); ?>
</div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não gosto de usar o do-while e não sei se o problema é ele. Tenta com o while...

 

<div id="global"> 
  <?php  while ($resultado = mysql_fetch_assoc($consulta)) { ?>
	<div id="repeticao"> 
	  <a href="#">
		<img src="<?php echo $resultado['campo']; ?>" />
		<p><?php echo $resultado['campo']; ?></p>
	  </a>
	</div>
	<!-- /repeticao -->
  <?php  }  ?>
</div>

Deve funcionar.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Carlos, depois de perder muito tempo acabei descobrindo o problema (Que ocorre tanto com for, while, e do-while). Veja:

// Se eu ordenar dessa forma (que seria a ideal no meu caso), a exibição fica quebrada.
"SELECT * FROM minha_tabela ORDER BY coluna_id DESC";

// Já se eu ordenar dessa forma ou não ordenar (que não seria nada interessante), a exibição fica correta.
"SELECT * FROM minha_tabela ORDER BY coluna_id ASC";

Se alguém tiver idéia de como resolver isso (sugestões, suposições, dicas...), posta aí. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra eu poder listar o resultado ordenando pelo id de forma decrescente, tive que editar todas as descrições que iniciavam com números.

O code da página está como mostrado abaixo. Da forma que está a exibição é correta, mas se ordenar de outra forma a exibição fica quebrada.

<?php 
require_once('conexao_bd.php');
mysql_select_db($nome_bd, $conexao_bd);
$sql = "SELECT * FROM minha_tabela ORDER BY id DESC";
$consulta = mysql_query($sql, $conexao_bd) or die(mysql_error());
$resultado = mysql_fetch_assoc($consulta);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
  <div id="global"> 
	<?php  do { ?>
	  <?php 
		echo "<div id='div_foto'>\n"; 
		echo "<a href='pagina.php?open={$resultado['id']}'>\n";
		// O campo foto tem armazenado o caminho completo da imagem
		echo "<img src=".$resultado['foto']." />\n";
		echo "<p>";
		echo $resultado['descricao'];
		echo "</p>\n";
		echo "</a>\n";
		echo "</div>\n";
	  ?>
	<?php } while ($resultado = mysql_fetch_assoc($consulta)); ?>
  </div>
</body>
</html>
<? php mysql_free_result($consulta); ?>

Aqui a css:

#global {
	position:relative;
	width:600px;
	border:#333 1px solid;
	overflow:auto; 
		}
#div_foto {
	width:110px;
	display:inline;
	float:left;
	border:#ffffff 10px solid;
		}
#div_foto img {
	border: 5px solid #cccccc;
	border-width: 5px 5px 20px;
		}
#div_foto a {
	text-decoration:none;
	color:#333333;
		}
#div_foto a:hover {
	text-decoration:none;
	color:#ffffff;
		}
#div_foto a:hover img {
	border: 5px solid #ffffff;
	border-width: 5px 5px 20px;
		}

Aqui a tabela no MySQL acompanhada de um registro para exemplificar melhor:

CREATE TABLE IF NOT EXISTS `minha_tabela` (
 `id` smallint(10) unsigned NOT NULL AUTO_INCREMENT,
 `descricao` varchar(50) NOT NULL DEFAULT '',
 `foto` varchar(100) NOT NULL DEFAULT '',
 `pasta` varchar(100) NOT NULL DEFAULT '',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

INSERT INTO `minha_tabela` (`id`, `descricao`, `foto`, `pasta`) VALUES
(1, 'Aqui é mais um título do que uma descrição.', 'img/pasta_fixa/dir_criado_no_up/thumbs/8bb4ca3cced24869f3585ecd8677.thumb.jpg', 'img/pasta_fixa/dir_criado_no_up/');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minha teoria estava furada... Mas pensei em outra coisa...

Se você jogar a consulta direto no Phpmyadmin, todos os registros estão completos? Não tem nenhum vazio?

 

Porque a princípio teu código está correto...

 

Mas eu tiraria o do-while e usaria o whille. No do-while ele testa depois de executar... Ou seja, se não houver nenhum registro, ele ainda assim vai tentar fazer um laço.

http://br.php.net/manual/pt_BR/control-str...es.do.while.php

 

Só consegui pensar nisto.

 

Carlos Eduardo

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.