Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Avatar do usuário
ADMIN
ADMIN
Tópico Autor
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Inserir vários registros com formulário dinâmico em PHP

15-02-2016 22:28

Nesse post vou deixar um exemplo bem simples de como inserir vários registros ou fazer vários insert de uma só vez no banco de dados através de um formulário dinâmico. Ou seja, um formulário onde o usuário pode inserir o número de inputs que desejar.

Vou partir da ideia de que o usuário já tem o script de criar os campos dinâmicos e ir para parte do exemplo básico de capturar vários campos dinâmicos com PHP.

<form action="teste.php" method="post"> <input type="text" name="nome[]" value="João"> <input type="text" name="valor[]" value="10"> <br /> <input type="text" name="nome[]" value="Maria"> <input type="text" name="valor[]" value="20"> <input type="submit" name="submit"> </form> <?php if(isset($_POST['submit'])) { foreach($_POST['nome'] AS $indice => $valor) { echo "INSERT INTO minha_tabela (nome,valor) VALUES('".$_POST['nome'][$indice]."', '".$_POST['valor'][$indice]."')<br />"; // ou mysql_query("INSERT INTO minha_tabela (nome,valor) VALUES('".$_POST['nome'][$indice]."', '".$_POST['valor'][$indice]."')"); } } ?>

O processo de uso é bem simples. Pega um dos arrays enviado e usa no foreach. Já para capturar cada valor do array independente basta usar o nome do array mais o índice.
3
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Mensagens: 1

Re: Inserir vários registros com formulário dinâmico em PHP

13-04-2017 19:02

Muito bom o cód..obrigado.

Mas estou com um problema, quando ele faz o insert na tabela ele cria 8 entradas para cada linha do meu formulario.

Exemplo: inclui 2 produtos no formulario e no BD ele fez insert de 18 linhas repetindo os produtos.

Segue como eu montei...poderia me ajudar a corrigir por favor.

foreach($_POST['cat_id'] AS $indice => $cat_id)
foreach($_POST['qtd'] AS $indice => $qtd)
foreach($_POST['valor_unid'] AS $indice => $valor_unid)
foreach($_POST['valor_total'] AS $indice => $valor_total)

mysql_query("INSERT INTO lc_detalhe (cat_id,qtd,valor_unid,valor_total,controle_id) values
('".$_POST['cat_id'][$indice]."', '".$_POST['qtd'][$indice]."', '".$_POST['valor_unid'][$indice]."', '".$_POST['valor_total'][$indice]."',@ID)");
0
 
Avatar do usuário
ADMIN
ADMIN
Tópico Autor
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: Inserir vários registros com formulário dinâmico em PHP

13-04-2017 20:44

Não entendi porque você fez vários foreach. Basta somente você pegar o nome do array pelo post e setar o índice do laço.

$_POST['valor'][$indice]

Como eu fiz no exemplo do post.

Já o problema do campo vazio você pode usar um if que verifica se $valor está vazio ou não.

Teste esse exemplo:

<form action="teste.php" method="post"> <input type="text" name="nome[]" value=""> <input type="text" name="valor[]" value=""> <br /> <input type="text" name="nome[]" value=""> <input type="text" name="valor[]" value=""> <input type="submit" name="submit"> </form> <?php if(isset($_POST['submit'])) { foreach($_POST['nome'] AS $indice => $valor) { if(!empty($valor)) { echo "INSERT INTO minha_tabela (nome,valor) VALUES('".$_POST['nome'][$indice]."', '".$_POST['valor'][$indice]."')<br />"; // ou mysql_query("INSERT INTO minha_tabela (nome,valor) VALUES('".$_POST['nome'][$indice]."', '".$_POST['valor'][$indice]."')"); } } } ?>

0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado