Para quem estava interessado no exemplo para download, clique aqui, mas lembrando que está em PDO.
Este Script mostra como gerar parcelas para seu sistema. Por exemplo:
Este Script mostra como gerar parcelas para seu sistema. Por exemplo:
Um sistema de cadastro de aluno, onde o mesmo pagará 3 parcelas do seu curso,
1ª parcela | 01/05/2012 | R$ 50,00
2ª parcela | 01/06/2012 | R$ 50,00
3ª parcela | 01/07/2012 | R$ 50,00
[...] e assim por diante.
Confira o código abaixo, que salva os dados no banco de dados e também mostra o que foi gravado no banco em forma de tabela.
Crie uma tabela com o nome mensalidades e adicione os seguintes campos a ela
valor_mens(double), data_mens(date), num_mens(varchar)
<?php include "config.php"; //inclue seu arquivo de conexão com banco de dados $valor = 50; //Valor da parcela $parcelas = 10; //Número de parcelas $datapagamento1 = "2012-06-25"; //Data do primeiro pagamento $diavencimento = 10; //Dia de vencimento das parcelas $gravadata = $datapagamento1; echo '<table border="1">'; echo "<tr>"; echo "<td>Parcela</td>"; echo "<td>Vencimento</td>"; echo "</tr>"; for ($i = 1; $i <= $parcelas; $i++){ //Parcela $parcela = $i."a"; //grava o número da parcela assim: 1a, 2a, 3a, etc... echo "<tr>"; echo "<td>"; echo $parcela; echo "</td>"; //Vencimento echo "<td>"; echo $gravadata; echo "</td>"; echo "</tr>"; if (!empty($diavencimento)){ //Se o dia de vencimento não tiver em branco $dia = $diavencimento; //o dia será igual ao dia de vencimento }else{ $dia = date("d",strtotime($gravadata)); //se o dia de vencimento tiver em branco, então o dia será igual ao dia da data de vencimento } $mes = date("m",strtotime($gravadata)) + 1; $ano = date("Y",strtotime($gravadata)); $sql = mysql_query("INSERT INTO mensalidades (valor_mens, data_mens, num_mens) VALUES ('$valor', '$gravadata', '$parcela')"); if ($mes == 13) { //se passar do mês 12, então inicia com o mes 1 do próximo ano $mes = 1; $ano = $ano + 1; } if ($dia == 30 && $mes == 2){ //fevereiro não pode ter 30 dias não é. kkk $gravadata = $ano."-".$mes."-28"; }else{ $gravadata = $ano."-".$mes."-".$dia; } } echo "</table>"; if ($sql) { echo "Mensalidades inseridas com sucesso."; }else{ echo "Erro ao inserir mensalidades."; } ?>
1 - Crie uma pasta dentro da raiz do seu projeto com o nome "classes" e dentro dessa pasta crie um arquivo com o nome "BD.class.php". Segue código desse arquivo:
2 - Crie uma pasta chamado "config" dentro da raiz do seu projeto e dentro dessa pasta, inclua os seguintes arquivos "config.php, define.php e load.php", segue código de cada arquivo.
config.php
define.php
<?php class BD { private static $conn; private function __construct() { } public static function getConn() { try { if (is_null(self::$conn)) { self::$conn = new PDO(DSN, USER, PASS); } return self::$conn; } catch (Exception $e) { echo '<div class="alertErro">' . $e->getMessage() . '</div>'; } } }
2 - Crie uma pasta chamado "config" dentro da raiz do seu projeto e dentro dessa pasta, inclua os seguintes arquivos "config.php, define.php e load.php", segue código de cada arquivo.
config.php
<?php include ('config/define.php'); include ('config/load.php');
define.php
<?php define('HOST', 'localhost'); // Host define('USER', 'root'); // Usuário define('PASS', ''); //Senha define('BD', 'banco'); //Nome do banco de dados define('DSN', 'mysql:host=' . HOST . ';dbname=' . BD);
load.php
<?php function __autoload($classe) { $pagina = sprintf('classes/%s.class.php', $classe); if (file_exists($pagina)) { include ($pagina); } else { echo '<div class="AlertErro">Arquivo não existe</div>'; } }3 - E finalmente o código para gerar as parcelas e salvá-las no banco.
Este é o código SQL para criar a tabela.
CREATE TABLE `mensalidades` ( `id` int(5) NOT NULL AUTO_INCREMENT, `valor_mens` double DEFAULT NULL, `data_mens` date DEFAULT NULL, `num_mens` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;E para gerar as mensalidades use este código em qualquer arquivo dentro da sua pasta raiz.
<?php include "config/config.php"; //inclue seu arquivo de conexão com banco de dados $valor = $_POST['valor']; $parcelas = $_POST['parcelas']; $datapagamento1 = implode(!strstr($_POST['datapagamento1'], '/') ? "/" : "-", array_reverse(explode(!strstr($_POST['datapagamento1'], '/') ? "-" : "/", $_POST['datapagamento1']))); //Esta rotina é para converter a data do formato brasileiro para o americano $diavencimento = $_POST['vencimento']; $gravadata = $datapagamento1; $sql = "INSERT INTO mensalidades (valor_mens, data_mens, num_mens) VALUES "; echo '<table border="1">'; echo "<tr>"; echo "<td>Parcela</td>"; echo "<td>Valor</td>"; echo "<td>Vencimento</td>"; echo "</tr>"; for ($i = 1; $i <= $parcelas; $i++) { //Parcela $parcela = $i . "a"; //grava o número da parcela assim: 1a, 2a, 3a, etc... echo "<tr>"; echo "<td>"; echo $parcela; echo "</td>"; //Valor echo "<td>"; echo $valor; echo "</td>"; //Vencimento echo "<td>"; echo implode(!strstr($gravadata, '-') ? "-" : "/", array_reverse(explode(!strstr($gravadata, '-') ? "/" : "-", $gravadata))); //Muda para o formato brasileiro echo "</td>"; echo "</tr>"; if (!empty($diavencimento)) { //Se o dia de vencimento não tiver em branco $dia = $diavencimento; //o dia será igual ao dia de vencimento } else { $dia = date("d", strtotime($gravadata)); //se o dia de vencimento tiver em branco, então o dia será igual ao dia da data de vencimento } $mes = date("m", strtotime($gravadata)) + 1; $ano = date("Y", strtotime($gravadata)); $sql .= "(" . $valor . ", '" . $gravadata . "', '" . $parcela . "'),"; if ($mes == 13) { //se passar do mês 12, então inicia com o mes 1 do próximo ano $mes = 1; $ano = $ano + 1; } if ($dia == 30 && $mes == 2) { //fevereiro não pode ter 30 dias não é. kkk $gravadata = $ano . "-" . $mes . "-28"; } else { $gravadata = $ano . "-" . $mes . "-" . $dia; } } echo "</table>"; //Remove a última vírgula da string SQL $sql = substr($sql, 0, -1); //Salva no banco try { echo "<p>String SQL: $sql</p>"; $stmt = BD::getConn()->prepare($sql); if ($stmt->execute()): echo "Mensalidades inseridas com sucesso."; else: echo "Erro ao inserir!"; endif; } catch (Exception $e) { echo 'ERROR: ', $e->getMessage(), "\n"; }
muito bom. estava precisando desse codigo, e funcionando perfeitamente.
ResponderExcluirparabens
Mês de fevereiro não tá funcionando!
ResponderExcluirOlá André, não tá funcionando exatamente o que?
Excluirtem como zipar o arquivo completo e postar ?
ResponderExcluirAmigo estou atualizando os posts e a interface do blog, se quiser deixe seu email q mando o script e se preferir mando em PDO
ResponderExcluirmarcotuliomtb@hotmail.com, se tiver como mandar o arquivo zipado agradeco
ResponderExcluirSem problemas amigo, vou postar um novo post aqui mesmo em PDO, tudo bem? Vou fazer agora mesmo!
Excluirperfeito, belo trabalho com o fevereiro.
ResponderExcluirObrigado Hugo.
ExcluirAmigo teria como vc me enviar os arquivos do script.
Poderia enviar para meu e-mail: jrrocha@outlook.com.br
Desde Já te agradeço a atenção...
Obrigado!
Poderia mandar esse script para meu email: sistemacalango@gmail.com
ResponderExcluirValeu!!!
Agradeço Antecipadamente
Amigo você poderia também me enviar por favor wesleymendonca@outlook.com.
ResponderExcluirObrigado
Qual é o seu Email Walinson? O meu Banco ta gravando a Data no padrão americano.
ResponderExcluirKayo o mysql sempre salva a data no formato americado, esse é o correto. Agora se você tá passando uma data no formatado brasileiro, voce deve converte-la para o formato americano quando for fazer a inserção no banco. Para converter voce pode usar por exemplo: $dataus = date('Y-m-d',strtotime($suadataemptbr));
Excluirou também você pode usar: $dataus = join('-', array_reverse(explode('/', $suadataemptbr)));
wgwalisongomes@gmail.com
ResponderExcluirExcelente post! Fiz algumas alterações adaptando para as minhas necessidades e funcionou perfeitamente. Parabéns!!!
ResponderExcluirObrigado Marcio, esse post é bem antigo e certamente hoje teria soluções bem mais simples, mas fico feliz em saber que resolveu seu problema.
ExcluirBom dia tem como Manda no meu Email carloshenriquejr1987@hotmail.com script em mensalidade em pdo
ResponderExcluirOlá. Parabéns pelo belo trabalho.
ResponderExcluirSe ao invés de colocar vencimento fixo, eu desejasse informar um intervalo?
Tipo 30, 45 dias ou 7, 21, 35 dias?
Poderia dar um norte?