Ir para conteúdo

POWERED BY:

Arquivado

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

Henrique Zanini

[Resolvido] While repetir a cada três registros

Recommended Posts

Olá galera, tenho o seguinte código:

<div>
   <?php
       $sql = mysql_query("SELECT id_cao, nome_cao, dataNascimento_cao, foto_cao FROM tbl_cao");
       while($row = mysql_fetch_assoc($sql)){
           $id 	= $row['id_cao'];
           $nome 	= $row['nome_cao'];
           $foto 	= $row ['foto_cao'];
   ?>
   <div class="boxMastinos" style="background:url(assets/mastinos/<?php echo $foto; ?>)">
       <a href="mastinoDetalhes.php?id=<?php echo $id; ?>"><img src="assets/frame-mastinos.png" width="211" height="133" alt="<?php echo $nome; ?>" border="0" /></a>
       <span><a href="mastinoDetalhes.php"><?php echo $nome; ?></a></span>
   </div>
   <?php
       //Fechar div e abrir nova a cada três itens
       if($i%3==0) echo '
</div>
<div>';
           $i++;
       }
   ?>
</div>

 

Até está funcionando, o problema é, quando tenho um número exatos da interação (3,6,9,12,15...).

 

Acontece o seguinte:

 

<div>
repete os três itens </div><!--fecha div dentro do if -->

<div> <!-- abre div dentro do if -->
</div>

 

Ou seja, a última div fica fazia... Tem uma forma fácil de resolver este problema?

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me parece que você inverteu as tags div.

Primeiro você fechou e depois abriu

 

      if($i%3==0) echo '
</div>
<div>';
           $i++;
       }

 

Não seria:

 

      if($i%3==0) echo '
<div>
</div>';
           $i++;
       }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta. Ao fechar a div primeiro, eu fecho a div que abri fora do while.

 

<div>
<?php
  $sql = ...

 echo '</div'>;
?>

e ao abrir em baixo, é para fechar a div que está fora do while. entendeu? ;s Deve ter alguma outra forma de fazer isso, mas não consegui encontrar ao fazer uma busca.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é mais um problema lógico e de fácil resolução.

 

Passe o echo para o início da sua função e não para o fim.

<?php

$i = 1;
while($row = mysql_fetch_assoc($sql)){

   $id         = $row['id_cao'];
   $nome       = $row['nome_cao'];
   $foto       = $row ['foto_cao'];

       //Fechar div e abrir nova a cada três itens
   if($i%3==0) echo '</div><div>'; $i++; ?>
   ?>
   <div class="boxMastinos" style="background:url(assets/mastinos/<?php echo $foto; ?>)">
       <a href="mastinoDetalhes.php?id=<?php echo $id; ?>"><img src="assets/frame-mastinos.png" width="211" height="133" alt="<?php echo $nome; ?>" border="0" /></a>
       <span><a href="mastinoDetalhes.php"><?php echo $nome; ?></a></span>
   </div>
   <?php
}
?>

 

Assim, ele só colocará as div's quando houver um número do módulo + 1. Você só deverá configurar o número do $i para ficar certinho.

 

É mais ou menos o que foi feito aqui nesse post.

http://forum.imasters.com.br/topic/472061-while/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dessa forma não ficou uma div vazia, porém ficou dessa forma:

 

<div>
   <div class="boxMastinos"></div>
   <div class="boxMastinos"></div>
</div>

<div>
   <div class="boxMastinos"></div>
   <div class="boxMastinos"></div>
   <div class="boxMastinos"></div>
</div>

<div>
   <div class="boxMastinos"></div>
</div>

 

Uma div com apenas um registro, uma div com três e outra com dois registros... ;s

Compartilhar este post


Link para o post
Compartilhar em outros sites
Você só deverá configurar o número do $i para ficar certinho.

 

Como eu já havia falado, configure o valor de $i. Se ficou somente 2 no primeiro, diminua o valor dele em 1 (um). Se é 1(um), passe-o para 0(zero).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu já havia falado, configure o valor de $i. Se ficou somente 2 no primeiro, diminua o valor dele em 1 (um). Se é 1(um), passe-o para 0(zero).

 

Obrigado pela resposta.

 

Eu já havia configurado no inicio do código o $i = 1; Configurei para 0 (zero) e a primeira div agora fica vazia :s

Compartilhar este post


Link para o post
Compartilhar em outros sites

altere aqui:

if($i%3==0)

para:

if($i != 0 && $i%3 == 0)

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.