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.