Ir para conteúdo

POWERED BY:

Arquivado

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

lote14

While não exibe todos

Recommended Posts

Oi galera, legal?

 

Bom, é o seguinte:

 

Tenho este "WHILE" que lista dados de uma determinada categoria, o que seleciona a categoria é o códido que vem através de um link de outra página.

 

<a href="piadas.php?id_categoria=<?php echo $rs['id_categorias'];?>"><?php echo $rs['nome_categorias'];?> (<?php echo $rs['conta'];?>)</a>

 

e o WHILE que está em outra página:

 

<div id="content_conteudo_piadas">
 <?php
 $id_categoria=$_GET['id_categoria'];
 echo  $id_categoria;
 $sql = mysql_query("SELECT * FROM piadas,categorias,usuarios WHERE piadas.id_categorias=categorias.id_categorias AND piadas.id_usuarios=usuarios.id_usuarios AND piadas.id_categorias=".$id_categoria." ;") or die(mysql_error());
 $rs = mysql_fetch_array($sql);?>
 <h3>Piadas de <?php echo $rs['nome_categorias'];?></h3> 
 <?php 
 while ($rs = mysql_fetch_array($sql))
 {
 ?>
  <ul>
  <li class="foto">foto</li>
  <li class="piada"><a href="detalhe_piadas.php?id_piada=<?php echo $rs['id_piadas'];?>"><?php echo $rs['titulo_piadas'];?></a><br />
  <span class="subtitulo">Piada enviada por <?php echo $rs['apelido_usuarios'];?> em 12/12/2011, recebeu 93 votos</span>
     </li>
  </ul>
  <?php 
  }
  ?>
  </div><!--content piadas-->		
   </div><!--content conteudo piadas-->

 

Qual é o problema deste WHILE, ele não exibe todos selecionados pelo "$id_categoria", não dá erro apenas não exibe todos.

 

Ex: o id_categoria=7 tem 5 registros mas apenas mostra 2 registros.

o id_categoria=8 tem 1 registros mas não mostra nenhum registro.

 

Será que estou comentendo algum erro de sintaxe que não estou percebendo, me ajudem!

 

aguardo...

 

P.S: Esqueci de dizer. Quando eu retiro o "while ($rs = mysql_fetch_array($sql))" ele exibe normalmente, mas apenas o primeiro registro de cada categoria, sem a repetição do WHILE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza! retirei o primeiro "$rs = mysql_fetch_array($sql);" mas como exibo registro do banco fora deste "WHILE".

 

Ex: <h3>Piadas de <?php echo $rs['nome_categorias'];?></h3>

Compartilhar este post


Link para o post
Compartilhar em outros sites

hehe tem de rever isso aí.

 

Cada vez q você chama o "mysql_fetch_array" um registro da sua lista de resultado vai pro brejo, ou seja, ele retorna um vetor com os dados e move o ponteiro na lista de resultados.

Quando você usa

$rs = mysql_fetch_array($sql);?>
<h3>Piadas de <?php echo $rs['nome_categorias'];?></h3>

você já pegou um registro, então invés de mostrar os outros dados/campos do registro, você inicia um loop requisitando novo vetor de resultado..

while ($rs = mysql_fetch_array($sql))

Neste ponto você já está perdendo pelo menos um registro..

 

Coloque tudo dentro do mesmo loop, ou então faça uma consulta anterior para retornar somente os dados da categoria, uma vez que é a mesma para todos os registros do loop e não precisa replicar os dados através do join.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu colocar o "<h3>Piadas de <?php echo $rs['nome_categorias'];?></h3>" dentro do loop o nome da categoria irá se repetir em todos os registros.

 

Realmente terei que fazer outro SELECT? Não dá para aproveitar este mesmo select, fora do while.

 

Depois disto:

 

$rs = mysql_fetch_array($sql);?>
<h3>Piadas de <?php echo $rs['nome_categorias'];?></h3>

 

O cursor do recordset vai para o último registro, certo? Tem como eu após este código e antes do WHILE posicionar o cursor novamente para o início do recordset e ai sim fazer o WHILE rodar em todos os registros do banco novamente?

 

No Asp basta apenas fazer isto:

 

set rs = Conn.Execute("Select bla bla bla")

response.write rs.Fields("nome_categoria")'pego o nome da categoria

	while not rs.EOF
	%>
	E aqui colocar os registros que quero que repita	
        <%

	rs.MoveNext
    wend
	rs.Close
    set rs = Nothing		

 

No PHP não consigo fazer algo parecido?

Compartilhar este post


Link para o post
Compartilhar em outros sites

está acontecendo algo parecido e não consigo resolver alguém pode me ajudar?

 

veja isso.

if($relatorio==true){


  for($contador = 0; $contador < $totalRows_relatorio; $contador++){
       $linha = mysql_fetch_array($relatorio);


         $myArr=array($linha['nome'],$linha['hora_logon'],$linha['hora_logout'],$linha['pausa_entrada'],
$linha['pausa_saida'],$linha['tipo_pausa'], $linha['duracao_pausa'], $linha['desc']);
$excel->writeLine($myArr);
está perdendo um registro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom pessoal consegui resolver esse problema usado o do:

 if($relatorio==true){


 do {


         $myArr=array($row_relatorio['nome'],$row_relatorio['hora_logon'],$row_relatorio['hora_logout'],$row_relatorio['pausa_entrada'],
$row_relatorio['pausa_saida'],$row_relatorio['tipo_pausa'], $row_relatorio['duracao_pausa'], $row_relatorio['desc']);
$excel->writeLine($myArr);
 }while ($row_relatorio = mysql_fetch_assoc($relatorio));

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.