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!
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 .” “;
}
}
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
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
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
Olá Oliveira, o código foi atualizado, permitindo a gravação das parcelas no banco.
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
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!
como faz pra eu mostrar:
1 de 3 23/04/2015
2 de 3 23/05/2015
3 de 3 23/06/2015
Olá Betinho.
Supondo que você está usando a opção 2, altere a linha 23 para:
exibirData() é uma função que formata a data no padrão brasileiro.
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?
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!
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;
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:
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,
Se estiver usando a opção 1, troque as linhas 16, 17 e 18, pelo código abaixo:
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!
Olá Myller,
Fiz uma pequena alteração no for para atender a sua necessidade.
Espero ter ajudado.
Oi Tiago, obrigado pelo post, excelente.
Gostaria de saber como usar esta função no codeigniter. Você tem um exemplo?
Fala Luis.
Neste momento não tenho como te ajudar.
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?
Oi Tiago, obrigado pela sua atenção. Por acaso você tem o update utilizando esta mesma função?
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!