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çã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çã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.
sexta-feira, 27 de maio de 2011
CRUD COMPETO EM PHP E MYSQL
01:31
Rodolfo
38 comments
38 comentários:
Muito bom, funciona perfeitamente. Fácil de entender para quem está começando.
Perfeito... Muito bom tutorial, funciona perfeitamente.
Vlw ;)
Parabens, pode crer que usarei seu tutorial como base pra tudo daqui em diante :)
Bom, tenho só 1 ano de experiencia com POO, mas foi o tutorial mais bem estruturado e ao mesmo tempo simples, digo, de facil entendimento pra qm ja tem uma base, é claro, que vi em todo esse tempo.
Rodiki, a suas classes ficaram muito boas, ficaram bem claras, diretas e ultiliza bem as ferramentas oo. Parabéns, e estamos a espera de mais tutoriais!
O meu esta dando um erro :
Erro na inclus�o
Linha_LINE_
Column count doesn't match value count at row 1
Saberia me dizer o porque ?
Como trazer uma combo preenchida no editar?
muito bom este tutorial, grato pela colaboração
Tuto muito show, parabens...
Pessoal, tem o Crudin, um framwework em PHP e MySQL que gera automaticamente o CRUD para todas as tabelas da base sem precisar programar nada...so precisa mudar as configurações de conexão com a base de dados
http://crudin.smarc.com.br
Essa passagem de id via GET é uma falha de segurança; mas fora isso ta show, POO e tudo :)
Olá,
Gostei muito do tutorial e vou usa-lo como base para os meus sistemas, mas eu tenho uma dúvida: Em alguns códigos tem o @ na frente do nome da variável ou funcao, como por exemplo no arquivo conexao_class.php que tem a funcao @mysql_connect() o que significa? Poderia me explicar?
muito bom, só gostaria de saber como fazer edição com um filtro de nome um select from where nome=? como declaro
ola, tenho a mesma duvida do Fabao, para que serve o @ ?
obrigado.
Muito bom
Parabens brother, crud perfeito , bem legivel para qualquer desenvolvedor, por ter certeza que vai ajudar muita gente no mundo dos devs juniors.
grande abraco, mais um leitor de seu blog =D
Muito Legal...
Parabéns pela iniciativa e pela dedicação.
Preciso aprender php em 3 meses... por onde começo? Gostaria de dicas.
Agradeço!
jheina_hta@hotmail.com
click for source
Here is my blog ... bankruptcy file
My website > jacksonville foreclosure defense
show de bola.. obrigado!
E o CRUD pra dar select? Tá devendo! rs Mas esses 3 já estão SHOW! Encontrei um outro que faz select também, mas é muito mais complicado. Abs!
Muito útil.
http://www.codigosnaweb.com/forum/
Great beat ! I wish to apρгentiсe while you amenԁ your
web sіte, how could i subsсгibe for a blog
site? The аcсount aіded me a aсceptable
deal. I haԁ been a little bit аcquaіnted оf this youг broadcast prοvіԁed bгight cleаr іdea
Alsο visіt mу homеρage - payday loans
parabéns muito bom !! aprendi o mesmo conceito só que em JAVA na facul, praticamente mesma coisa, muda só os Codigos.
Muito obrigado, funcionou perfeitamente
Como inserir fotos no banco de dados (tipo BLOB) usando essa abordagem?
Eu criei uma nova base de testes, consigo fazer o Delete e Exclud, mas
estou com dificuldades para fazer o update, alguém poderia me dar uma força?
É genérico esse crud?
É genérico esse crud?
No meu está dando este erro:
Warning: mysql_fetch_array() expects parameter 1 to be resource.
Alguem poderia judar por favor?
Obrigado.
No meu está dando este erro:
Warning: mysql_fetch_array() expects parameter 1 to be resource.
Alguem poderia judar por favor?
Obrigado.
Bom dia, quando coloco para editar ele apresenta a mensagem de erro "Linha: 54
Duplicate entry '7' for key 'PRIMARY'"
Isso ocorre quando tem mais de 1 registro no BD.
Estou tentando corrigir e nao estou conseguindo.
Alguem pode me ajudar?
Muito Obrigado...\0/
Olá o @ elimina erros nativo doPHP
Olá o @ elimina erros nativo doPHP
Este crud ajudou a esclarecer! vlw
Estava exatamente com essa dificuldade em fazer CRUD. Obrigado por compartilhar!
Cara simplicidade em php é tudo mano faço algo mais simples isso já é para uma pessoa que entende muito de php e vai levar alguns minutos para entender essas 4 funcionalidades.
Muito Bom! salvou minha pelo, com um projeto da faculdade Valeu!....
Não mexi em nada e deu esse erro no index.php ... Parse error: syntax error, unexpected T_INCLUDE in C:\Users\Acer\Desktop\orientado\teste\index.php on line 2...
o que poderia ser?
Postar um comentário