Ir para conteúdo

POWERED BY:

Arquivado

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

Carcleo

[Resolvido] Loop infinito

Recommended Posts

Pessoal,

Estou rodando o código abaixo e esta dando loop infinito no php .

Mas, fazendo a consulta no mysql front não da loop

O que será que esta acontecendo?

<?php
if ($acao == "ver")
{
$consulta_fornecedor="
				     SELECT razaosocial, nome
				     FROM fornecedores
				     WHERE id=$id
	                ";
$consulta_data="
                      SELECT DISTINCT(pc.data)
				   FROM pedidos_cliente pc    
                      INNER JOIN pedidos pe ON pe.ID_PEDIDO = pc.id_pedido_cliente                       
                      INNER JOIN produtos pd ON pd.id = pe.ID_PRODUTO                       
                      INNER JOIN fornecedores fd ON fd.id = pd.fornecedor                       
                      WHERE fd.id = $id                       
                      ORDER BY pc.data desc
	          ";
$consulta_cliente="
                      SELECT DISTINCT(pc.id_cliente),cl.razaosocial, cl.nome 
				   FROM pedidos_cliente pc    
                      INNER JOIN pedidos pe ON pe.ID_PEDIDO = pc.id_pedido_cliente                       
                      INNER JOIN produtos pd ON pd.id = pe.ID_PRODUTO                       
                      INNER JOIN fornecedores fd ON fd.id = pd.fornecedor
                      INNER JOIN clientes cl ON cl.id = pc.id_cliente                                              
                      WHERE fd.id = $id and pc.data = '$data'                     
                      ORDER BY cl.nome, cl.razaosocial
	           ";
$consulta_itens="
			SELECT
			  pd.nome,
			  pe.quantidade,
			  pe.preco_uni,
			  pe.semi_total
			FROM pedidos pe  
		    INNER JOIN produtos pd ON pd.id=pe.ID_PRODUTO     
			INNER JOIN fornecedores fd ON fd.id=pd.fornecedor          
			INNER JOIN pedidos_cliente pc ON pc.id_pedido_cliente=pe.ID_PEDIDO          
			INNER JOIN clientes cl ON cl.id=pc.id_cliente     
               WHERE fd.id = $id and pc.data = '$data' and pc.id_cliente=$cliente
			ORDER BY pe.ID_PRODUTO 	             
          ";
    list($FORNECEDOR_RAZAOSOCIAL,$FORNECEDOR_NOME) = mysql_fetch_row($MySQL->query($consulta_fornecedor));

	echo "<table align=\"center\" width=\"95%\">
		   <tr><td colspan=\"4\" align=\"center\">
							  RELATÓRIO ANALÍTICO DE PEDIDOS FORNECEDOR $FORNECEDOR_RAZAOSOCIAL$FORNECEDOR_NOME 
			   </td></tr>
		 ";

	while(list($data) = mysql_fetch_row($MySQL->query($consulta_data)))
	{
		echo "<tr><td colspan=\"4\" align=\"center\">$data</td></tr>";

		while(list($cliente,$CLIENTE_RAZAOSOCIAL,$CLIENTE_NOME) = mysql_fetch_row($MySQL->query($consulta_cliente)))
		{
			 echo "<tr><td colspan=\"4\" align=\"center\">$CLIENTE_RAZAOSOCIAL$CLIENTE_NOME</td></tr>";
                $SEMI_TOTAL=0.00;
  			 while(list(
						  $PRODUTO_NOME,
						  $QUANTIDADE,
						  $PRECO_UNI,
						  $SEMI_TOTAL
			            ) = mysql_fetch_row($MySQL->query($consulta_itens)))
			{
				$SUB_TOTAL.=$SEMI_TOTAL;
				echo "<tr>
				          <td align=\"center\">$PRODUTO_NOME</td>
				          <td align=\"center\">$PRODUTO_NOME</td>
				          <td align=\"center\">$PRODUTO_NOME</td>
				          <td align=\"center\">$PRODUTO_NOME</td>
					  </tr>
				      <tr><td align=\"right\">$SUB_TOTAL</td></tr>
		           ";
			}
		}
	}
    echo "</table>";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em vez de usar

 

<?php
while($var = $valor) {}
?>

 

Utilize

 

<?php
while(FALSE !== ($var = $valor)) {}
?>

 

Talvez resolva...

Compartilhar este post


Link para o post
Compartilhar em outros sites

a trava esta acontecendo nessa linha aqui

while(list($data) = mysql_fetch_row($MySQL->query($consulta_data)))
	{

Antes dela não da o problema

 

Se colocar, dentro do wile, e depois do echo $data, um exit. ele imprime uma data e para.

 

O MYSQL retorna duas datas.

 

E, esse

<?php
while($var = $valor) 
{}
?>

Eu não usei.

 

Entendi.

 

Fiz assim:

	while(FALSE !== (list($data) = mysql_fetch_row($MySQL->query($consulta_data))))

Mas o loop infinito continua.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Observei o seguinte:

 

Na minha query, tem uma chamada ao campo data do mysql.

 

Quando ele retorna, esta gerndo loop infinito.

Tirei ele de sena eo loop parou

 

como posso resolver isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o seguinte:

 

<?php
$result_set = $MySQL->query($consulta_data);
while ( FALSE  !== ( list ( $data ) = mysql_fetch_row ($result_set ))) {

}

 

 

Acho que o erro se dava pelo fato de a cada iteração ele re-executava a consulta no banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muda isso

while(FALSE !== (list($data) = mysql_fetch_row($MySQL->query($consulta_data))))

 

por isso

 

$result_set = $MySQL->query($consulta_data);
while ( FALSE  !== ( list ( $data ) = mysql_fetch_row ($result_set )))

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz assim:

$result_set = $MySQL->query($consulta_data);
while ( FALSE  !== ( list ( $data ) = mysql_fetch_row ($result_set ))) 
{
		echo "<tr><td colspan=\"4\" align=\"center\">$data</td></tr>";
		$TOTAL_GERAL.=$SUB_TOTAL;
		while ( FALSE  !== ( list($cliente,$CLIENTE_RAZAOSOCIAL,$CLIENTE_NOME) = mysql_fetch_row($MySQL->query($consulta_cliente)))) 			{
			 echo "<tr><td colspan=\"4\" align=\"center\">$CLIENTE_RAZAOSOCIAL$CLIENTE_NOME</td></tr>";
                $SEMI_TOTAL=0.00;
  			 while(list(
						  $PRODUTO_NOME,
						  $QUANTIDADE,
						  $PRECO_UNI,
						  $SEMI_TOTAL
			            ) = mysql_fetch_row($MySQL->query($consulta_itens)))
			{
				$SUB_TOTAL.=$SEMI_TOTAL;
				echo "<tr>
				          <td align=\"center\">$PRODUTO_NOME</td>
				          <td align=\"center\">$QUANTIDADE</td>
				          <td align=\"center\">$PRECO_UNI</td>
				          <td align=\"center\">$SEMI_TOTAL</td>
					  </tr>
				      <tr><td align=\"right\">$SUB_TOTAL</td></tr>
		           ";
			}
		}
	 echo "<tr><td colspan=\"4\" align=\"center\">$TOTAL_GERAL</td></tr>";
}

Mas só mnosra as duas datas e o resto do codigo não mostra

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro edite sua postagem e indente direitinho o seu código, ai depois vou ler pra ver o que pode estar errado.

 

Desculpa se fui rude, mas o pouco do trabalho a mais agora, trará inúmeros frutos para você como profissional futuramente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu código esta identado.

 

Só não esta espaçado de um-para-um mas esta identado sim

 

Passou alguns caracters só da area de vizão.

 

mas da pra ver puxando um pouquinho barra de rolagem.

Aliás, eu trabalho assim exatgamente para facilitar encontar erros

 

Rapaz.

 

Sabe o quew eu descobri?

 

Sem lógica nenhuma.

 

Só nesse arquivo que esta dando isso.

 

Se eu fizer um list. Da certo.

 

Mas se eu colocar o while. Ai da loop infinito.

 

Estperimentei dar um mysql_num_rows().

e retornou certinho o numero de registros.

 

Como é que sai dessa agoraw

O que sera que esta de errado om esse arquivo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja a diferença.

 

$result_set = $MySQL->query($consulta_data);
while(FALSE !== (list($data) = mysql_fetch_row($result_set))) {
 echo "<tr><td colspan=\"4\" align=\"center\">$data</td></tr>";
 $TOTAL_GERAL.=$SUB_TOTAL;
 while ( FALSE  !== ( list($cliente,$CLIENTE_RAZAOSOCIAL,$CLIENTE_NOME) = mysql_fetch_row($MySQL->query($consulta_cliente)))) {
   echo "<tr><td colspan=\"4\" align=\"center\">$CLIENTE_RAZAOSOCIAL$CLIENTE_NOME</td></tr>";
   $SEMI_TOTAL=0.00;
   while(FALSE !== (list($PRODUTO_NOME, $QUANTIDADE, $PRECO_UNI, $SEMI_TOTAL) = mysql_fetch_row($MySQL->query($consulta_itens)))) {
     $SUB_TOTAL.=$SEMI_TOTAL;
     echo "<tr>
       <td align=\"center\">$PRODUTO_NOME</td>
       <td align=\"center\">$QUANTIDADE</td>
       <td align=\"center\">$PRECO_UNI</td>
       <td align=\"center\">$SEMI_TOTAL</td>
     </tr>
     <tr>
       <td align=\"right\">$SUB_TOTAL</td>
     </tr>";
   }
 }
 echo "<tr><td colspan=\"4\" align=\"center\">$TOTAL_GERAL</td></tr>";
}

 

Mas de qualquer forma. Com base nas alterações que eu havia citado acima, repita o processo nas outras iterações de consulta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque que se eu colocar a query direto dentro do while da esse erro?~

while(FALSE !== (list($data) = mysql_fetch_row($MySQL->query($consulta_data)))) {

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT razaosocial, nome FROM fornecedores WHERE id=$id LIMIT 0,30;

 

Onde 30 é o número de resultados que quer que apareça.

Não sei se é o melhor caminho, mas é assim que eu faço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só:

 

consegui assim:

Porem, quando chega na ultima consulta, da erro de resourse:

RELATÓRIO ANALÍTICO DE PEDIDOS FORNECEDOR Malta S/A  
2011-07-14 
Carlos Rocha 
Erro na consulta da query!
Resource id #16  
2011-07-06 
Carlos Rocha 

Segue o código

<?php
if ($acao == "ver")
{
$consulta_fornecedor="
				   SELECT razaosocial, nome
				   FROM fornecedores
				   WHERE id=$id
	                ";

$consulta_data="
                      SELECT DISTINCT(pc.data)
				   FROM pedidos_cliente pc    
                      INNER JOIN pedidos pe ON pe.ID_PEDIDO = pc.id_pedido_cliente                       
                      INNER JOIN produtos pd ON pd.id = pe.ID_PRODUTO                       
                      INNER JOIN fornecedores fd ON fd.id = pd.fornecedor                       
                      WHERE fd.id = $id                       
                      ORDER BY pc.data desc
	          ";

    list($FORNECEDOR_RAZAOSOCIAL,$FORNECEDOR_NOME) = mysql_fetch_row($MySQL->query($consulta_fornecedor));

	echo "<table align=\"center\" width=\"95%\" border=\"1\">
		   <tr><td colspan=\"4\" align=\"center\">
							  RELATÓRIO ANALÍTICO DE PEDIDOS FORNECEDOR $FORNECEDOR_RAZAOSOCIAL$FORNECEDOR_NOME 
			   </td></tr>
		 ";
       $consulta_data_query = $MySQL->query($consulta_data);
	while(list($data) = mysql_fetch_row($consulta_data_query))
	{
		echo "<tr><td colspan=\"4\" align=\"center\">$data</td></tr>";
		$TOTAL_GERAL.=$SUB_TOTAL;

        	$consulta_cliente="
                      SELECT DISTINCT(pc.id_cliente),cl.razaosocial, cl.nome 
				   FROM pedidos_cliente pc    
                      INNER JOIN pedidos pe ON pe.ID_PEDIDO = pc.id_pedido_cliente                       
                      INNER JOIN produtos pd ON pd.id = pe.ID_PRODUTO                       
                      INNER JOIN fornecedores fd ON fd.id = pd.fornecedor
                      INNER JOIN clientes cl ON cl.id = pc.id_cliente                                              
                      WHERE fd.id = $id and pc.data = '$data'                     
                      ORDER BY cl.nome, cl.razaosocial
	           ";

        $consulta_cliente_query = $MySQL->query($consulta_cliente);
		while(list($cliente,$CLIENTE_RAZAOSOCIAL,$CLIENTE_NOME) = mysql_fetch_row($consulta_cliente_query))
		{
			 echo "<tr><td colspan=\"4\" align=\"center\">$CLIENTE_RAZAOSOCIAL$CLIENTE_NOME</td></tr>";
                $SEMI_TOTAL=0.00;

              $consulta_itens="
								SELECT
								  pd.nome,
								  pe.quantidade,
								  pe.preco_uni,
								  pe.semi_total
								FROM pedidos pe  
								INNER JOIN produtos pd ON pd.id=pe.ID_PRODUTO     
								INNER JOIN fornecedores fd ON fd.id=pd.fornecedor          
								INNER JOIN pedidos_cliente pc ON pc.id_pedido_cliente=pe.ID_PEDIDO          
								INNER JOIN clientes cl ON cl.id=pc.id_cliente     
								WHERE fd.id = $id and pc.data = '$data' and pc.id_cliente=$cliente
								ORDER BY pe.ID_PRODUTO 	             
							 ";

             $consulta_itens_query = $MySQL->query($consulta_itens);
  			 while(list(
						  $PRODUTO_NOME,
						  $QUANTIDADE,
						  $PRECO_UNI,
						  $SEMI_TOTAL
			            ) = mysql_fetch_row($MySQL->query($consulta_itens_query)))
			{
				$SUB_TOTAL.=$SEMI_TOTAL;
				echo "<tr>
				          <td align=\"center\">$PRODUTO_NOME</td>
				          <td align=\"center\">$QUANTIDADE</td>
				          <td align=\"center\">$PRECO_UNI</td>
				          <td align=\"center\">$SEMI_TOTAL</td>
					  </tr>
				      <tr><td align=\"right\">$SUB_TOTAL</td></tr>
		           ";
			}
		}
	 echo "<tr><td colspan=\"4\" align=\"center\">$TOTAL_GERAL</td></tr>";
	}
    echo "</table>";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai é que esta o pro.

 

Não tem exibição de problema.

 

Eu pedi para imprimir a variavel que contem a consulta, coloquei ela no mysql front e retornou normalmente. em erros.

A unica novidade é que o campo p.nome, retornou o mesmo nome em duas linhas de retorno (registros)

 

Olha o que exibe:

SELECT pd.nome, pe.quantidade, pe.preco_uni, pe.semi_total FROM pedidos pe INNER JOIN produtos pd ON pd.id=pe.ID_PRODUTO INNER JOIN fornecedores fd ON fd.id=pd.fornecedor INNER JOIN pedidos_cliente pc ON pc.id_pedido_cliente=pe.ID_PEDIDO INNER JOIN clientes cl ON cl.id=pc.id_cliente WHERE fd.id = 2 and pc.data = '2011-07-14' and pc.id_cliente=1 ORDER BY pe.ID_PRODUTO Erro na consulta da query!
Resource id #16 SELECT pd.nome, pe.quantidade, pe.preco_uni, pe.semi_total FROM pedidos pe INNER JOIN produtos pd ON pd.id=pe.ID_PRODUTO INNER JOIN fornecedores fd ON fd.id=pd.fornecedor INNER JOIN pedidos_cliente pc ON pc.id_pedido_cliente=pe.ID_PEDIDO INNER JOIN clientes cl ON cl.id=pc.id_cliente WHERE fd.id = 2 and pc.data = '2011-07-06' and pc.id_cliente=1 ORDER BY pe.ID_PRODUTO Erro na consulta da query!
Resource id #18
RELATÓRIO ANALÍTICO DE PEDIDOS FORNECEDOR Malta S/A
2011-07-14
Carlos Rocha
2011-07-06
Carlos Rocha

 

São 3 consultas.

 

Uma pra retornar a data, outra para retornar o cliente e outra para retornar os ítens que aquele cliente comprou naquela data daquele fornecedor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pronto. Grato a todos que ajudaram:

<?php
if ($acao == "ver")
{
$consulta_fornecedor="
				   SELECT razaosocial, nome
				   FROM fornecedores
				   WHERE id=$id
	                ";

$consulta_data="
                      SELECT DISTINCT(pc.data)
				   FROM pedidos_cliente pc    
                      INNER JOIN pedidos pe ON pe.ID_PEDIDO = pc.id_pedido_cliente                       
                      INNER JOIN produtos pd ON pd.id = pe.ID_PRODUTO                       
                      INNER JOIN fornecedores fd ON fd.id = pd.fornecedor                       
                      WHERE fd.id = $id                       
                      ORDER BY pc.data desc
	          ";

    list($FORNECEDOR_RAZAOSOCIAL,$FORNECEDOR_NOME) = mysql_fetch_row($MySQL->query($consulta_fornecedor));

	echo "<table align=\"left\" width=\"95%\" border=\"1\">
		   <tr><td colspan=\"4\" align=\"center\">
							  RELATÓRIO ANALÍTICO DE PEDIDOS FORNECEDOR $FORNECEDOR_RAZAOSOCIAL$FORNECEDOR_NOME 
			   </td></tr>
		 ";
       $consulta_data_query = $MySQL->query($consulta_data);

	while(list($data) = mysql_fetch_row($consulta_data_query))
	{
		echo "<tr><td colspan=\"4\" align=\"left\">".formata_data($data)."</td></tr>";

        	$consulta_cliente="
                      SELECT DISTINCT(pc.id_cliente),cl.razaosocial, cl.nome 
				   FROM pedidos_cliente pc    
                      INNER JOIN pedidos pe ON pe.ID_PEDIDO = pc.id_pedido_cliente                       
                      INNER JOIN produtos pd ON pd.id = pe.ID_PRODUTO                       
                      INNER JOIN fornecedores fd ON fd.id = pd.fornecedor
                      INNER JOIN clientes cl ON cl.id = pc.id_cliente                                              
                      WHERE fd.id = $id and pc.data = '$data'                     
                      ORDER BY cl.nome, cl.razaosocial
	           ";

				echo "<tr>
				          <td align=\"left\" width=\"40%\">NOME DO PRODUTO</td>
				          <td align=\"center\" width=\"20%\">QUANTIDADE</td>
				          <td align=\"right\" width=\"20%\">PRECO UNITÁRIO</td>
				          <td align=\"right\" width=\"20%\">SEMI TOTAL</td>
					  </tr>
		           ";

        $consulta_cliente_query = $MySQL->query($consulta_cliente);
		while(list($cliente,$CLIENTE_RAZAOSOCIAL,$CLIENTE_NOME) = mysql_fetch_row($consulta_cliente_query))
		{
			 echo "<tr><td colspan=\"4\" align=\"left\">$CLIENTE_RAZAOSOCIAL$CLIENTE_NOME</td></tr>";

              $consulta_itens="
								SELECT
								  pd.nome,
								  pe.quantidade,
								  pe.preco_uni,
								  pe.semi_total
								FROM pedidos pe  
								INNER JOIN produtos pd ON pd.id=pe.ID_PRODUTO     
								INNER JOIN fornecedores fd ON fd.id=pd.fornecedor          
								INNER JOIN pedidos_cliente pc ON pc.id_pedido_cliente=pe.ID_PEDIDO          
								INNER JOIN clientes cl ON cl.id=pc.id_cliente     
								WHERE fd.id = $id and pc.data = '$data' and pc.id_cliente=$cliente
								ORDER BY pe.ID_PRODUTO 	             
							 ";
                $SUB_TOTAL=0.00;
             $consulta_itens_query = $MySQL->query($consulta_itens);
  			 while(list(
						  $PRODUTO_NOME,
						  $QUANTIDADE,
						  $PRECO_UNI,
						  $SEMI_TOTAL
			            ) = mysql_fetch_row($consulta_itens_query))
			{
				$SUB_TOTAL+=$SEMI_TOTAL;

				echo "<tr>
				          <td align=\"left\" width=\"40%\">$PRODUTO_NOME</td>
				          <td align=\"center\" width=\"20%\">$QUANTIDADE</td>
				          <td align=\"right\" width=\"20%\">R$ ".number_format($PRECO_UNI, 2, '.', '')."</td>
				          <td align=\"right\" width=\"20%\">R$ ".number_format($SEMI_TOTAL, 2, '.', '')."</td>
					  </tr>
		           ";
			}
				echo "<tr><td align=\"right\" colspan=\"4\">TOTAL NA DATA: R$ ".number_format($SUB_TOTAL, 2, '.', '')."</td></tr>";

				$TOTAL_GERAL+=$SUB_TOTAL;

		}
	}
			 echo "<tr><td colspan=\"4\" align=\"center\">TOTAL GERAL: R$ ".number_format($TOTAL_GERAL, 2, '.', '')."</td></tr>";

    echo "</table>";
}
?>

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.