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:
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.";
}
?>
Em PDO Seria Assim:
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:
<?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";
}