sexta-feira, 24 de junho de 2011

Mostrando data completa em php

Olá pessoal, uma coisa bem simples pra hoje. Simplesmente porque acabei de fazer essa função pra informar o dia da semana, o dia do mês, o mês e o ano.

<?php

function data() {
$semana = date(N); //pegando o dia da semana de 1-7
$dia = date(d); //o dia
$mes = date(m); //mes 01 - 12
$ano = date(Y); // ano 0000

//substituir o numero pelo nome
switch($mes) {
case 01: $mes = "Janeiro"; break;
case 02: $mes = "Fevereiro"; break;
case 03: $mes = "Março"; break;
case 04: $mes = "Abril"; break;
case 05: $mes = "Maio"; break;
case 06: $mes = "Junho"; break;
case 07: $mes = "Julho"; break;
case 08: $mes = "Agosto"; break;
case 09: $mes = "Setembro"; break;
case 10: $mes = "Outubro"; break;
case 11: $mes = "Novembro"; break;
case 12: $mes = "Dezembro"; break;
}

//substituir o numero pelo nome
switch($semana) {
case 1: $semana = "Segunda-feira"; break;
case 2: $semana = "Terça-feira"; break;
case 3: $semana = "Quarta-feira"; break;
case 4: $semana = "Quinta-feira"; break;
case 5: $semana = "Sexta-feira"; break;
case 6: $semana = "Sabado-feira"; break;
case 7: $semana = "Domingo-feira"; break;

}

//mostrar o resultado
echo $semana.", ".$dia." de ".$mes." de ".$ano;
}
?>



E é isso ai, rápido, simples e indolor.Qualquer coisa é só comenta ai, até mais.

quinta-feira, 2 de junho de 2011

Algumas boas praticas do uso do MySQL



Algumas boas praticas do uso do MySQL

Operações de banco de dados tendem a ser o principal gargalo para a maioria das aplicações web hoje em dia. Não são apenas os administradores de banco de dados que têm de se preocupar com esses problemas de desempenho. Nós, como programadores precisamos fazer a nossa parte, estruturando as tabelas corretamente e escrevendo consultas mais otimizadas . Aqui estão algumas técnicas de otimização do MySQL para programadores.

1- Use LIMIT 1 quando a query retornar apenas um resultado.

Às vezes, quando você estiver consultando suas tabelas, você já sabe que você está procurando apenas uma linha. Você pode estar buscando um registro único, ou você pode apenas ser apenas verificando a existência de qualquer número de registros que satisfaçam a cláusula WHERE.
Em tais casos, adicionando o limite de 1 a sua consulta pode aumentar o desempenho. Desta forma, o mecanismo de banco vai parar a verificação de registros depois que encontrar apenas um, em vez de atravessar toda a tabela ou índice.


 
// Existe algum usuário do estado de SP?
 

// de uma maneira mais lenta:
$r = mysql_query("SELECT * FROM usuarios WHERE estado = 'SP'");
if (mysql_num_rows($r) > 0) {
    // ...
}

// um modo melhor:
$r = mysql_query("SELECT 1 FROM user WHERE state = 'Alabama' LIMIT 1");
if (mysql_num_rows($r) > 0) {
    // ...
}


2- Não use ORDER BY RAND().

Este é um daqueles truques que parecem legais de começo, e muitos programadores novatos caem nessa armadilha. Você pode não perceber que tipo de gargalo terrível você pode criar uma vez que você começar a usar isso em suas consultas.
Se você realmente precisa de linhas aleatórias de seus resultados, há maneiras muito melhores de fazer isso. Apenas com um pouco de código adicional resolvemos isso.Dessa forma evitando um gargalo que exponencialmente fica pior conforme seu banco de dados cresce. O problema é que o MySQL tem de executar a
operação RAND() para cada linha da tabela antes de classificá-la e retornar o resultado.

// O que é melhor evitar:
$r = mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1");
// O que é melhor usar:
$r = mysql_query("SELECT count(*) FROM user");
$d = mysql_fetch_row($r);
$rand = mt_rand(0,$d[0] - 1);

$r = mysql_query("SELECT username FROM user LIMIT $rand, 1");





Portanto, você escolhe um número aleatório menor do que o número de resultados e usa isso como o deslocamento em sua cláusula LIMIT.

3- Evite SELECT *.

