Add multiple record at once with foreach

Asked

Viewed 145 times

0

Good morning, how would I make this entry at once fill several tables? Mine is not working...

See my code:

// Atribui uma conexão PDO
$conexao = conexao::getInstance();

// Recebe os dados enviados pela submissão
$acao  = (isset($_POST['acao'])) ? $_POST['acao'] : '';
$id    = (isset($_POST['id'])) ? $_POST['id'] : '';
$recibo  = (isset($_POST['recibo'])) ? $_POST['recibo'] : '';
$data  = (isset($_POST['data'])) ? $_POST['data'] : '';
$registro  = (isset($_POST['registro'])) ? $_POST['registro'] : '';
$funcao  = (isset($_POST['funcao'])) ? $_POST['funcao'] : '';
$nome  = (isset($_POST['nome'])) ? $_POST['nome'] : '';
$dinheiro  = (isset($_POST['dinheiro'])) ? $_POST['dinheiro'] : '';
$seguro  = (isset($_POST['seguro'])) ? $_POST['seguro'] : '';
$outros  = (isset($_POST['outros'])) ? $_POST['outros'] : '';               

// Valida os dados recebidos
$mensagem = '';
if ($acao == 'editar' && $id == ''):
    $mensagem .= '<li>ID do registros desconhecido.</li>';
endif;

// Se for ação diferente de excluir valida os dados obrigatórios
if ($acao != 'excluir'):

    if ($mensagem != ''):
        $mensagem = '<ul>' . $mensagem . '</ul>';
        echo "<div class='alert alert-danger' role='alert'>".$mensagem."</div> ";
        exit;
    endif;

    // Constrói a data no formato ANSI yyyy/mm/dd
    //$data_temp = explode('/', $data_nascimento);
    //$data_ansi = $data_temp[2] . '/' . $data_temp[1] . '/' . $data_temp[0];
endif;

// Verifica se foi solicitada a inclusão de dados
if ($acao == 'incluir'):
    foreach($_POST["produto"] as $produto) {
        $sql = ("INSERT INTO financeiro (recibo, data, registro, funcao, nome, dinheiro, seguro, outros)
                         VALUES('.$produto.')") or die('Erro  query.<br>Mensagem do servidor: '.mysql_error());                  

        $stm = $conexao->prepare($sql);
        $stm->bindValue(':recibo', $recibo);
        $stm->bindValue(':data', $data);
        $stm->bindValue(':registro', $registro);
        $stm->bindValue(':funcao', $funcao);
        $stm->bindValue(':nome', $nome);
        $stm->bindValue(':dinheiro', $dinheiro);
        $stm->bindValue(':seguro', $seguro);
        $stm->bindValue(':outros', $outros);
        $retorno = $stm->execute();
    }
  • First of all, put the prepare out of the loop, otherwise it makes no sense. The advantage of using prepare is the query be reused (in mysqli. in PDO does not always work well so, depending on the case the prepare is half "donkey" pq is simulated)

  • Ideal is to generate the string in the loop $values .=$produto ."'),("; depois fora do loop retire os 3 últimos caracteres da string $values= substr($values,0,-3); e faça o insert de uma vez sóVALUES ($values)`

  • Excuse my ignorance, I’m beginner, I don’t understand how to do...

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.