Ir para conteúdo

POWERED BY:

Arquivado

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

felipebmfaria

[Resolvido] Enviar elementos via array

Recommended Posts

Bom dia,

Estou montando um orçamento online de buffet. Os itens do buffet sao separados por categorias: carnes, molhos, drinks e etc.

Há um formulario com checkbox para cada item que o usuario desejar e tb há um botao 'marcar todos' que marca todos os itens daquela categoria.

Quando vou enviar o orçamento acontecem erros estranhos, tipow tem hora que envia todos os itens marcados, mas tem hora que alguns itens marcados nao sao enviados no array.

Alguém consegue ver algo de errado no codigo?

 

formulario.php

<input type="checkbox" name="CheckTodos" onClick="marcarCheck();" /><img src="imagens/orcamento/carnes.png" /> <br />
<?php
$count = 0;
$sql=mysql_query("SELECT * FROM cardapio WHERE categoria='carnes'");
  $total = mysql_num_rows($sql); 
        $dados = mysql_fetch_array($sql); 
        $id = $dados['id'];
        $nome = $dados['nome'];         	 

           echo "<input type='checkbox' value='$id' id='Marcados' name='{$count}[carnes]'> $nome";
	$count++;
?>

 

enviar.php (categoria de carnes)

<?php
$values = $_POST;

echo count($values).'<br><br>';

echo "<b>Carnes</b><br>";
for($i=0; $i<count($values); $i++)
 {
    $id = $values[$i]['carnes'];
 $busca=mysql_query("SELECT * FROM cardapio WHERE id='$id'");
        while($ver=mysql_fetch_row($busca)){
           $nome=$ver[1];

              echo ' <b>'.$i.'</b> 
	      <b>Id:</b> '.$id.' 
	      <b>Nome:</b> '.$nome.' 
	      <b>Descrição:</b> '.$descricao.' 
	      <b>Categoria:</b> '.$categoria.'<br>';
	  }
  } 	

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta mudar para isso aqui

 

formulario.php

<input type="checkbox" name="CheckTodos" onClick="marcarCheck();" /><img src="imagens/orcamento/carnes.png" /> <br />
<?php
$count = 0;
$sql=mysql_query("SELECT * FROM cardapio WHERE categoria='carnes'");
  $total = mysql_num_rows($sql); 
        $dados = mysql_fetch_array($sql); 
        $id = $dados['id'];
        $nome = $dados['nome'];                 

           echo "<input type='checkbox' value='$id' id='Marcados[]' name='Marcados[]'> $nome";
               $count++;
?>

 

 

 

enviar.php (categoria de carnes)

<?php
$values = $_POST['Marcados'];

echo count($values).'<br><br>';

echo "<b>Carnes</b><br>";
for($i=0; $i<count($values); $i++)
 {
    $id = $values[$i];
        $busca=mysql_query("SELECT * FROM cardapio WHERE id='$id'");
        while($ver=mysql_fetch_row($busca)){
                  $nome=$ver[1];

              echo ' <b>'.$i.'</b> 
                     <b>Id:</b> '.$id.' 
                     <b>Nome:</b> '.$nome.' 
                     <b>Descrição:</b> '.$descricao.' 
                     <b>Categoria:</b> '.$categoria.'<br>';
                 }
  }  

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz as alterações, mas não adiantou.

Quando eu envio aparece assim.

6

Carnes
0  Id: 3  Nome: Produto 01  Descrição: Lorem  Categoria: carnes
1  Id: 6  Nome: Produto 04  Descrição: Ipsum   Categoria: carnes
2  Id: 7  Nome: Produto 05  Descrição: Lorem   Categoria: carnes
3  Id: 8  Nome: Produto 06  Descrição: Lorem  Categoria: carnes
4  Id: 9  Nome: Produto 07  Descrição: UIpsum  Categoria: carnes

 

6 é o valor de $values, ou seja, está rodando 6 vezes, beleza! Mas não pega o ultimo item, que tem id 10. Parece que esta contando o checkbox do MarcarTodos como o primeiro, sendo que este está desmarcado.

 

<input type="checkbox" name="CheckTodos" onClick="marcarCheck();" /> // line 1, formulario.php

Já tirei esta linha, mas o erro persiste.

 

http://fulltype.com.br/tela1.bmp

http://fulltype.com.br/tela2.bmp

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplo simbólico:

 

<?php
if ( $_POST ) :
$product = $_POST['selection'];

echo '<pre>' , print_r ( $product ) , '</pre>';

endif;
?>
<form method='post' action=''>

<input type="checkbox" name="checkall">Marcar todos<br />
<input type="checkbox" name="selection[]" value="1" />Produto 1<br />
<input type="checkbox" name="selection[]" value="2" />Produto 2<br />
<input type="checkbox" name="selection[]" value="3" />Produto 3<br />
<input type="checkbox" name="selection[]" value="4" />Produto 4<br />
<input type="checkbox" name="selection[]" value="5" />Produto 5<br />
<input type="checkbox" name="selection[]" value="6" />Produto 6<br />
<input type="submit" value="Enviar" />
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei um

if ( $_POST ){ 

antes de tudo, mas continua dando o mesmo erro.

 

Não sei mais o que fazer...

 

Observei o seguinte, o ultimo item que nao está saindo na lista do array possui o id 10 e nome Produto 08.

Depois que eu troquei o id para 1, ele entrou na lista. Constato que parece que a repetição não está atingindo o ultimo produto... onde pode estar errado?

 

http://fulltype.com.br/tela3.bmp

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema está no

 

for($i=0; $i<count($values); $i++)

 

Se for o último item ele sai do loop? Não faz nada?

 

Troque para

for($i=0; $i <= count($values); $i++)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso, ele sai do loop e nao é exibido na lista, conforme voce pode ver aqui http://www.fulltype.com.br/tela2.bmp

Perceba que foram 6 interacoes, ou seja, o $values = 6, mas sao exibidos somente 5 produtos.

 

Eu troquei a linha como voce sugeriu, mas também troquei o id de 1 para 10, voltei a ter problemas, ele nao pega o item de id 10, mesmo colocando o < =

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você já verificou o html gerado(do formulário) está correto ?

 

Poste o código gerado(formulário) para podermos testar nas condições.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos Coelho,

 

Eu postei o formulario, é o arquivo formulario.php. Ele faz um select de todos os produtos cadastrados no banco, daí o usuario escolhe quais vai querer incluir, como se fosse uma loja virtual.

 

formulario.php

<input type="checkbox" name="CheckTodos" onClick="marcarCheck();" /><img src="imagens/orcamento/carnes.png" /> <br />
<?php
$count = 0;
$sql=mysql_query("SELECT * FROM cardapio WHERE categoria='carnes'");
  $total = mysql_num_rows($sql); 
        $dados = mysql_fetch_array($sql); 
        $id = $dados['id'];
        $nome = $dados['nome'];                 

           echo "<input type='checkbox' value='$id' id='Marcados' name='{$count}[carnes]'> $nome";
               $count++;
?>

 

enviar.php

<?php
$values = $_POST;

echo count($values).'<br><br>';

echo "<b>Carnes</b><br>";
for($i=0; $i<count($values); $i++)
 {
    $id = $values[$i]['carnes'];
        $busca=mysql_query("SELECT * FROM cardapio WHERE id='$id'");
        while($ver=mysql_fetch_row($busca)){
                  $nome=$ver[1];

              echo ' <b>'.$i.'</b> 
                     <b>Id:</b> '.$id.' 
                     <b>Nome:</b> '.$nome.' 
                     <b>Descrição:</b> '.$descricao.' 
                     <b>Categoria:</b> '.$categoria.'<br>';
                 }
  }    

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa, não entendi muito bem... seria isso aqui?

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

7<br><br><b>Carnes</b><br>







				 <b>0</b> 

				 <b>Id:</b> 3 

				 <b>Nome:</b> Produto 01 

				 <b>Descrição:</b> Lorem 

				 <b>Categoria:</b> carnes<br>







				 <b>1</b> 

				 <b>Id:</b> 6 

				 <b>Nome:</b> Produto 04 

				 <b>Descrição:</b> Ipsum  

				 <b>Categoria:</b> carnes<br>







				 <b>2</b> 

				 <b>Id:</b> 7 

				 <b>Nome:</b> Produto 05 

				 <b>Descrição:</b> Lorem  

				 <b>Categoria:</b> carnes<br>







				 <b>3</b> 

				 <b>Id:</b> 8 

				 <b>Nome:</b> Produto 06 

				 <b>Descrição:</b> Lorem 

				 <b>Categoria:</b> carnes<br>







				 <b>4</b> 

				 <b>Id:</b> 9 

				 <b>Nome:</b> Produto 07 

				 <b>Descrição:</b> UIpsum 

				 <b>Categoria:</b> carnes<br>







				 <b>5</b> 

				 <b>Id:</b> 10 

				 <b>Nome:</b> Produto 08 

				 <b>Descrição:</b> Ipsum  

				 <b>Categoria:</b> carnes<br>







<br></html>

 

Quando eu marco somente o ultimo produto, cujo id é 10 e nome é Produto 08, nao aparece nada.

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

1<br><br><b>Carnes</b><br>







<br></html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos por partes :D

 

Poste o HTML gerado neste script.

 

formulario.php

<input type="checkbox" name="CheckTodos" onClick="marcarCheck();" /><img src="imagens/orcamento/carnes.png" /> <br />
<?php
$count = 0;
$sql=mysql_query("SELECT * FROM cardapio WHERE categoria='carnes'");
  $total = mysql_num_rows($sql); 
        $dados = mysql_fetch_array($sql); 
        $id = $dados['id'];
        $nome = $dados['nome'];                 

           echo "<input type='checkbox' value='$id' id='Marcados' name='{$count}[carnes]'> $nome";
               $count++;
?>

 

Exemplo

 

<form method='post' action=''>

<input type="checkbox" name="CheckTodos" onClick="marcarCheck();" /><img src="imagens/orcamento/carnes.png" /> <br />
<input type="checkbox" name="selection[]" value="1" />Produto 1<br />
<input type="checkbox" name="selection[]" value="2" />Produto 2<br />
<input type="checkbox" name="selection[]" value="3" />Produto 3<br />
<input type="checkbox" name="selection[]" value="4" />Produto 4<br />
<input type="checkbox" name="selection[]" value="5" />Produto 5<br />
<input type="checkbox" name="selection[]" value="6" />Produto 6<br />
<input type="submit" value="Enviar" />
</form>

 

Porque eu peço isso ? Para verificar um possível erro no HTML gerado pelo script ou a estrutura gerada não está de acordo com o que você espera.

 

Entendeu ? ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza, vamos por partes,

 

formulario

<form action="enviar_orcamento.php" method="post" name="Form">
 <input type="checkbox" name="CheckTodos" onClick="marcarCheck();" />
   <img src="imagens/orcamento/carnes.png" /> <br />
  <table width=100% border=0></tr><tr><td>
   <table border="0" width="60%">
     <tr>
       <td>
          <div align='left'>
     <center>
               <input type='checkbox' value='3' id='Marcados' name='0[carnes]'>
					        
                   <span class='texto'>Produto 01</span>
     </center>
 	   </div>  
</td>
    </tr>
</table>    <br /><br />

</td> 

<td>

<table border="0" width="60%">

<tr>

<td>
  <div align='left'>
    <center><input type='checkbox' value='6' id='Marcados' name='1[carnes]'>
        <span class='texto'>Produto 04</span>
   </center>
 </div>  
</td>
</tr>
</table>      <br /><br />

</td> 

<td>

<table border="0" width="60%">

<tr>

<td>



<div align='left'>
   <center><input type='checkbox' value='7' id='Marcados' name='2[carnes]'>
       <span class='texto'>Produto 05</span>
   </center>
</div>  
</td>
</tr>

</table>      <br /><br />

</td> 

</tr><tr><td>

<table border="0" width="60%">

<tr>

<td>

 <div align='left'>
   <center><input type='checkbox' value='8' id='Marcados' name='3[carnes]'>
        <span class='texto'>Produto 06</span>
   </center>
 </div>  
</td>
</tr>
</table>      <br /><br />
</td> 


<td>

<table border="0" width="60%">

<tr>

<td>
  <div align='left'>
     <center><input type='checkbox' value='9' id='Marcados' name='4[carnes]'>
        <span class='texto'>Produto 07</span>
     </center>
  </div>  
</td>
</tr>
</table>      <br /><br />
</td> 


<td>

<table border="0" width="60%">

<tr>

<td>
  <div align='left'>
      <center><input type='checkbox' value='10' id='Marcados' name='5[carnes]'>
          <span class='texto'>Produto 08</span>
      </center>
  </div>  
</td>
</tr>
</table>      <br /><br />
</td> 


</table>

<!--////////////////////////// CARNES //////////////////////////////////////-->      <input type="submit" value="enviar" class="botao" />

    <br /><br />

 </form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema de usar o for no seu caso é porque as chaves do array não são sequenciais dependendo da escolha das opções.

 

Use um foreach

 

<?php

if( $_SERVER[ 'REQUEST_METHOD' ] == 'POST' )
{
   foreach( $_POST as $option )
   {
       echo $option[ 'carnes' ], '<br/>';
   }
}

 

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só por curiosidade, qual o motivo deste nome no checkbox ?

 

<input type='checkbox' value='9' id='Marcados' name='4[carnes]'>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só por curiosidade, qual o motivo deste nome no checkbox ?

 

É para pegar no array na proxima pagina.

 

$id = $values[$i]['carnes'];

 

[Resolvido]

 

Perfeito!

É isso mesmo, Carlos Coelho, foreach para chaves não sequenciais. Funcinou perfeitamente.

foreach ( $_POST as $option )   
 {
   $id = $option['carnes'];
 }

 

Muito obrigado. :joia:

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.