Quanto mais dados são lidos a partir das tabelas, mais lenta se tornará a consulta.Além disso, quando o servidor de banco de dados é separado do servidor web, você terá mais atrasos devido à rede de dados que têm de ser transferidas entre os servidores.
É um bom hábito sempre especificar as colunas que você precisa quando você está fazendo o seu SELECT.


// não recomendado:
$r = mysql_query("SELECT * FROM user WHERE user_id = 1");
$d = mysql_fetch_assoc($r);
echo "Welcome {$d['username']}";

// recomendado:
$r = mysql_query("SELECT username FROM user WHERE user_id = 1");
$d = mysql_fetch_assoc($r);
echo "Welcome {$d['username']}";

/* as diferenças são mais significantes com consultas que retornam um grande número de resultados */


4- Prepared Statements.

Querys preparadas servem para filtrar as variáveis ​​que se ligam a ela, o que é ótimo para proteger seu aplicativo contra ataques de injeção SQL. Você pode, obviamente, filtrar as variáveis ​​manualmente também, mas esses métodos são mais propensos a erros humanos e esquecimento pelo programador. Este é um problema menor quando se utiliza algum tipo de quadro ou ORM.

Como nosso foco está no desempenho, eu deveria também mencionar os benefícios nessa área. Estes benefícios são mais significativas quando a mesma consulta está usando várias vezes em sua aplicação. Você pode atribuir valores diferentes para a mesma declaração preparada, mas o MySQL só terá que analisá-lo uma vez.

Também as últimas versões do MySQL transmitem instruções preparadas em forma binária nativa, que são mais eficientes e também podem ajudar a reduzir os atrasos de rede.

Houve uma época em que muitos programadores costumavam evitar declarações preparadas de propósito, por uma única razão importante. Eles não estavam sendo armazenados em cache pelo cache de consultas do MySQL. Mas, desde por volta da versão 5.1, o cache de consulta é suportada também.

Para utilizar comandos preparados em PHP você pode conferir a extensão mysqli ou usar uma camada de abstração de dados como PDO.


// criando o prepared statement
if ($stmt = $mysqli->prepare("SELECT username FROM user WHERE state=?")) {

    // parametros
    $stmt->bind_param("s", $state);

    // executa query
    $stmt->execute();
   
    $stmt->bind_result($username);

    $stmt->fetch();

    printf("%s is from %s\n", $username, $state);

    $stmt->close();
}


5- Cuidado com Persistent Connections.

Conexões persistentes são destinadas a reduzir a sobrecarga de recriar conexões ao MySQL. Quando uma conexão persistente é criada, ela permanecerá aberta mesmo depois que o script terminar de ser executado. Uma vez que o Apache reutiliza os processos filhos, da próxima vez que o processo for executado por um novo script, ele irá reutilizar a mesma conexão com o MySQL .

mysql_pconnect () em PHP

Parece ótimo na teoria. Mas pela minha experiência pessoal (e muitos outros), este recurso acaba por não valer a pena. Você pode ter sérios problemas com limites de conexão, problemas de memória e assim por diante.

O Apache é executado muito paralelas, e cria muitos processos filhos. Este é o principal motivo que as conexões persistentes não funcionam muito bem neste ambiente. Antes de você pensar em usar a função mysql_pconnect (), consulte o seu administrador do sistema.




E é isso ai, até a próxima.

domingo, 29 de maio de 2011

Light box apenas com CSS



LIGHT BOX SEM JS, APENAS COM CSS

Neste experimento, clicando em um link de 'abrir' aparece um light box,  assim deixando todos os outros elementos da página não são clicáveis​​. Ao fechar o modal também tem animação, com um efeito de minimizar.
 É claro que, usando imagens e JS você terá um resultado com mais opções algo como apertar ESC para fechar nunca será reproduzida em CSS. Puro CSS raramente é a melhor solução pronta para produção, mesmo assim é sempre bom apliarmos nossos conhecimento em CSS.
Observação: Use um navegador atual.

Como fazer

Esse é o CSS necessário para que tudo aconteça:

a:link, a:visited {
 text-decoration: none;
 color: #000000;
 }
a:hover {
 text-decoration: underline; 
 color: #000000;
 }
a:active {
 text-decoration: none;
 color: #000000;
 }

.modal {

/* sobrepor conteúdo da página */
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.5);
z-index: 10000;

