PHP: Gravando parcelas no MySQL

Em resposta a perguntas e comentários, vamos a mais um post aqui no linhadecomando.com.

Como gravar as datas geradas no banco de dados?

Lembrando que as datas foram geradas pela função disponibilizada aqui no blog – clique aqui para visualizar a função.

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!

15 comentários em “PHP: Gravando parcelas no MySQL

  • 28 de março de 2014 em 10:58
    Permalink

    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
  • 9 de setembro de 2014 em 15:47
    Permalink

    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
  • 9 de setembro de 2014 em 19:47
    Permalink

    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
  • 15 de setembro de 2014 em 0:23
    Permalink

    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
    • 16 de setembro de 2014 em 9:08
      Permalink

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

      Resposta
  • 6 de dezembro de 2014 em 3:15
    Permalink

    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
    • 8 de dezembro de 2014 em 8:36
      Permalink

      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
  • 23 de abril de 2015 em 20:29
    Permalink

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

    Resposta
    • 24 de abril de 2015 em 9:15
      Permalink

      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
  • 8 de setembro de 2015 em 11:13
    Permalink

    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
  • 8 de setembro de 2015 em 11:17
    Permalink

    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
  • 14 de outubro de 2015 em 13:35
    Permalink

    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
    • 14 de outubro de 2015 em 15:01
      Permalink

      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
  • 15 de outubro de 2015 em 10:33
    Permalink

    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
    • 15 de outubro de 2015 em 10:58
      Permalink

      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

Deixe uma resposta

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