Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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:
/applications/core/interface/imageproxy/imageproxy.php?img=http://mocidadeelshaday.files.wordpress.com/2009/05/com_while.jpg&key=2c4dd0fbb5636e36373df81ab25fd1a8a67747bc7435601adc315ff51069c7a5" alt="Imagem Postada" />
Mas quando eu faço manualmente a repetição aparece direitinho. Vejam:
/applications/core/interface/imageproxy/imageproxy.php?img=http://mocidadeelshaday.files.wordpress.com/2009/05/sem_while.jpg&key=1896c39fc370237da94034cb0ac25f9bb6d8fa097d048adcf8f146be5b86d554" alt="Imagem Postada" />
Sr. Moderador peço desculpas se postei no lugar errado.
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>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
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
Posta o código completo... Tenho uma teoria...
Carlos Eduardo
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">](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/');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
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: