2
respostas

Vários INSERTS vindo de um único formulário (com o mesmo name)

Seguindo a estrutura do curso, como faço pra fazer vários INSERTS vindo do mesmo formulário? Por ex: Carro1.. Carro2.. Carro3..

<label>Carro1</label><input type="text" name="carro[]">
<label>Carro2</label><input type="text" name="carro[]">
<label>Carro3</label><input type="text" name="carro[]">


    $i = 0;
    while($i < count($_POST['carro'])){		
    
    $salvar = mysqli_query($link, "INSERT INTO carros (
    carro
    ) values (
    '".$_POST['carro'][$i]."'
    )");

    $i++;
    }

Grato.

2 respostas

Você pode utilizar transactions, normalmente a maioria dos drivers disponibilizam, e através do beginTransaction você inicia a transação e exeucta os inserts, após isso da o commit das inserções através do método commit.

Sugiro ler a documentação do php Mysqli sobre transactions.

Oii, Izaque e Rodrigo! Vocês estão bem?

Complementado a resposta do Izaque, compartilho outra forma. Podemos utilizar o foreach, pois queremos coletar informações que estão agrupadas em um array de HTML (name="carros[]"), para processar esses dados e inserir os valores no banco de dados.

Veja o exemplo a seguir:

foreach ($_POST['carro'] as $carro) {
    $query = "INSERT INTO carros (input) VALUES ('$carro')";
    $result = mysqli_query($link, $query);
    
    if (!$result) {
        throw new Exception("Erro na execução da consulta: " . mysqli_error($link));
    }
}

No exemplo acima, o foreach itera sobre o array $_POST['carro'] e, também, construímos uma consulta SQL dinamicamente para inserir cada valor na tabela carros, que tem o campo input como uma coluna.

Além disso, poderemos utilizar o while também, pois o seu código já estava no caminho certo para dar continuidade com ele. Porém, será um pouco mais custoso. Veja o exemplo:

$carros = $_POST['carro'];
$count = count($carros);
$i = 0;

while ($i < $count) {
    
    $query = "INSERT INTO carros (input) VALUES ('$carros[$i]')";
    $result = mysqli_query($link, $query);

    if (!$result) {
        throw new Exception("Erro na execução da consulta: " . mysqli_error($link));
    }

    $i++;
}

echo "Carros inseridos com sucesso!";

Por fim, recomendamos utilizar o foreach para estar dentro das boas práticas em programação e por ser menos complexo, mas fique à vontade para realizar os testes acima.

Espero ter ajudado. Qualquer dúvida, não hesite em abrir um novo tópico para podermos te ajudar.

Bons estudos!