/* Efeito de opacidade ao abrir */
-webkit-transition: opacity 500ms ease-in;
-moz-transition: opacity 500ms ease-in;
transition: opacity 500ms ease-in;

/* esconder */
opacity: 0;
pointer-events: none;
}

/* mostrar */
.modal:target {
opacity: 1;
pointer-events: auto;
}

/* conteúdo */
.modal > div {
width: 500px;
background: #fff;
position: relative;
margin: 10% auto;

/* Padrão de animação */
-webkit-animation: minimise 500ms linear;

/* Embelezando */
padding: 30px;
-moz-border-radius: 7px;
border-radius: 7px;
-webkit-box-shadow: 0 3px 20px rgba(0,0,0,0.9);
-moz-box-shadow: 0 3px 20px rgba(0,0,0,0.9);
box-shadow: 0 3px 20px rgba(0,0,0,0.9);
background: -moz-linear-gradient(#fff, #ccc);
background: -webkit-gradient(linear, right bottom, right top, 
color-stop(1, rgb(255,255,255)), color-stop(0.57, rgb(230,230,230)));
text-shadow: 0 1px 0 #fff;
}

/* Substituir animação na abertura */
.modal:target > div {
-webkit-animation-name: bounce;
}

.modal h2 {
font-size: 36px;
padding: 0 0 20px;
}

@-webkit-keyframes bounce {
  0% {
   -webkit-transform: scale3d(0.1,0.1,1);
   -webkit-box-shadow: 0 3px 20px rgba(0,0,0,0.9);
  }
  55% {
   -webkit-transform: scale3d(1.08,1.08,1);
   -webkit-box-shadow: 0 10px 20px rgba(0,0,0,0);
  }
  75% {
   -webkit-transform: scale3d(0.95,0.95,1);
   -webkit-box-shadow: 0 0 20px rgba(0,0,0,0.9);
  }
  100% {
   -webkit-transform: scale3d(1,1,1);
   -webkit-box-shadow: 0 3px 20px rgba(0,0,0,0.9);
  }
}

@-webkit-keyframes minimise {
  0% {
   -webkit-transform: scale3d(1,1,1);
  }
  100% {
   -webkit-transform: scale3d(0.1,0.1,1);
  }
}

/* link para fechar */
.modal a[href="#close"] {
position: absolute;
right: 0;
top: 0;
color: transparent;
}

/* restaura estilos */
.modal a[href="#close"]:focus {
outline: none;
}

/* Cria botão fechar */
.modal a[href="#close"]:after {
content: 'X';
display: block;

/* Posição */
position: absolute;
right: -10px;
top: -10px;
width: 1.5em;
padding: 1px 1px 1px 2px;

/* Estilo */
text-decoration: none;
text-shadow: none;
text-align: center;
font-weight: bold;
background: #000;
color: #fff;
border: 3px solid #fff;
-moz-border-radius: 20px;
border-radius: 20px;
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.5);
-moz-box-shadow: 0 1px 3px rgba(0,0,0,0.5);
box-shadow: 0 1px 3px rgba(0,0,0,0.5);
}

.modal a[href="#close"]:focus:after,
.modal a[href="#close"]:hover:after {
-webkit-transform: scale(1.1,1.1);
-moz-transform: scale(1.1,1.1);
}

.modal a[href="#close"]:focus:after {
outline: 1px solid #000;
}

/* Abrir modal */
a.openModal {
margin: 1em auto;
display: block;
width: 200px;
background: #ccc;
text-align: center;
padding: 10px;
-moz-border-radius: 7px;
border-radius: 7px;
background: -moz-linear-gradient(#fff, #ddd);
background: -webkit-gradient(linear, right top, right bottom,
 from(rgb(255,255,255)), to(rgb(230,230,230)));
text-shadow: 0 1px 0 #fff;
border: 1px solid rgba(0,0,0,0.1);
-webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.3);
-moz-box-shadow: 0 1px 1px rgba(0,0,0,0.3);
box-shadow: 0 1px 1px rgba(0,0,0,0.3);
}

