Carcleo 4 Denunciar post Postado Julho 20, 2011 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
Artur Luiz 0 Denunciar post Postado Julho 20, 2011 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
Carcleo 4 Denunciar post Postado Julho 20, 2011 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
Carcleo 4 Denunciar post Postado Julho 20, 2011 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
Artur Luiz 0 Denunciar post Postado Julho 20, 2011 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
Carcleo 4 Denunciar post Postado Julho 20, 2011 Desculpe arthur. Onde eu coloco esse codigo? Compartilhar este post Link para o post Compartilhar em outros sites
Artur Luiz 0 Denunciar post Postado Julho 20, 2011 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
Carcleo 4 Denunciar post Postado Julho 20, 2011 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
Artur Luiz 0 Denunciar post Postado Julho 20, 2011 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
Carcleo 4 Denunciar post Postado Julho 20, 2011 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
Artur Luiz 0 Denunciar post Postado Julho 20, 2011 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
Carcleo 4 Denunciar post Postado Julho 20, 2011 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
RenatoRibeiro 0 Denunciar post Postado Julho 20, 2011 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
Carcleo 4 Denunciar post Postado Julho 20, 2011 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
Artur Luiz 0 Denunciar post Postado Julho 20, 2011 Qual a linha que ocorre o erro? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 20, 2011 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
Carcleo 4 Denunciar post Postado Julho 20, 2011 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