Insert multiple PHP PDO values

1

I want to insert multiple values into the table, for each reported parcel quantity. It's all right, it works, however .. I need every time the expiration 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 I add lines 25-26. What is the reason for this?

    
asked by anonymous 09.06.2017 / 06:05

1 answer

0

I was able to override the for loop by 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 I changed:

  $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 displaying the registration message successfully even though you are registering normal ...

    
09.06.2017 / 18:04