Insert multiple PHP PDO values

Asked

Viewed 227 times

0

I want to insert multiple values in the table, for each portion quantity informed. It’s all right, working though.. I need that every loop the due date has the month added up. The code below:

$response['status'] = "";
$response['html'] = "";
// Se não houver nenhum erro
if (!isset($error)) {
   // Redefinindo valor da variável $pago
   $pago = (!empty($pago)) ? "Sim" : "Não";

   $sql = "INSERT INTO despesas (valor_despesa, data_vencimento, pago, data_pagamento, importante, tipo_repeticao, parcelas, observacoes, id_usuario, id_tipo_despesa, id_tipo_pagamento) VALUES ";
   $insertQuery = array();
   $insertData = array();
   $n = 0;
   for ($x = 1; $x <= $parcelas; $x++) {
      $insertQuery[] = "(:valor_despesa".$n.", :data_vencimento".$n.", :pago".$n.", :data_pagamento".$n.", :importante".$n.", :tipo_repeticao".$n.", :parcelas".$n.", :observacoes".$n.", :id_usuario".$n.", :id_tipo_despesa".$n.", :id_tipo_pagamento".$n.")";
      $insertData["valor_despesa".$n]     = $valor_despesa;
      $insertData["data_vencimento".$n]   = $data_vencimento;
      $insertData["pago".$n]              = $pago;
      $insertData["data_pagamento".$n]    = $data_pagamento;
      $insertData["importante".$n]        = $importante;
      $insertData["tipo_repeticao".$n]    = $tipo_repeticao;
      $insertData["parcelas".$n]          = $parcelas;
      $insertData["observacoes".$n]       = $observacoes;
      $insertData["id_usuario".$n]        = $id_logado;
      $insertData["id_tipo_despesa".$n]   = $id_tipo_despesa;
      $insertData["id_tipo_pagamento".$n] = $id_tipo_pagamento;
      $data_vencimento = strtotime('+1 month', $data_vencimento);
      $data_vencimento = date( 'Y-m-j' , $data_vencimento);
      $n++;
   }

   try {
      $pdo = abrirConexao();
      if (!empty($insertQuery)) {
          $sql .= implode(", ", $insertQuery);
          $inserir = $pdo->prepare($sql);
          $inserir->execute($insertData);

          if($inserir) {
             // Mensagem de sucesso
             $response['html'] = "A despesa foi cadastrada com sucesso!";
          }
          $response['status'] = "success";
      }   
      // Fechar conexão
      $pdo = null;
   } catch (PDOException $e) {
      // Mensagem de erro
   }
} else {
   foreach($error as $erro) {
       $response['html'] .= $erro . "<br>";
   }
   $response['status'] = "error";
}
echo json_encode($response);

Errors are occurring when adding lines 25-26. What is this about?

  • 1

    What error is it? paste the message

  • I did an edit on my main post... the most complete code.. I did not put to return exceptions pq I am coding for JSON to return the message in the Ajax form call.

  • Take the error message code and send it to json. To get it do $inserir->errorInfo() you will need a print_r()

  • No result.. Would that be so? print_r($insert->errorInfo());

  • In that if if($inserir) { add an Else block this way: }else{ $msg = $inser->errorInfo(); $response['status'] = 'erro'; $response['html'] = $msg[2];}

  • No result yet... ajax is as follows: https://pastebin.com/Y9NiBVv7

  • and lines 25 and 26 are?

  • $data_vencimento = strtotime('+1 month', $data_vencimento);&#xA;$data_vencimento = date( 'Y-m-j' , $data_vencimento); I wanted to add one more month for each record.

  • See my answer below... I managed to insert, the date is changing for each record... however... the success message does not return.

Show 4 more comments

1 answer

0

I was able to replace the loop for while:

   while ($n < $parcelas) {
      $insertQuery[] = "(:valor_despesa".$n.", :data_vencimento".$n.", :pago".$n.", :data_pagamento".$n.", :importante".$n.", :tipo_repeticao".$n.", :parcelas".$n.", :observacoes".$n.", :id_usuario".$n.", :id_tipo_despesa".$n.", :id_tipo_pagamento".$n.")";
      $insertData["valor_despesa".$n]     = $valor_despesa;
      $insertData["data_vencimento".$n]   = $data_vencimento;
      $insertData["pago".$n]              = $pago;
      $insertData["data_pagamento".$n]    = $data_pagamento;
      $insertData["importante".$n]        = $importante;
      $insertData["tipo_repeticao".$n]    = $tipo_repeticao;
      $insertData["parcelas".$n]          = $parcelas;
      $insertData["observacoes".$n]       = $observacoes;
      $insertData["id_usuario".$n]        = $id_logado;
      $insertData["id_tipo_despesa".$n]   = $id_tipo_despesa;
      $insertData["id_tipo_pagamento".$n] = $id_tipo_pagamento;
      $data_vencimento = date("Y-m-d", strtotime("+1 month", strtotime($data_vencimento)));
      $n++;
   }

And altered:

  $data_vencimento = strtotime('+1 month', $data_vencimento);
  $data_vencimento = date( 'Y-m-j' , $data_vencimento);

To:

  $data_vencimento = date("Y-m-d", strtotime("+1 month", strtotime($data_vencimento)));

The problem now is that you are not successfully displaying the registration message despite being registering normal...

Browser other questions tagged

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