a.openModal:hover,
a.openModal:focus {
background: -moz-linear-gradient(#fff, #ccc);
background: -webkit-gradient(linear, right top, right bottom,
 from(rgb(255,255,255)), to(rgb(200,200,200)));
}
 

Aqui está um HTML simples apenas para uma demonstração simples:

<!DOCTYPE html>
<html dir="ltr" lang="en-US" id="paulrhayes-com" class="noJs">
<head>
 <meta charset="UTF-8" />
 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 <title></title>
 <link rel="stylesheet" type="text/css" href="estilo.css" />
</head>
<body class="experiment">
<div id="wrapper">

 <a href="#example" class="openModal">Abrir modal</a>
 <a href="#example2" class="openModal">Abrir outro modal</a>
 <aside id="example" class="modal">
  <div>
   <h2>Modal box</h2>
   <p>
    Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, 
Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1, Teste1.
   </p>

   <a href="#close" title="Fechar">Fechar</a>
  </div>
 </aside>
 <aside id="example2" class="modal">
  <div>
   <h2>Outro modal box</h2>
   <p>Teste2, Teste2, Teste2, Teste2, Teste2, Teste2, Teste2, Teste2, Teste2,
 Teste2, Teste2, Teste2, Teste2, Teste2, Teste2, Teste2, Teste2, Teste2, Teste2,
 Teste2 , Teste2, Teste2, Teste2, Teste2, Teste2,
 Teste2, Teste2, Teste2, Teste2, Teste2, Teste2, Teste2.</p>

   <a href="#close" title="Fechar">Fechar</a>
  </div>
 </aside>
 </div>
</body>
</html>
 
Baixar arquivos do artigo 
 
É isso ai galera, simples e claro.
Aparentemente esse CSS pode assustar um pouco mas analisando bem não fica difícil.
Até a próxima.

sexta-feira, 27 de maio de 2011

Algumas funções úteis em php

Mesmo depois de utilizar o PHP por anos, nos deparamos com funções e características que nós não conhecemos. Algumas destas podem ser bastante úteis, mas não devidamente aproveitadas. Com isso em mente, eu compilei uma lista com algumas funções extremamente úteis do PHP e recursos que você deve ficar familiarizado.


1- Função sem parâmetros

Você já deve saber que o PHP permite que você defina as funções com parâmetros opcionais. Mas também um método para permitir um número qualquer de parâmetros.Vamos utilizar func_get_args ():


1-funcao_sem_parametros.php:
<?php
// FUNÇAO SEM PARAMETROS
function foo() {

    // retorna um array de todos os parametros passados
    $args = func_get_args();

    foreach ($args as $k => $v) {
        echo "arg".($k+1).": $v\n"."<br />";
    }

}

foo();
/* nao mostra nada */

foo('Olá');
/* mostra
arg1: Olá
*/

foo('Olá', 'mundo', 'mais uma vez');
/* mostra
arg1: Olá
arg2: mundo
arg3: mais uma vez
*/
?>


2-  Usando Glob() para encontrar arquivos

Muitas funções PHP têm nomes longos e descritivos. No entanto, pode ser difícil dizer o que é uma função chamada glob ()  faz a menos que você já esteja familiarizado com esse termo de outro lugar.
Pense nisso como uma versão mais capaz da
função scandir (). Permite que você pesquise arquivos usando padrões:

2-usando_glob.php
<?php
//USANDO GLOB() PARA ENCONTRAR ARQUIVOS
// pega todos os arquivos .php da pasta atual
$arquivos = glob('*.php');

print_r($arquivos);
/* mostra todos os arquivos em um array:
Array
(
    [0] => teste.php
    [1] => teste2.php
    [2] => teste3.php   
)
*/

echo "<br /><br />";

$caminho = array_map('realpath',$arquivos); 

print_r($caminho);
/* mostra todos os caminhos de todos os arquivos em um array:
Array
(
    [0] => C:\wamp\www\teste.php
    [1] => C:\wamp\www\teste2.php
)
*/

?>


3- Informções sobre o uso de memória

Ao observar o uso de memória de seus scripts, você poderá otimizar o seu código melhor.
O PHP tem um gerenciador de memória muito complexo. A quantidade de memória que está sendo usada pelo seu script pode ir para cima e para baixo durante a execução de um script. Para obter o atual uso de memória, podemos usar o memory_get_usage () função, e para obter a maior quantidade de memória usada em qualquer ponto, podemos usar o memory_get_peak_usage () função:



3-uso_de_memoria.php:
<?php
//INFORMAÇÕES SOBRE O USO DE MEMÓRIA
echo "Inicial: ".memory_get_usage()." bytes \n"."<br />";
/* mostra
Inicial: 361400 bytes
*/

// Vamos usar um pouco de memória
for ($i = 0; $i < 100000; $i++) {
    $array []= md5($i);
}

// vamos remover metade do array
for ($i = 0; $i < 100000; $i++) {
    unset($array[$i]);
}

echo "Final: ".memory_get_usage()." bytes \n"."<br />";
/* mostra
Final: 885912 bytes
*/

echo "Pico: ".memory_get_peak_usage()." bytes \n"."<br />";
/* mostra
Pico: 13687072 bytes
*/

?>


4- Um pouco de constantes

O PHP fornece constantes úteis para buscar o número da linha atual (__LINE__), caminho do arquivo (__FILE__), caminho do diretório (__DIR__), nome da função (__FUNCTION__), nome da classe (__CLASS__), nome do método (__METHOD__) e espaço (__NAMESPACE__).

Nós não abordaremos cada uma dessas neste artigo, mas vou mostrar-lhe alguns casos de uso:

4-constantes.php:
<?php
//CONSTANTES
// algum código
// ...

echo "Caminho desse arquivo: ".__FILE__."<br /><br />";

function debugando($mensagem, $linha) {
    echo "Linha $linha: $mensagem\n"."<br /><br />";
}

debugando("mensagem de debug", __LINE__);
/* mostra
Linha 4: mensagem de debug
*/

// mais algum código
// ...
debugando("outra mensagem de debug", __LINE__);
/* mostra
Linha 11: mensagem de debug
*/

?>


5- Gerando IDs únicos


Pode haver situações onde você precisa gerar uma cadeia exclusiva. Muitas pessoas usam a função md5 () para isso, mesmo que ela não seja exatamente para essa finalidade.
realmente uma função do PHP chamada uniqid () que se destina a ser usada para isso.
Você pode notar que, apesar dos resultados únicos, eles possuem os primeiros caracteres semelhantes. Isso ocorre porque a seqüência gerada está relacionada ao tempo do servidor. Isso realmente tem um bom efeito colateral, como todo novo id gerado vem depois em ordem alfabética, para que eles possam ser classificados.
Para reduzir as chances de obter uma segunda via, você pode passar um prefixo, ou o segundo parâmetro para aumento de entropia:

5-gerar_id.php:
<?php
//GERANDO IDs ÚNICOS
// gerar string unica
echo "Gerar string unica: ".md5(time() . mt_rand(1,1000000))."<br /><br />";

// gerar string unica
echo "Gerar string unica: ".uniqid()."<br /><br />";
/* mostra
4bd67c947233e
*/

// com prefixo
echo "Com prefixo: ".uniqid('prefixo_')."<br /><br />";;
/* mostra
foo_4bd67d6cd8b8f
*/

// com mais entropia
echo "Com mais entropia: ".uniqid('',true)."<br /><br />";
/* mostra
4bd67d6cd8b926.12135106
*/

// ambos
echo "Ambos: ".uniqid('prefixooo_',true)."<br /><br />";
/* mostra
bar_4bd67da367b650.43684647
*/
?>

 

6- Comprimindo Strings

Quando se fala de compressão, geralmente pensamos sobre os arquivos, como arquivos ZIP. É possível comprimir longas seqüências em PHP, sem envolver qualquer arquivo desse tipo.
No exemplo a seguir vamos utilizar as
funções gzcompress () e gzuncompress ().
Assim conseguiremos alcançar uma redução de quase 50% do tamanho. Com as
funções gzencode() e gzdecode() também é possível conseguir resultados semelhantes, usando um algoritmo de compressão diferente:

6-comprimindo_string.php:
<?php
// COMPRIMIR STRING
$string =
"Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nunc ut elit id mi ultricies
adipiscing. Nulla facilisi. Praesent pulvinar,
sapien vel feugiat vestibulum, nulla dui pretium orci,
non ultricies elit lacus quis ante. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Aliquam
pretium ullamcorper urna quis iaculis. Etiam ac massa
sed turpis tempor luctus. Curabitur sed nibh eu elit
mollis congue. Praesent ipsum diam, consectetur vitae
ornare a, aliquam a nunc. In id magna pellentesque
tellus posuere adipiscing. Sed non mi metus, at lacinia
augue. Sed magna nisi, ornare in mollis in, mollis
sed nunc. Etiam at justo in leo congue mollis.
Nullam in neque eget metus hendrerit scelerisque
eu non enim. Ut malesuada lacus eu nulla bibendum
id euismod urna sodales. ";

$comprimido = gzcompress($string);

echo "Tamanho original : ". strlen($string)."\n"."<br /><br />";
/* mostra
Tamanho original: 794
*/

echo "Tamanho comprimido: ". strlen($comprimido)."\n"."<br /><br />";
/* mostra
Tamanho comprimido: 415
*/

// descomprimindo
$original = gzuncompress($comprimido);

?>


Baixar arquivos do artigo

Esse artigo foi útil para você? Por favor, compartilhe conosco nos comentários. E obrigado pela leitura!
See you later guys!

CRUD COMPETO EM PHP E MYSQL

CRUD COMPETO COM PHP E MYSQL



Em 1º lugar vamos a uma breve descrição de o que é CRUD:

CRUD é o acrônimo ("sigla") da expressão em língua Inglesa Create, Retrieve, Update e Delete, usada para definir quatro operações básicas usadas em bancos de dados.

A abreviação CRUD mapeada para o padrão ISO/SQL:
Create INSERT
Retrieve (Read) SELECT
Update UPDATE
Destroy (Delete) DELETE


As operações CRUD também são relevantes em interfaces para usuários de vários níveis. Por exemplo, em um programa de Catálogo de Endereços, uma entrada de um contato individual pode ser considerada a unidade básica de persistência. As operações mínimas para este tipo de programa são:

Create Criar ou adicionar novas entradas
Retrieve (Read) Ler, recuperar ou ver entradas existentes
Update Atualizar ou editar entradas existentes
Destroy (Delete) Remover entradas existentes

Bom, agora que todos já sabem o conceito de CRUD, vamos colocá-lo em prática.

Em nosso tutorial, vamos usar como exemplo um cadastro de produtos.

Sem mais blá-blá-blá e mãos a obra...


CRIANDO O BANCO DE DADOS


Um script simples para criação do banco 'Crud' com a tabela 'produto' que tem apenas 2 campos: nome e descrição.



CREATE DATABASE IF NOT EXISTS crud;
USE crud;

DROP TABLE IF EXISTS `produto`;
CREATE TABLE `produto` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nome` varchar(45) NOT NULL,
  `descricao` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;







ESTABELECENDO CONEXÃO COM O BANCO DE DADOS

Crie uma pasta chamada 'config' dentro de seu projeto , nessa pasta iram os arquivos de configuração do nosso projeto.Nessa mesma pasta criaremos o 'conexao.class.php' para a conexão com o banco de dados.


conexao.class.php:
<?php

class conexao
{

    /*
        Altere as variaveis a seguir caso necessario
    */

    private $db_host = 'localhost'; // servidor
    private $db_user = 'root'; // usuario do banco
    private $db_pass = ''; // senha do usuario do banco
    private $db_name = 'crud'; // nome do banco

    private $con = false;

 
    public function connect() // estabelece conexao
    {
        if(!$this->con)
        {
            $myconn = @mysql_connect($this->db_host,$this->db_user,$this->db_pass);
            if($myconn)
            {
                $seldb = @mysql_select_db($this->db_name,$myconn);
                if($seldb)
                {
                    $this->con = true;
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
        else
        {
            return true;
        }
    }

 
    public function disconnect() // fecha conexao
    {
    if($this->con)
    {
        if(@mysql_close())
        {
                        $this->con = false;
            return true;
        }
        else
        {
            return false;
        }
    }
    }
    
}

?>


Com essa simples classe podemos efetuar conexão com o banco de dados, agora podemos partir para o próximo passo.


PREPARANDO AS OPERAÇÕES BÁSICAS DE ACESSO AO BANCO DE DADOS


Vamos criar mais uma classe que servira para algumas operações de nosso sistema CRUD , o crud.class.php.


crud.class.php:
<?php

/** Classe CRUD - Create, Recovery, Update and Delete
  * @author - Rodolfo Leonardo Medeiros
  * @date - 25/09/2009
  * Arquivo - codigo.class.php
  * @package crud
  */
 
  class crud
  {
    private $sql_ins="";
    private $tabela="";
    private $sql_sel="";

    // Caso pretendamos que esta classe seja herdada por outras, então alguns atrubutos podem ser protected

    /** Método construtor
      * @method __construct
      * @param string $tabela
      * @return $this->tabela
      */            
      public function __construct($tabela) // construtor, nome da tabela como parametro
      {
          $this->tabela = $tabela;
        return $this->tabela;
    }
        
    /** Método inserir
      * @method inserir
      * @param string $campos
      * @param string $valores
      * @example: $campos = "codigo, nome, email" e $valores = "1, 'João Brito', 'joao@joao.net'"
      * @return void
      */        
    public function inserir($campos, $valores) // funçao de inserçao, campos e seus respectivos valores como parametros
    {
        $this->sql_ins = "INSERT INTO " . $this->tabela . " ($campos) VALUES ($valores)";
        if(!$this->ins = mysql_query($this->sql_ins))
        {
            die ("<center>Erro na inclusão " . '<br>Linha: ' . __LINE__ . "<br>" . mysql_error() . "<br>
                <a href='index.php'>Voltar ao Menu</a></center>");
        }else{
            print "<script>location='index.php';</script>";
        }
    }

    public function atualizar($camposvalores, $where = NULL) // funçao de ediçao, campos com seus respectivos valores e o campo id que define a linha a ser editada como parametros
    {
        if ($where)
        {
            $this->sql_upd = "UPDATE  " . $this->tabela . " SET $camposvalores WHERE $where";          
        }else{
            $this->sql_upd = "UPDATE  " . $this->tabela . " SET $camposvalores";
          }
        
        if(!$this->upd = mysql_query($this->sql_upd))
        {
            die ("<center>Erro na atualização " . "<br>Linha: " . __LINE__ . "<br>" .mysql_error() . "<br>
                <a href='index.php'>Voltar ao Menu</a></center>");
        }else{
            print "<center>Registro Atualizado com Sucesso!<br><a href='index.php'>Voltar ao Menu</a></center>";
        }
    }    

    /** Método excluir
      * @method excluir
      * @param string $where
      * @example: $where = " codigo=2 AND nome='João' "
      * @return void
      */        
    public function excluir($where = NULL) // funçao de exclusao, campo que define a linha a ser editada como parametro
    {
        if ($where)
        {
            $this->sql_sel = "SELECT * FROM " . $this->tabela . " WHERE $where";
            $this->sql_del = "DELETE FROM " . $this->tabela . " WHERE $where";
        }else{
            $this->sql_sel = "SELECT * FROM " . $this->tabela;
            $this->sql_del = "DELETE FROM " . $this->tabela;
          }
          $sel=mysql_query($this->sql_sel);
        $regs=mysql_num_rows($sel);
      
      if ($regs > 0){
        if(!$this->del = mysql_query($this->sql_del))
        {
            die ("<center>Erro na exclusão " . '<br>Linha: ' . __LINE__ . "<br>" .mysql_error() ."<br>
                <a href='index.php'>Voltar ao Menu</a></center>" );
        }else{
            print "<center>Registro Excluído com Sucesso!<br><a href='index.php'>Voltar ao Menu</a></center>";
        }
      }else{
            print "<center>Registro Não encontrado!<br><a href='index.php'>Voltar ao Menu</a></center>";
      }
    }    
      
 }        
    
?>




LISTANDO ITENS DA TABELA


Agora vamos listar os cadastros da tabela de maneira simples.


index.php:
<?php
    require_once 'config/conexao.class.php';
    require_once 'config/crud.class.php';

    $con = new conexao(); // instancia classe de conxao
    $con->connect(); // abre conexao com o banco
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
            //apenas testando a conexao
            if($con->connect() == true){
                echo 'Conectou';
            }else{
                echo 'Não conectou';
            }
        ?>
        <a href="formulario.php">
            Novo
        </a>
        <table style="border: 1px solid red;">
            <thead>
                <tr>
                    <th>
                        Nome
                    </th>
                    <th>
                        Descri&ccedil;&atilde;o
                    </th>
                </tr>
            </thead>
            <tbody>
                <?php
                    $consulta = mysql_query("SELECT * FROM produto"); // query que busca todos os dados da tabela PRODUTO
                    while($campo = mysql_fetch_array($consulta)){ // laço de repetiçao que vai trazer todos os resultados da consulta
                ?>
                    <tr>
                        <td>
                            <?php echo $campo['nome']; // mostrando o campo NOME da tabela ?>
                        </td>
                        <td>
                            <?php echo $campo['descricao']; // mostrando o campo DESCRICAO da tabela ?>
                        </td>
                        <td>
                            <a href="formulario.php?id=<?php echo $campo['id']; //pega o campo ID para a ediçao ?>">
                                Editar
                            </a>
                        </td>
                        <td>
                            <a href="excluir.php?id=<?php echo $campo['id'];  //pega o campo ID para a exclusao ?>">
                                Excluir
                            </a>
                        </td>
                    </tr>
                <?php } ?>
            </tbody>
        </table>
    </body>
</html>
<?php $con->disconnect(); // fecha conexao com o banco ?>




FORMULÁRIO PARA CADASTRO E EDIÇÃO


Podemos usar o mesmo formulário para cadastro e edição, apenas com algum código a mais, vale a pena dependendo do caso.


formulario.php:
<?php
    require_once 'config/conexao.class.php';
    require_once 'config/crud.class.php';

    $con = new conexao(); // instancia classe de conxao
    $con->connect(); // abre conexao com o banco
    @$getId = $_GET['id'];  //pega id para ediçao caso exista
    if(@$getId){ //se existir recupera os dados e tras os campos preenchidos
        $consulta = mysql_query("SELECT * FROM produto WHERE id = + $getId");
        $campo = mysql_fetch_array($consulta);
    }
   
    if(isset ($_POST['cadastrar'])){  // caso nao seja passado o id via GET cadastra
        $nome = $_POST['nome'];  //pega o elemento com o pelo NAME
        $descricao = $_POST['descricao']; //pega o elemento com o pelo NAME
        $crud = new crud('produto');  // instancia classe com as operaçoes crud, passando o nome da tabela como parametro
        $crud->inserir("nome,descricao", "'$nome','$descricao'"); // utiliza a funçao INSERIR da classe crud
        header("Location: index.php"); // redireciona para a listagem
    }

    if(isset ($_POST['editar'])){ // caso  seja passado o id via GET edita
        $nome = $_POST['nome']; //pega o elemento com o pelo NAME
        $descricao = $_POST['descricao']; //pega o elemento com o pelo NAME
        $crud = new crud('produto'); // instancia classe com as operaçoes crud, passando o nome da tabela como parametro
        $crud->atualizar("nome='$nome',descricao='$descricao'", "id='$getId'"); // utiliza a funçao ATUALIZAR da classe crud
        header("Location: index.php"); // redireciona para a listagem
    }

?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <form action="" method="post"><!--   formulario carrega a si mesmo com o action vazio  -->
           
            <label>Nome:</label>
            <input type="text" name="nome" value="<?php echo @$campo['nome']; // trazendo campo preenchido caso esteja no modo de ediçao ?>" />
            <br />
            <br />
            <label>Descri&ccedil;&atilde;o:</label>
            <input type="text" name="descricao" value="<?php echo @$campo['descricao']; // trazendo campo preenchido caso esteja no modo de ediçao ?>" />
            <br />
            <br />
            <?php
                if(@!$campo['id']){ // se nao passar o id via GET nao está editando, mostra o botao de cadastro
            ?>
                <input type="submit" name="cadastrar" value="Cadastrar" />
            <?php }else{ // se  passar o id via GET  está editando, mostra o botao de ediçao ?>
                <input type="submit" name="editar" value="Editar" />   
            <?php } ?>
        </form>
    </body>
</html>
<?php $con->disconnect(); // fecha conexao com o banco ?
>


EXCLUINDO REGISTRO DA TABELA


Na listagem existe um link para excluir cada registro, esse link leva para o 'excluir.php' que deleta o registro selecionado da tabela


excluir.php:
<?php
    require_once 'config/conexao.class.php';
    require_once 'config/crud.class.php';

    $con = new conexao();  // instancia classe de conxao
    $con->connect(); // abre conexao com o banco

    $crud = new crud('produto'); // instancia classe com as operaçoes crud, passando o nome da tabela como parametro
    $id = $_GET['id']; //pega id para exclusao caso exista
    $crud->excluir("id = $id"); // exclui o registro com o id que foi passado

    $con->disconnect(); // fecha a conexao

    header("Location: index.php"); // redireciona para a listagem
?
>

Baixar arquivos do projeto

Assim finalizamos nosso tutorial CRUD com PHP e MYSQL.Aqui utilizamos orientação a objetos de uma maneira simples e útil.É isso ai galera, em breve volto com mais tutoriais, valeu e até a próxima.

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | cna certification