Ir para conteúdo

Arquivado

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

Carcleo

loop dentrro de loop

Recommended Posts

Bom Dia a todos.

 

Estou precisando de uma ajuda.

 

Tenho um código que mostra dentro de um while, os numeros das listas de produtos cadastradas na tabela produtos_lista.

 

while
lista 1
lista 2
lista 3
...
...
lista n

 

Bom. Dentro desse while, eu tenho outro while que faz uma consulta para saber os fornecedores que tem produtos cadastrados em cada uma dessas listas.

 

$dados_fornece =  "
  SELECT     
   distinct(CONCAT(f.nome,f.razaosocial)), f.id, f.pgto_forma, f.pgto_prazo, pl.id_lista				
   from 
produtos_lista pl
inner join produtos p on pl.id_produto = p.id
inner join fornecedores f on f.id = p.fornecedor
   where pl.id_lista = $id_lista
   order by f.nome, f.razaosocial, pl.id_lista desc
	;	

 

Essa query, vai gerar outro while.

 

while
fornece 1
fornece 2
fornece 3
...
...
fornece n

 

E, dentro desse while, para cada fornecedor, eu gero outro while para mostrar seus produtros:

 

	 $sql_produtos_lista =  "
							  SELECT
							   pl.id_lista,
							   p.foto, 
							   pl.id_produto,
							   p.nome,  
							   f.nome, 
							   f.razaosocial, 
							   g.nome,
							   p.quantidadecaixa,
							   pl.preco_produto,
							   pl.condicao,
							   pl.observacao
							  from 
								 produtos_lista pl
							  inner join produtos p on pl.id_produto = p.id
							  inner join fornecedores f on f.id = p.fornecedor
							  inner join grupos g on p.grupo = g.id_grupo
							  where pl.id_lista = $lista_id and f.id=$id_fornecedor
							  order by pl.id_lista desc, f.nome, f.razaosocial, p.nome
							";		
    echo "<form action=\"carrinho.php?op=adicionar\" method=\"post\" name=\"envia_tudo\">";
    echo "<tr>
          <td colspan=\"10\">
		     $nome_fornecedor

		  </td>
	   </tr>";

 $sql_produtos_lista_query = $MySQL->query($sql_produtos_lista);

 	 while(list($id_lista, $foto, $id_produto, $nome_produto, $nome_fornece, $razao_fornece, $nome_grupo, $quantidadecaixa, $preco, $condicao, $observacao) = mysql_fetch_row($sql_produtos_lista_query)){

 echo "<input type=\"hidden\" name=\"{$i}[id_prod]\"  id=\"{$i}[id_prod]\" value=\"$id_produto\">
          <input type=\"hidden\" name=\"{$i}[quan]\" id=\"{$i}[quan]\" value=\"\">	
		   <input type=\"hidden\" name=\"{$i}[id_lista]\" name=\"{$i}[id_lista]\" value=\"$id_lista\">		   
      ";
    include("../global/funcoes_php/foto_ver.php");
    $icone = "<img border=0 src='../img/saiba_mais.png'  alt='Saiba Mais'>";	

if ($observacao=="")	  {$observacao="Sem observação";}
if ($condicao==1)	  {$condicao="Complemento";}
if ($condicao==2)	  {$condicao="Encarte";}
 echo "<tr>
          <td align=center>$id_lista</td>
          <td align=center>$condicao</td>
		  <td align=let>$nome_produto</td>
		  <td align=center>$quantidadecaixa</td>
		  <td align=right>R$ ". number_format($preco/$quantidadecaixa, 2, '.', '')."</td>
		  <td align=right>R$ ". number_format($preco, 2, '.', '')."</td>
		  <td align=right>
<input type=text id={$i}[quant] value=0 size=2 style=\"text-align: center;\" 
onKeyPress=\"BloqueiaLetras();\" 
onchange=\"calculo(this.value, $preco,'{$i}[quant]','{$i}[quan]','{$i}[label_preco]');\" >
		  </td>			  
		  <td align=right>R$ <label id=\"{$i}[label_preco]\">0.00</label></td>			  
		  <td align=center valign=\"middle\">
<a href=\"#\" onclick=\"this.href=' carrinho.php?op=adicionar&id_produto=$id_produto&id_da_lista=$id_lista&quantidade='+document.getElementById('{$i}[quant]').value\" > 
Enviar </a>			 
		  </td>           
             <td align=center>$observacao</td>			  
		</tr>
		";
             $i++;                                               }	

 

