quinta-feira, 21 de junho de 2012

Converter primeira letra em maiúsculo com PHP

Esta função mostra como converter as inicias de uma string para maiúscula. A função converte string com acento.

Veja:
<?php
    function __INIMASC($term) {
        $palavra = str_replace(" Da "," da ",strtr(ucwords(strtolower($term)),"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÜÚÞß","àáâãäåæçèéêëìíîïðñòóôõö÷øùüúþÿ"));
        $palavra = str_replace(" Do "," do ",$palavra);
        $palavra = str_replace(" De "," de ",$palavra);
        $palavra = str_replace(" Das "," das ",$palavra);
        return $palavra;
    }
?>
Exemplo:
<?php
$texto = "JOÃO DA SILVA SAURO";
echo __INIMASC($texto);
?>
 
O resultado será: João da Silva Sauro.
Espero que tenha gostado.

segunda-feira, 11 de junho de 2012

Gerar Mensalidades com PHP

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";
}