2
respostas

Como enviar vários formulário de uma única vez?

Praticando, estou desenvolvendo um sistema de estoque de insumos alimentares. O meu sistema gera automaticamente e dinamicamente "n " formulários iguais porém com valores diferentes. Considerando que pode ser gerado, por exemplo, mais de 100 formulários, para a experiência do usuário seria inviável enviar formulário por formulário, de um em um, manualmente. Esse processo arcaico levaria muito tempo. Então a ideia é implementar alguma lógica que alguma forma realize esse 'submit' dos formulários de uma única vez. Não sei se existe alguma função para isso. irei disponibilizar partes do código:

Código que gera os formulários:

$produtos = new Produto("", "", "", 0, "", "", 0);
$produtosCadastrados = $produtos->buscarProdutosPorGenero(1);

////Busca  criar os objetos produtos cadastrados
$produtosCadastradosGenero = array_map(function($produto){
    return new Produto(
      $produto['CD_Produto'],
      $produto['Nome_Produto'],
      $produto['Descricao_Produto'],
      $produto['Quant_Estoque_Produto'],
      $produto['Categoria'],
      $produto['Genero'],
      $produto['ID_Unidade']
    ); 
  }, $produtosCadastrados);

?>

<!--Formulário-->
<table class="table">
    <thead>
        <tr>
        <th scope="col">CÓD.</th>
        <th scope="col">PRODUTO/ITEM</th>
        <th scope="col">EM ESTOQUE</th>
        <th scope="col">QUANT. SAÍDA</th>
        <!--<th scope="col">ESTOQUE FUTURO</th>
        <th scope="col">CONFIRMAR</th>-->
        </tr>
    </thead>
    <tbody>
        <?php
            foreach($produtosCadastradosGenero as $produtoItem):
        ?>
        <form method="POST" action="post.php">
            <tr>
                <td>
                    <input class="form-control" name="codigoSaida" type="hidden" value="<?= $_GET['cd-saida'];?>" required readonly>
                    <input class="form-control" name="codigoProduto" type="hiddedn" value="<?= $produtoItem->getCodigo();?>" required readonly>
                </td>
                <td><input class="form-control" name="nomeProduto" type="hiddedn" value="<?= $produtoItem->getNome();?>" require readonly></td>
                <td><input class="form-control col-2" name="quantProdutoSaida"  type="text" required></td>
                <td><input class="form-control" name="nomeProduto" type="hiddedn" value="<?= $produtoItem->getUnidadeDeMedida();?>" require readonly></td>
                <td><button type="submit" class="btn btn-success" id="salvar-todos">Gerar</button></td>
            </tr>
            </form>
        <?php
            endforeach;
        ?>
        <button type="button" class="btn btn-success" id="salvar-todos">Gerar</button>
    </tbody>
</table>

No comentário abaixo, diponibilizo a página de processamento(post.php):

2 respostas

Segue (parte) o código da página de processamento:

<?php
    ob_start();
    session_start();
    
    (aqui são )

    //Dados em questão
    $codigoSaida = $_POST['codigoSaida'];
    $codigoProduto = $_POST['codigoProduto'];
    $quantProdutoSaida = $_POST['quantProdutoSaida'];

    echo "Cod da saída: ". $codigoSaida . "<br>";
    echo "Cod do produto: ". $codigoProduto . "<br>";
    echo "Quantia: ". $quantProdutoSaida . "<br>";

    //Instanciando o objeto produto
    $produto = new Produto($codigoProduto, "", "", 0, "", "", 0);
    $produto->registrarSaidaDoProduto($codigoSaida, $quantProdutoSaida);

    exit;

Se alguém soube como resolver, por favor agradeço!

Oii, tudo bem?

A minha sugestão seria não ter vários formulários. Tenha apenas 1 único formulário com vários inputs do tipo "checkbox", onde a pessoa pode ir marcando os produtos. E ao final ela pode submeter este formulário.

Seria algo parecido com isto:

<?php

//isso aqui viria do seu banco
$produtosCafe = [
    [
            "id" => 233,
        'nome' => "Café Cremoso",
    ],
    [
        "id" => 236,
        'nome' => "Café com Leite",
    ],
    [
        "id" => 253,
        "nome" => "Cappuccino",
    ],
    [
        "id" => 356,
        "nome" => "Café Gelado",
    ]
];
?>


<!DOCTYPE html>
<html>
<head>
    <title>Formulário de Seleção de Produtos</title>
</head>
<body>
<h2>Seleção de Produtos</h2>
<form action="processar.php" method="post">
    <table>
        <tr>
            <th>Produto</th>
            <th>Seleção</th>
        </tr>
        <?php foreach ($produtosCafe as $cafe): ?>
        <tr>
            <td><?= $cafe['nome'] ?></td>
            <td>
                <input type="checkbox" name="produto[]" value="<?= $cafe['id'] ?>">
            </td>
        </tr>
        <?php endforeach; ?>
    </table>
    <input type="submit" value="Prosseguir">
</form>
</body>
</html>

Dessa forma, você consegue capturar o id de cada produto selecionado para fazer algum processamento no seu sistema.

É uma alternativa :)