Gravar resultados de um foreach vindo de dois campos

Enviada por Eduardo Martins 
Eduardo Martins
Gravar resultados de um foreach vindo de dois campos
02 de July de 2010 às 03:08AM
Olá pessoal estou começando agora com programação em php e tenho uma dúvida que provavelmente é simples porém como o meu conhecimento ainda tem limites não estou achando a solução correta.

Estou fazendo um formulário com campos dinâmicos, são dois os campos dinâmicos: Produto e quantidade. Eu quero pegar os resultados digitados e salvar no banco de dados, por se tratar de campos dinâmicos eu coloquei [] no nome dos campos, na verdade usei o mesmo nome nos dois campos. Ficou assim:

Produto:
<input name="campo[]" type="text" id="campo[]" />

Quantidade:
<input type="text" name="campo[]" id="campo[]" />

Para pegar os resultados digitados e mandar para o banco eu fiz de duas formas que não deram certo

**************************************************************************************************
PRIMEIRA TENTATIVA

$campo = $_REQUEST['campo'];
for($i=0; $i < count($campo); $i++){

mysql_query("INSERT INTO produtos (produto, quantidade) value('$campo[$i]', '$campo[$i]')");
}
**************************************************************************************************
SEGUNDA TENTATIVA

foreach($_POST['campo'] as $campo) {
mysql_query("INSERT INTO produtos (produto, quantidade) value('$campo', '$campo')");
}

**************************************************************************************************

No banco grava tudo errado, na primeira linha grava o nome do produto no campo correspondente e no campo quantidade grava 0, na segunda linha grava no campo produto o valor da quantidade, que se repete no campo quatidade da linha 2. Apartir dái está feita a zona. Eu já tentei de tudo pra gravar ser porém não vai, se alguém poder me ajudar eu agradeço muito.
Marcos Regis
Re: Gravar resultados de um foreach vindo de dois campos
03 de July de 2010 às 12:03AM
Corrija seus inputs

Produto:
<input name="produto[1]" type="text" id="produto_1" />

Quantidade:
<input type="text" name="quantidade[1]" id="quantidade_1" />

Produto:
<input name="produto[2]" type="text" id="produto_2" />

Quantidade:
<input type="text" name="quantidade[2]" id="quantidade_2" />

PHP

$produtos = isset($_REQUEST['produto'])?$_REQUEST['produto']:array();
$quantidade = isset($_REQUEST['quantidade'])?$_REQUEST['quantidade']:array();


$sql = 'INSERT INTO produtos (produto, quantidade) value(\'%s\', \'%d\')');
foreach($produtos as $indice=>$produto)
{
mysql_query(sprintf($sql,$produto,(isset($quantidade[$indice])?intval($quantidade[$indice]):'0'))) or trigger_error('Erro ao incluir produto '. $indice .'. Detalhes : ' . mysql_error());
}
Eduardo Martins
Re: Gravar resultados de um foreach vindo de dois campos
03 de July de 2010 às 12:41AM
Mas dessa forma Marcos eu estaria limitando o meu cadastro a apenas dois insertes não é isso? Tem que ser dinâmico, pois terá casos que o cadastro terá 5 produtos e em outros casos terá 20. Entendeu?
Jayme A. C. Gimenez
Re: Gravar resultados de um foreach vindo de dois campos
03 de July de 2010 às 03:33AM
Acredito que o Marcos Regis mostrou os inputs limitados a 2 de cada somente para vc entender melhor o exemplo.

No caso dos inputs, o que vc estava fazendo errado era nomeá-los todos como campos[]. Teriam que ser name = "produto[]" e name = "quantidade[]" .
Eduardo Martins
Re: Gravar resultados de um foreach vindo de dois campos
04 de July de 2010 às 05:57PM
Consegui o resultado que queria, agora está gravando sincronizado o produto e quantidade em seus devidos campos, fiz da seguinte forma:

No formulário de cadastro eu coloquei os campos assim
*************************************************************************************

<input name="produto[]" type="text" id="produto[]" />
<input type="text" name="quantidade[]" id="quantidade[]" />

*************************************************************************************
No script para cadastro ficou da seguinte forma:

<?php
require('conexao/conexao.php');

$campo_produto = $_REQUEST['produto'];
$campo_quantidade = $_REQUEST['quantidade'];

for($i=0; $i<count($campo_produto) AND ($campo_quantidade); $i++){
mysql_query("INSERT INTO produtos (produto, quantidade) value('$campo_produto[$i]', '$campo_quantidade[$i]')");

}
echo "
<META HTTP-EQUIV=REFRESH CONTENT='0; URL=teste.php'>
<script type=\"text/javascript\">
alert(\"cadastro feito com sucesso.\");
</script>";
?>

************************************************************************************************

Isso é o básico do básico, falta colocar as verificações para ver se o campos está vindo em branco pra subir um alerta. Mas enfim está dando certo. Acredito que esse código ajude aos outros iniciantes.

Abraços
Marcos Regis
Re: Gravar resultados de um foreach vindo de dois campos
05 de July de 2010 às 06:04PM
Eu utilizei indices para evitar problemas de sincronia.

Supondo que vc tenha 10 campos produtos[] e 10 campos quantidade[]. Se saltar um campo quantidade a ordem ficará errada e a quantidade 8 pode ir para o produto 7 e vice-versa.

Por isso o ideal é utilizar um indice. Não há nenhuma dificuldade em implementar e o ganho em confiança se justifica.
Eduardo Martins
Re: Gravar resultados de um foreach vindo de dois campos
13 de July de 2010 às 05:31PM
Marcos tudo bem? Cara eu não sei como fazer da forma que você deu a dica, você poderia me explicar como usar os índices?
Marcos Regis
Re: Gravar resultados de um foreach vindo de dois campos
13 de July de 2010 às 05:48PM
Posta seu código atual. (Apenas a parte da geração dos inputs e da geração da instrução SQL)
Vinicius Pedra
Re: Gravar resultados de um foreach vindo de dois campos
28 de August de 2020 às 04:21AM
boa noite senhores!
10 anos depois... em plena pandemia, achei o q eu precisava e já estava a mais de uma semana lutando kkkkkkkkkk

Eduardo Martins, sua solução foi melhor q o foreach!!!!
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.