Tudo funciona bem. Porem, a cada vez que passa de uma lista para outra, no primeiro while, os campos {$i} [id_prod], ganham um novo 0[id_prod].

Aí, como já foi lançado o 0[id_prod]. no carrinho, embora esse id_prod faça parte de outra lista de prodtos ele não entra.

 

Exite um forma de eu conseguir evitar esse problema?

 

Segue o código completo:

 

 <?
 if ($acao== "mostra_produtos"){
    $sql =  "
             SELECT
           pl.id_lista,
			   p.foto, 
		   pl.id_produto,
  			   p.nome,  
		   f.nome, 
		   f.razaosocial, 
		   g.nome,
		   p.quantidadecaixa,
		   pl.preco_produto,
		   pl.condicao,
		   pl.observacao
		  from 
			 produtos_lista pl
		  inner join produtos p on pl.id_produto = p.id
		  inner join fornecedores f on f.id = p.fornecedor
		  inner join grupos g on p.grupo = g.id_grupo
		  where pl.id_lista = $id_lista
		  order by pl.id_lista desc, f.nome, f.razaosocial, p.nome
		";				 

    $sql2=mysql_query($sql);	
   if(mysql_num_rows($sql2)==0)
 {
 echo "<table border=1 width=800 align=center>
        <tr><td colspan=13 align=center><h3>Ainda não há produtos cadastrados</h3></td></tr>
	   </table>";
  }
  else
  {	
    $dados_fornece =  "
					SELECT
					  distinct(CONCAT(f.nome,f.razaosocial)), f.id, f.pgto_forma, f.pgto_prazo, pl.id_lista				
					from 
					   produtos_lista pl
					inner join produtos p on pl.id_produto = p.id
					inner join fornecedores f on f.id = p.fornecedor
					where pl.id_lista = $id_lista
					order by f.nome, f.razaosocial, pl.id_lista desc
				   ";	

 $dados_fornece_query = $MySQL->query($dados_fornece);

 echo "<table border=1 width=800 align=center>
        <tr><td colspan=13 align=center><h3>
		Para enviar varios produtos ao mesmo tempo, informe a quantidade de ítens na coluna Quantidade e clique no botão Enviar todos para o carrinho</h3></td></tr>
        <tr>
          <td align=center>Lista</td>
          <td align=center>Condição</td>
		  <td align=center>Produto</td>
		  <td align=center>Qtde. caixa</td>
		  <td align=center>Preço por<br>unidade na caixa</td>
		  <td align=center>Preço Caixa</td>			  
		  <td align=center>Quantidade</td>
		  <td align=center>Sub Total</td>
		  <td align=center>Adicionar</td>
		  <td align=center>Observação</td>			  
		 </tr>
	  ";
	   $i=0;
 while(list($nome_fornecedor, $id_fornecedor, $pgto_forma, $pgto_prazo, $lista_id)=mysql_fetch_row($dados_fornece_query))
 {
	 $sql_produtos_lista =  "
							  SELECT
							   pl.id_lista,
							   p.foto, 
							   pl.id_produto,
							   p.nome,  
							   f.nome, 
							   f.razaosocial, 
							   g.nome,
							   p.quantidadecaixa,
							   pl.preco_produto,
							   pl.condicao,
							   pl.observacao
							  from 
								 produtos_lista pl
							  inner join produtos p on pl.id_produto = p.id
							  inner join fornecedores f on f.id = p.fornecedor
							  inner join grupos g on p.grupo = g.id_grupo
							  where pl.id_lista = $lista_id and f.id=$id_fornecedor
							  order by pl.id_lista desc, f.nome, f.razaosocial, p.nome
							";		
    echo "<form action=\"carrinho.php?op=adicionar\" method=\"post\" name=\"envia_tudo\">";
    echo "<tr>
          <td colspan=\"10\">
		     $nome_fornecedor

		  </td>
	   </tr>";

 $sql_produtos_lista_query = $MySQL->query($sql_produtos_lista);

 	 while(list($id_lista, $foto, $id_produto, $nome_produto, $nome_fornece, $razao_fornece, $nome_grupo, $quantidadecaixa, $preco, $condicao, $observacao) = mysql_fetch_row($sql_produtos_lista_query)){

 echo "<input type=\"hidden\" name=\"{$i}[id_prod]\"  id=\"{$i}[id_prod]\" value=\"$id_produto\">
          <input type=\"hidden\" name=\"{$i}[quan]\" id=\"{$i}[quan]\" value=\"\">	
		   <input type=\"hidden\" name=\"{$i}[id_lista]\" name=\"{$i}[id_lista]\" value=\"$id_lista\">		   
      ";
    include("../global/funcoes_php/foto_ver.php");
    $icone = "<img border=0 src='../img/saiba_mais.png'  alt='Saiba Mais'>";	

if ($observacao=="")	  {$observacao="Sem observação";}
if ($condicao==1)	  {$condicao="Complemento";}
if ($condicao==2)	  {$condicao="Encarte";}
 echo "<tr>
          <td align=center>$id_lista</td>
          <td align=center>$condicao</td>
		  <td align=let>$nome_produto</td>
		  <td align=center>$quantidadecaixa</td>
		  <td align=right>R$ ". number_format($preco/$quantidadecaixa, 2, '.', '')."</td>
		  <td align=right>R$ ". number_format($preco, 2, '.', '')."</td>
		  <td align=right>
<input type=text id={$i}[quant] value=0 size=2 style=\"text-align: center;\" 
onKeyPress=\"BloqueiaLetras();\" 
onchange=\"calculo(this.value, $preco,'{$i}[quant]','{$i}[quan]','{$i}[label_preco]');\" >
		  </td>			  
		  <td align=right>R$ <label id=\"{$i}[label_preco]\">0.00</label></td>			  
		  <td align=center valign=\"middle\">
<a href=\"#\" onclick=\"this.href=' carrinho.php?op=adicionar&id_produto=$id_produto&id_da_lista=$id_lista&quantidade='+document.getElementById('{$i}[quant]').value\" > 
Enviar </a>			 
		  </td>           
             <td align=center>$observacao</td>			  
		</tr>
		";
             $i++;                                               }	



 }
			echo "
			 <tr>
				 <td align=center valign=\"middle\" colspan=10 height=50>

				   <input type=\"submit\" value=\"Enviar todos para o carrinho\">
				  </form>
				 </td>
			 </tr> ";
	echo "</table>";	 }
                           }
 ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

já dizia uma máxima de programação: se você tem 1 loop encaixado, tome cuidado, algo pode não estar certo

se você tem 2 loops encaixados(3 whiles como seu caso), então refatore o código.

 

[lógico que existem ressalvas]

 

seu código não está legal por vários motivos.

 

-> include dentro do laço ?

-> indentação confusa

-> afinal de contas, vai usar procedural ou OO ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Viu o tamanho da confuzão que eu me enfiei?

 

Bom, depois que é enviado, via POST o formulario, eu pego os campos no outro action e filtro o array $_POST por campo quan enviado com valor 1:

 

$dados = filtrar_array_por_valor($_POST, 'quan', 1);  

 

Fazendo um nova array.

Daí terei que mudar esse funçao tambem né?

<?
function filtrar_array_por_valor($array, $index, $value) {
//if (!array_key_exists(0, $array) ) {$array[0]=0;}
  if(is_array($array) && count($array) > 0) {
    foreach(array_keys($array) as $key) {
      $temp[$key] = $array[$key][$index];

     if ($temp[$key] >= $value) {
        $newarray[$key] = $array[$key];
      }
    }
  }
  return $newarray;
}
?>

Irmão, estou bem perdido.

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.