MySQLPHP

PHP: Gravando parcelas no MySQL

Como gravar as datas no banco de dados?

1º- criar base de dados e tabela para armazenar data e valor da parcela

CREATE DATABASE `parcelas` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
 
CREATE TABLE IF NOT EXISTS `cad_parcelas` (
  `id_parcelas` int(11) NOT NULL AUTO_INCREMENT,
  `nr_parcelas` int(11) NOT NULL,
  `data_vencimento_parcelas` date NOT NULL,
  `valor_parcelas` decimal(10,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`id_parcelas`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

2º- criar o arquivo conexao.php para conectar ao banco de dados

<?php
$DBNAME = "parcelas";
$USUARIO = "root";
$PASSWORD = "";
$SERVIDOR = "localhost";
 
if(!($id = mysql_connect($SERVIDOR,$USUARIO,$PASSWORD))) {
  echo "<p>Não foi possível estabelecer uma conexão com o gerenciador MySQL. Favor Contactar o Administrador.</p>";
  exit;
}
 
if(!($con=mysql_select_db($DBNAME,$id))) {
  echo " <p>Não foi possível estabelecer uma conexão com o gerenciador MySQL. Favor Contactar o Administrador.</p>";
  exit;
}
?>

3º- criar o arquivo index.php para chamada da função e inserção na base de dados
opção 1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
require_once("conexao.php");
 
function calcularParcelas($nParcelas, $dataPrimeiraParcela = null){
  if($dataPrimeiraParcela != null){
    $dataPrimeiraParcela = explode( "/",$dataPrimeiraParcela);
    $dia = $dataPrimeiraParcela[0];
    $mes = $dataPrimeiraParcela[1];
    $ano = $dataPrimeiraParcela[2];
  } else {
    $dia = date("d");
    $mes = date("m");
    $ano = date("Y");
  }
 
  for($x = 1; $x <= $nParcelas; $x++){
    $dt_parcelas[$x] = date("Y-m-d",strtotime("+".$x." month",mktime(0, 0, 0,$mes,$dia,$ano)));
  }//for
  foreach($dt_parcelas as $indice => $datas){
     $ins = "INSERT INTO cad_parcelas(
	nr_parcelas,
	data_vencimento_parcelas,
	valor_parcelas
     )VALUES(
	'$indice',
	'$datas',
	'1.99'
     )";
     $sucesso = mysql_query($ins);
     if ($sucesso){
       echo "Parcela [$indice]: ".$datas."<br/>";
     }else{
       die(mysql_error());
     }
  }//foreach
}//function
calcularParcelas(5, "31/08/2011");
?>

A função teve algumas alterações para funcionar o insert:
– alterado a formatação da data para o padrão do mysql “d/m/Y” para “Y-m-d“.
– utilização de um array ($dt_parcelas[]).
– uso do foreach para transportar o valor do array para uma variável ($datas).

opção 2:
Colaboração do Igor Botani Gonçalves.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
require_once("conexao.php");
 
function calcularParcelas($nParcelas, $dataPrimeiraParcela = null){
  if($dataPrimeiraParcela != null){
	$dataPrimeiraParcela = explode( "/",$dataPrimeiraParcela);
	$dia = $dataPrimeiraParcela[0];
	$mes = $dataPrimeiraParcela[1];
	$ano = $dataPrimeiraParcela[2];
  } else {
	$dia = date("d");
	$mes = date("m");
	$ano = date("Y");
  }
 
  for($x = 1; $x <= $nParcelas; $x++){
    $dataVencParcela = date("Y-m-d",strtotime("+".$x." month",mktime(0, 0, 0,$mes,$dia,$ano)));
 
    if(mysql_query("INSERT INTO cad_parcelas
    	(nr_parcelas,data_vencimento_parcelas,valor_parcelas) 
      	VALUES ('".$x."','".$dataVencParcela."','1.99')"))
    {
	echo "Parcela [".$x."]: ".$dataVencParcela."<br/>";
    } else {
	die("Erro ao inserir a parcela ".$x.": ".mysql_error());
    }
  }//for
}//function
calcularParcelas(5, "31/08/2011");
?>

Até a próxima!

22 thoughts on “PHP: Gravando parcelas no MySQL

  • Caio

    if ($parcelasqtd>1){
    if($dataprazo!=null){

    $dataprazo = explode( “-“,$dataprazo);
    $ano = $dataprazo[0];
    $mes = $dataprazo[1];
    $dia = $dataprazo[2];

    }
    for($x=0;$x $datas){
    echo $datas .” “;
    }
    }

    Resposta
  • Oliveira

    Agradeço pelas informações. Eu procurei muito na internet até chegar aqui. O que seria de nós que sabemos menos se não fosse a ajuda de vocês que sabem mais? Que Deus pague. Meu muito obrigado

    Resposta
  • Oliveira

    Eu não estava conseguindo gravar a valor da variavel no banco, mas agora eu vejo que a variavel deve estar dentro da função.
    Grato

    Resposta
  • oliveira

    Companheiro, e seu quiser inserir num campo da tabela o número da parcela, tipo:
    São 5 parcelas
    inserir de 1 a 5 para ao respectivos vencimentos
    Como eu faço?
    Grto

    Resposta
    • Olá Oliveira, o código foi atualizado, permitindo a gravação das parcelas no banco.

      Resposta
  • Ramon Pereira Arruda

    Como faço para inserir as datas de vencimento e os números das parcelas ao mesmo tempo?
    Por exemplo:
    1 25/11/2014
    2 25/12/2014
    3 25/01/2015

    Resposta
    • Olá Ramon.

      Se você optou por usar a opção 2 do post, o insert não estava inserindo o nr. de parcelas.

      Problema resolvido!

      Resposta
  • Betinho Silva

    como faz pra eu mostrar:
    1 de 3 23/04/2015
    2 de 3 23/05/2015
    3 de 3 23/06/2015

    Resposta
    • Olá Betinho.

      Supondo que você está usando a opção 2, altere a linha 23 para:

      echo $indice." de ". $nParcelas." ".exibirData($datas)."<br/>";

      exibirData() é uma função que formata a data no padrão brasileiro.

      Resposta
  • Thiago Mauricio

    Olá, estou passando no formulário as informações para gerar as parcelas e salvar no banco, porém quando chega na hora de informar o número de parcelas em calcularParcelas(5, “31/08/2011”);

    Não consigo passar o total de parcelas através de variavel: calcularParcelas($numero_parcelas, date(“”.$vencimento_parcela.”/m/Y”));

    Somente o dia, o que deveria ser feito?

    Resposta
  • Thiago Mauricio

    Favor desconsiderar a dúvida acima, eu utilizei a variável errada, uma que estava dentro do for, por isso não funcionava.

    Abraço, excelente função!

    Resposta
  • Marcos Cutrim

    boa tarde. to tentando usar aqui. mais como fica para gerar da data inicial q eu informar ? por exemplo :01/01/2016 ele gera:
    Parcela [1]: 2016-02-01
    Parcela [2]: 2016-03-01
    Parcela [3]: 2016-04-01
    Parcela [4]: 2016-05-01
    Parcela [5]: 2016-06-01
    Parcela [6]: 2016-07-01
    Parcela [7]: 2016-08-01
    Parcela [8]: 2016-09-01
    Parcela [9]: 2016-10-01
    Parcela [10]: 2016-11-01
    Parcela [11]: 2016-12-01
    Parcela [12]: 2017-01-01
    e o mes 01 e gerar mesmo assim as 12 parcelas comecando do mes 01?
    obrigado;

    Resposta
    • Olá Marcos.

      Para incluir o mês no resultado, basta trocar na linha 16 o valor inicial da variável $x, de 1 para 0.

      Veja como deve ficar:

      for($x = 0; $x <= $nParcelas; $x++){
      Resposta
  • Marcos Cutrim

    bom dia, Tiago.
    já tinha feito essa alteracao e nao fiz o devido comentario. desculpe. mais ele cria as parcelas apartir de 0 (zero) e nao de 1 (Hum).
    obrigado,

    Resposta
    • Se estiver usando a opção 1, troque as linhas 16, 17 e 18, pelo código abaixo:

      $j = 1;
      for($x = 0; $x < $nParcelas; $x++){
        if($x == 0){
           $dt_parcelas[$j] = $ano."-".$mes."-".$dia;
        }else {
           $dt_parcelas[$j] = date("Y-m-d", strtotime("+" . $x . " month", mktime(0, 0, 0, $mes, $dia, $ano)));
        }
        $j++;
      }//for
      Resposta
      • Myller Meireles

        Olá Tiago,

        Está show esse código. Parabéns!

        Para fechar os meus 100% dele, como fazer para que a data da primeira parcela, seja a data do início do contrato, por exemplo: se eu tenho um contrato iniciando em 12/04/2020, a 1º parcela deve ser no mês e ano respectivo (04/2020), sacou?

        Grato!

        Resposta
        • Olá Myller,

          Fiz uma pequena alteração no for para atender a sua necessidade.

          for($x = 1; $x <= $nParcelas; $x++){
                  if ($dataPrimeiraParcela && $x == 1) {
                      $dt_parcelas[$x] = $ano . '-' . $mes . '-' . $dia;
                  } else {
                      $dt_parcelas[$x] = date("Y-m-d", strtotime("+" . ($x-1) . " month", mktime(0, 0, 0, $mes, $dia, $ano)));
                  }
              }//for

          Espero ter ajudado.

          Resposta
  • Luis Carlos Martins

    Oi Tiago, obrigado pelo post, excelente.
    Gostaria de saber como usar esta função no codeigniter. Você tem um exemplo?

    Resposta
      • Luis Carlos Martins

        Oi Tiago, obrigado pela sua atenção. Fiz o insert conforme seu post e está funcionando. Por acaso você tem o update utilizando esta mesma função?

        Resposta
  • Luis Carlos Martins

    Oi Tiago, obrigado pela sua atenção. Por acaso você tem o update utilizando esta mesma função?

    Resposta
    • Fala Luis,

      Para que o update aconteça será necessário enviar o id da parcela.
      ex:

      "UPDATE cad_parcelas
      SET nr_parcelas = '$indice',
      data_vencimento_parcelas = '$datas',
      valor_parcelas = '1.99'
      WHERE id_parcelas = '$id_parcela'"

      Caso todas as parcelas sejam alteradas, tanto o nr. de parcelas quanto o valor, você deverá fazer um delete primeiro e depois um insert.

      Espero ter ajudado!

      Resposta

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *