CRUD GERAL E LOGIN Sumário



Documentos relacionados
AULA APLICAÇÕES PARA WEB SESSÕES E LOGIN E SENHA

Interagindo com Banco de Dados

PROGRAMAÇÃO ORIENTADA A OBJETO EM PHP

Programação WEB II. PHP e Banco de Dados. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

1. Introdução pág.3 2. Apresentação do sistema Joomla! pág.4 3. Acessando a administração do site pág.4 4. Artigos 4.1. Criando um Artigo 4.2.

UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET. Programação para Internet I

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

Prof. Carlos Majer Aplicações Corporativas UNICID

Programação WEB II. Sessions e Cookies. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

Fonte: - Illustration by Gaich Muramatsu

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA

Programando em PHP. Conceitos Básicos

WF Processos. Manual de Instruções

Esse manual é um conjunto de perguntas e respostas para usuários(as) do Joomla! 1.5.

Controle de acesso. .com.br

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Faça um Site PHP 5.2 com MySQL 5.0 Comércio Eletrônico

SISTEMA GERENCIAMENTO DE PRODUTOS PHP E MySQL 1. APRESENTAÇÃO

Programação web Prof. Wladimir

Portal Sindical. Manual Operacional Empresas/Escritórios

Podemos também definir o conteúdo dos menus da página inicial. Clique em Menus, Main Menu.

Escrito por Sáb, 15 de Outubro de :19 - Última atualização Seg, 26 de Março de :32

UNIVERSIDADE FEDERAL DO AMAPÁ NÚCLEO DE TECNOLOGIA DA INFORMAÇÃO. Manual de Avaliação de Desempenho Cadastro

OPERADORES E ESTRUTURAS DE CONTROLE

JavaScript. JavaScript é uma linguagem de script usada em navegadores web. É uma linguagem dinâmica, estruturada e orientada em objetos.

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Iniciando o MySQL Query Brower

Criando Banco de Dados, Tabelas e Campos através do HeidiSQL. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

SUMÁRIO Acesso ao sistema... 2 Atendente... 3

TECNOLOGIA WEG II PHP com SGBD MYSQL

Está apto a utilizar o sistema, o usuário que tenha conhecimentos básicos de informática e navegação na internet.

XSS - CROSS-SITE SCRIPTING

Manipulação de Dados em PHP (Visualizar, Inserir, Atualizar e Excluir) Parte 2

PAINEL GERENCIADOR DE S

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Bool setcookie (string nome [, string valor [, int validade [, string caminho [, string dominio [, int seguro]]]]] )

SMS Corporativo Manual do Usuário

MANUAL DO ANIMAIL Terti Software

Manual de uso do aplicativo Filho Sem Fila

Manual do Painel Administrativo

Segurança de Acesso a Banco de Dados no MS SQL Server

2 echo "PHP e outros.";

SQL comando SELECT. SELECT [DISTINCT] <campos> FROM <tabela> [condição] [ ; ] Paulo Damico - MDK Informática Ltda.

AULA 06 CRIAÇÃO DE USUÁRIOS

Manual do usuário. v1.0

Revisando sintaxes SQL e criando programa de pesquisa. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Data Transformation Services (DTS) por Anderson Ferreira Souza

Manual do Instar Mail v2.0

Notas de Aula 05: Aplicação de um caso de uso

Sistema de Gerenciamento Remoto

Manual do Sistema "Vida Controle de Contatos" Editorial Brazil Informatica

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

QUALIDATA Soluções em Informática. Módulo CIEE com convênio empresas

Noções de. Microsoft SQL Server. Microsoft SQL Server

Manual de Utilização Portal de Serviços do Inmetro nos Estados - PSIE

PHP e MySQL Autenticação de Usuários

Manual SAGe Versão 1.2

BEM-VINDO AO dhl PROVIEW

Documentação. Programa de Evolução Contínua Versão 1.72

MANUAL DE MEMBRO COMUNIDADE DO AMIGO

SIMULADOS & TUTORIAIS

Está apto a utilizar o sistema, o usuário que tenha conhecimentos básicos de informática e navegação na internet.

Programação Web com PHP. Prof. Wylliams Barbosa Santos Optativa IV Projetos de Sistemas Web

Manual de utilização do sistema de envio de sms marketing e corporativo da AGENCIA GLOBO. V

1. Tela de Acesso pg Cadastro pg Abas de navegação pg Abas dados cadastrais pg Aba grupo de usuários pg.

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

PHP (Seções, Cookies e Banco de Dados)

VERSÃO PARA INTERNET. Tutorial SIGA BRASIL CNT


PHP INTEGRAÇÃO COM MYSQL PARTE 2

Follow-Up Acompanhamento Eletrônico de Processos (versão 3.0) Manual do Sistema. 1. Como acessar o sistema Requisitos mínimos e compatibilidade

Manual de Atualização Versão

8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR 8VDQGRSDUkPHWURV

Guia Site Empresarial

GERENCIADOR DE CONTEÚDO

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

Manual Comunica S_Line

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

Construindo um sistema simples de cadastro de fornecedores em PHP e MySQL.

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

ROTEIRO DE INSTALAÇÃO

Alterações Easycaptive

Manual das funcionalidades Webmail AASP

Desenvolvimento de Aplicações para Internet Aula 8

MANUAL WEBMAIL HORDE-V.01 IBILCE/UNESP

Conceitos de extensões Joomla!

Banco de Dados BrOffice Base

Podemos agora ver no IDE do Morfik os objetos que já incorporamos ao nosso projeto :

CODE IGNITER INSTALAÇÃO & BANCO DE DADOS

Transações Seguras em Bancos de Dados (MySQL)

JavaScript (Funções, Eventos e Manipulação de Formulários)

Manual de Publicaça o no Blog da Aça o TRIBOS nas Trilhas da Cidadania

Manual do sistema SMARsa Web

Tutorial contas a pagar

Tutorial do Sistema de Gestão de Conteúdos para Web - SYSWEB

Sensor de temperatura Parte 5 Cleiton Bueno Preparando o ambiente do Banco de dados Mysql

Sumário. Capítulo 2 Iniciando o TR Como efetuar o login... 8

FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA. Módulo de Programação Prof. Bruno Maciel

Transcrição:

Sumário Construção de sistema Administrativo... 2 Sistema de Login... 2 Técnicas para Evitar Ataques... 3 Formulário de Login e Senha... 3 Controlar Sessão... 4 Criar Menu... 4 Pagina de LOGIN... 4 CRUD... 6 O que é CRUD?... 6 Criando as classes que fazem parte do CRUD... 6 Busca Dados Geral... 6 Insert Geral... 7 Update Geral... 9 Delete Geral... 11 Recuperar ID do último registro inserido... 11 Lista Geral... 12 1

Construção de sistema Administrativo CRUD GERAL E LOGIN Um sistema administrativo é composto por CRUDs e Sistema de Segurança através de Login e Senha. Nesse modelo, iremos ensinar como criar um sistema administrativo simples em PHP. Os arquivos base estão em http://www.danypires.com.br/apliweb/exercicios/crud-login.rar Esse modelo é composto de duas partes LOGIN e CRUD. Vamos iniciar a parte do LOGIN. Sistema de Login Iremos construir um sistema de login e senha para garantir a segurança do sistema administrativo. No arquivo class.php das linhas 346 a 393 que contém os métodos referente ao sistema de login e senha. Primeiro vamos falar de SQL INJECTION ou INJEÇÃO DE SQL Muitos desenvolvedores web não sabem de como consultas SQL podem ser manipuladas e presumem que uma consulta de SQL é um comando confiável. Significa que consultas SQL são capazes de passar imperceptível por controles de acesso, portanto desviando da autenticação padrão e de checagens de autorização, e algumas vezes consultas SQL podem permitir acesso à comando em nível do sistema operacional do servidor. Injeção direta de comandos SQL é uma técnica onde um atacante cria ou altera comandos SQL existentes para expor dados escondidos, ou sobrescrever dados valiosos, ou ainda executar comandos de sistema perigosos no servidor. Isso é possível se a aplicação pegar a entrada do usuário e combinar com parâmetros estáticos para montar uma consulta SQL. Os exemplos a seguir são baseados em histórias verdadeiras, infelizmente. 2

Devido à falta de validação de entrada e conectando ao banco de dados usando o super-usuário ou um usuário que pode criar usuário, o atacante pode criar um super-usuário no seu banco de dados. Técnicas para Evitar Ataques Você pode dizer que o atacante precisa possuir um pouco de informação sobre o esquema de banco de dados na maioria dos exemplos. Você tem razão, mas você nunca sabe quando e como isso pode ser obtido e, se acontecer, seu banco de dados pode ficar exposto. Se você estiver usando um pacote open source publicamente disponível para lidar com banco de dados, que pode pertencer a um sistema de controle de conteúdo ou forum, os invasores facilmente produzem uma cópia de parte de seu código. Também pode ser um risco de segurança se este for for mal desenhado. Esses ataques se baseiam principalmente em explorar falhas no código escrito sem se preocupar com segurança. Nunca confie em nenhum tipo de entrada, especialmente aquela que vem do lado do cliente, mesmo que venha de um combobox, um campo de entrada escondido (hidden) ou um cookie. O primeiro exemplo mostra como uma consulta inocente pode causar desastres. Nunca conecte ao banco de dados como um super-usuário ou como o dono do banco de dados. Use sempre usuários personalizados com privilégios bem limitados. Verifique se uma entrada qualquer tem o tipo de dados esperado. O PHP tem um grande número de funções de validação de entrada, desde as mais simples encontrada em Funções de Variáveis e em Funções de Tipo de Caracteres (ex.: is_numeric(), ctype_digit() respectivamente) além de usar o suporte a Expressões Regulares Compatível com Perl. Se a aplicação espera por entradas numéricas, considere verificar os dados com a função is_numeric(), ou silenciosamente mudar o seu tipo usando settype(), ou usar a representação númerica usando a função sprintf(). Outra maneira é utilizando um função PHP para tratar esses erros. A função do PHP mysql_real_escape_string, Esta função irá escapar os caracteres especiais em unescaped_string, levando em conta o atual conjunto de caracteres da conexão, assim é seguro coloca-la em mysql_query(). Veja um método para tratar SQL INJECTION no PHP //métodos de login e senha public function anti_sql_injection($string){//método responsável por tratar dados para evitar SQL injection $string = get_magic_quotes_gpc()? stripslashes($string) : $string; $string = function_exists("mysql_real_escape_string")? mysql_real_escape_string($string) : mysql_escape_string($string); return $string; Esse método trata os campos digitados contra SQL INJECTION. Formulário de Login e Senha public function form_login($string){//método de formulario de login $login ="<fieldset> <legend>login</legend>\n"; $login.="<form action=\"login.php?cod=logar\" method=\"post\">\n"; 3

$login.="<label>login</label>\n"; $login.="<input type=\"text\" class=\"campos\" name=\"login\" size=\"12\"><br />\n"; $login.="<label>senha</label>\n"; $login.="<input type=\"password\" class=\"campos\" name=\"senha\" size=\"12\"><br /><span class=\"erro\">".$string."</span>\n"; $login.="<div align=\"right\"><input type=\"submit\" class=\"botoes\" value=\"ok\"></div>\n"; $login.="</form>\n"; $login.="</fieldset>\n"; return $login; Esse método cria um formulário de login e senha, podendo ser possível passar alguma mensagem de erro. Controlar Sessão, caso não logado volta a página de login e senha. //método de controle de sessão public function sessao(){ session_start();//inicio sessão if(!isset($_session['id'])) {//checo se variavel sessao de ID foi declarada $obj->redireciona("login.php"); //a tela de login //método de menu do admin Criar Menu Método criar menu através de login no sistema public function get_menu(){ if(isset($_session['id'])) { $menu = "<ul> <li><a href=\"crudbanner.php\">banner</a></li> <li><a href=\"crudnoticia.php\">notícia</a></li> <li><a href=\"crudproduto.php\">produtos</a></li> <li><a href=\"crudtexto.php\">textos</a></li> <li><a href=\"cruduser.php\">usuário</a></li> <li><a href=\"login.php?cod=logoff\">sair</a></li> </ul>"; else{ $menu = "Área reservada!"; return $menu; Com os métodos acima, posso criar minha página de login com o código abaixo. Pagina de LOGIN Utilizando os método em CLASS posso criar uma página de LOGIN e SENHA Veja o script da página LOGIN <?php include "class.php"; 4

$obj = new basics; $obj->conn("localhost","news","root",""); switch ($_GET['cod']) { case 'logar': //parte do código que irá logar e criar sessão $senha = $obj->anti_sql_injection($_post['senha']);//trata de sql injection $login = $obj->anti_sql_injection($_post['login']); //trata de sql injection $erro = "";//mensagem de erro zerada $sql = mysql_query("select * FROM usuarios WHERE usuario_login ='".$login."'");// faço o SQL no banco para ver se o login digitado existe no banco if(mysql_num_rows($sql) > 0 ) {// se existir $array = mysql_fetch_array($sql);// recupero os campos do banco em mysql_fetch_array if ($array['usuario_senha'] == $senha){ // comparo se senha digitada bate com a senha cadastrada no banco session_register('user');//registro as variveis de sessão na instance de sessão do navegador session_register('id'); session_register('nome_user'); session_name('login'); $_SESSION['user'] = $array['usuario_login'];//salvo valores nas variaves de sessão registradas $_SESSION['id'] = $array['usuario_id']; $_SESSION['nome_user'] = $array['usuario_nome']; $obj->redireciona("login.php?cod=boas-vindas"); // redireciono para a boas-vindas else { $erro = "Senha errada!"; //mensagem de erro de senha // fecha if senha else { $erro= "Usuário inválido!";//mensagem de erro de usuario $login = $obj->form_login($erro);// instancio o formulario de login com as mensagens de erro, se houverem case "boas-vindas":// tela de boas vindas com o formulário de sessão $obj->sessao();//checo se as variaveis de sessão existem, senão existirem, voltam para a tela de login $login = "Seja bem-vindo a Área administrativa"; case "logoff"://destroe as sessõese faz log-off session_start(); unset($_session['user']); unset($_session['id']); unset($_session['nome_user']); $obj->redireciona("login.php"); default://formulário de login $login = $obj->form_login(""); include "login.html";?> 5

O script acima utilizo a variável GET cod para delimitar a ação da pagina, quando está em default, ou seja, sem ser informada, ela carrega o formulário de login. No caso de LOGAR, ela recupera as variáveis de login e senha digitadas no formulário, trata o SQL INJECTION e faz o login, conforme explicação no código. CRUD Uma área administrativa compreende em áreas para gerenciar conteúdos que existem no banco de dados, no nosso projeto temos duas tabelas no banco de dados, TEXTOS e NOTICIAS. Então iremos criar nesse capítulo um CRUD que atenda a todas as áreas administrativas internas, com isso, você sozinho conseguirá fazer o da tabela de usuários que terá acesso a esse site. O que é CRUD? Mas falamos de CRUD, o que seria um CRUD? Consiste numa única aplicação que LISTE, INSERA, ALTERE e EXCLUA registros no banco de dados. A abreviação CRUD mapeada para o padrão ISO/SQL é: Create INSERT Retrieve (Read) SELECT Update UPDATE Destroy (Delete) DELETE Ou seja, nessa aplicação teremos as seguintes instruções SQL: SELECT, INSERT, UPDATE e DELETE. Sendo assim, o SELECT será a listagem dos registros paginados, algo que já fizemos anteriormente. O INSERT será inserção de registros no banco de dados através de um formulário. O UPDATE será alteração desses registros no banco de dados também através de um formulário. E o DELETE será a exclusão desse registro no banco de dados. Criando as classes que fazem parte do CRUD Para criarmos no nosso sistema um CRUD, faremos classes que sejam usadas para criar os arquivos de CRUD. A vantagem nesse procedimento é que iremos construir uma área administrativa em segundos, sem a necessidade de desenvolvimento de classes para cada tabela. Se houver a necessidade de reescrever algum método, você pode usar o POLIMORFISMO, estendo a class BASICS e só reescrevendo o novo método. Esses métodos devem ser inseridos no final do arquivo class.php. /* métodos referente ao crud geral Método referente a varrer uma tabela e criar e declarar variaveis para cada campo, auxiliando muito num formulário de alteração*/ Método para corrigir erros de inserção e alteração de strings com aspas simples. public function acerta_sql($string){ return str_replace("'","\'",$string); Busca Dados Geral O busca dados geral é o método que recuperará os dados de uma consulta para alteração de dados. Abaixo o método que irá recuperar os dados de uma tabela, usando como where o campo e o id a ser filtrado. Ele será muito parecido com o insert geral e update geral, porém irá criar variáveis globais afim de que consigamos com esses valores recuperar dados de uma consulta ao banco de dados. public function busca_dados_geral($nome_table,$campo,$id){ 6

$sql = mysql_query("select * FROM ".$nome_table." WHERE ".$campo."='".$id."'");// instrução que exibe os campos de uma tabela $array = mysql_fetch_array($sql); $sqla = mysql_query("show COLUMNS FROM ".$nome_table);// rastreia todos os campos de uma tabela while ($row = mysql_fetch_assoc($sqla)) {// exibe todos os campos e tipo de dados de uma tabela $GLOBALS[$row['Field']] = $array[$row['field']];// salva cada campo da tabela numa variável global if ($row['type'] == "date"){ // trata os campos do tipo data de aaaa-mm-dd para dd/mm/aaaa $GLOBALS[$row['Field']] = self::formata_data($array[$row['field']]); switch($row['type']){ // trata os campos do tipo float para R$ case "float(12,2)": case "decimal(10,2)": case "decimal(12,2)": $GLOBALS[$row['Field']] = self::formata_valor_brasil($array[$row['field']]); Insert Geral O método INSERT GERAL é um método que fará INSERT no banco de dados, passando somente os parâmetros de nome da tabela e método (POST, GET ou outro array). Com isso qual o trabalho que terei num INSERT apenas o de criar um formulário, facilitando a inclusão de registros no banco de dados, segue abaixo explicação do método linha a linha. Para usar INSERT GERAL, devemos construir formulários com o nome do campo idêntico aos campos da tabela em questão. /* método responsável por inserir registros em um banco de dados, originados de um array que pode ser através de um formulário, pelo método POST para usar o método INSERT GERAL com formulários, na construção do mesmo, os campos devem ter o mesmo nome da coluna da tabela a ser inserida registros*/ public function insert_geral($nome_table,$arr){//0 7

$table = "INSERT INTO ".$nome_table;// início da string de insert while (list ($key, $val) = each ($arr)) {//1 //inicia um WHILE varrendo o ARRAY que enviou registros ao INSERT GERAL, exemplo POST, KEY = nome do campo, VAL = valor $sql = mysql_query("show COLUMNS FROM ".$nome_table);// instrução que exibe os campos e tipos de uma tabela if (mysql_num_rows($sql) > 0) {//2 while ($row = mysql_fetch_assoc($sql)) {// 3 varre a tabela em questão recuperando os campos de uma tabela if($row['key']!= "PRI"){// checa se o tipo do campo é diferente de chave primária if($key == $row['field']){// na array, quando o indice for Field, voltará o nome do campo switch($row['type']){ case "date":// trata campos de data, transformando-os de dd/mm/aaaa para aaaa-mm-dd $vv = substr($val,0,4); $vv = strchr($val,"/"); $vv2 = strrev($vv); if ($vv!= "" && $vv2!= ""){//checa se o valor preenchido veio dd/mm/aaaa $val_novo = self::formata_usa($val); else{// senão veio preenchido daquela maneira e sim aaaa-mm-dd ele não trata o registro e faz insert no banco da maneira preenchida $val_novo = $val; monetário de R$ para U$ "decimal(10,2)": "decimal(12,2)": self::formata_preco_banco($val); //trata valor case "float(12,2)": case case $val_novo = 8

default://senão for data nem casa monetária, o valor entra sem tratamento, apenas tratando erro de sql para ASPAS SIMPLES $val_novo = self::acerta_sql($val); $valor = $val_novo;// declara que valor é val_novo que são os valores tratados $table1 = "("; // faz parte da formação da string de inserção $table2.= $key.","; // faz parte da formação da string de inserção $table3 = ""; // faz parte da formação da string de inserção $table4 = ") VALUES ("; // faz parte da formação da string de inserção $table5.= "'".$valor."',"; // faz parte da formação da string de inserção $table6 = ")";// faz parte da formação da string de inserção //compoe os pedaços para compor a string de inserção $table.= $table1."".$table2."".$table3."".$table4."".$table5."".$table6; $table = str_replace(",)",")",$table);//retira virgula, entre os parenteses de campos e valores, os quais serão inseridos nas strings table2 e table5, as quais fazem loops nos campos da tabela e valores recuperados pelo array $sql = mysql_query($table) or die("erro no comando SQL:".mysql_error());// faz insert no banco de dados Update Geral Igualmente o método insert_geral eu tenho um para update_geral, ele será bem similar, mas construirá um script para fazer update no banco de dados, também da mesma maneira que com o insert. Usando também o show elements column para conseguir as colunas do banco de dados. Repare que o script abaixo é bem similar ao acima, porém construindo a instrução updade no banco de dados. Veja abaixo como são os mesmas princípios com pequenas alterações. /* método responsável por alterar registros em um banco de dados, originados de um array que pode ser através de um formulário, pelo método POST 9

para usar o método UPDATE GERAL com formulários, na construção do mesmo, os campos devem ter o mesmo nome da coluna da tabela a ser alterada registros*/ public function update_geral($nome_table,$arr){//0 $table = "UPDATE ".$nome_table." SET "; //inicia string de alteração de registros while (list ($key, $val) = each ($arr)) {//1 //inicia um WHILE varrendo o ARRAY que enviou registros ao INSERT GERAL, exemplo POST, KEY = nome do campo, VAL = valor $sql = mysql_query("show COLUMNS FROM ".$nome_table);// instrução que exibe os campos e tipos de uma tabela if (mysql_num_rows($sql) > 0) {//2 while ($row = mysql_fetch_assoc($sql)) {// 3 varre a tabela em questão recuperando os campos de uma tabela switch($row['type']){//4 case "date":// trata campos de data, transformando-os de dd/mm/aaaa para aaaa-mm-dd $vv = substr($val,0,4); $vv = strchr($val,"/"); $vv2 = strrev($vv); if ($vv!= "" && $vv2!= ""){//checa se o valor preenchido veio dd/mm/aaaa $valor = self::formata_usa($val); else{// senão veio preenchido daquela maneira e sim aaaa-mm-dd ele não trata o registro e faz insert no banco da maneira preenchida $valor = $val; case "float(12,2)"://trata valor monetário de R$ para U$ case "decimal(10,2)": case "decimal(12,2)": $valor = self::formata_preco_banco($val); default://senão for data nem casa monetária, o valor entra sem tratamento, apenas tratando erro de sql para ASPAS SIMPLES $valor = self::acerta_sql($val); //4 if($key == $row['field']){//4// na array, quando o indice for Field, voltará o nome do campo 10

switch($row['key']){//5 checa o tipo de campo case "PRI":// chave primaria escreve uma parte da string de update $table2 = " WHERE ".$key."='".$val."'"; $log_id_table = $val; default:// senão escreve outra parte da string de alteração e trata de erro de sql $table.= $key."="; $table.= "'".$valor."',"; //5 //4 //3 //2 //1 $table.= $table2; $table = str_replace(", WHERE"," WHERE",$table);//retira virgula, entre os parenteses de valores, os quais serão inseridos string table, as quais fazem loops nos campos da tabela e valores recuperados pelo array $sql = mysql_query($table) or die("erro no comando SQL:".mysql_error());// faz update no banco de dados //0 Delete Geral Assim como tenho o insert_geral e o update_geral eu tenho o delete_geral, que irá excluir um registro no banco de dados. Será uma query simples, onde passarei como parâmetros, nome da tabela e id. /* método responsável por excluir registros no banco de dados, é necessário passar dois parametros nome da tabela e ID*/ public function delete_geral($nome_table,$id){//0 $sql = mysql_query("show INDEX FROM ".$nome_table); $row = mysql_fetch_assoc($sql); $primaria = $row['column_name'];// recupera nome do campo de chave primária $table = "DELETE FROM ".$nome_table." WHERE ".$primaria."='".$id."'"; $sqlxc = mysql_query($table) or die("erro no comando SQL:".mysql_error()); //exclui registros no banco de dados Recuperar ID do último registro inserido Nesse método recupero o último valor de ID inserido na tabela a ser instanciada. 11

public function recupera_id($nome_table){//metodo responsavel por recuperar o ID no último registro inserido em uma tabela $sql = mysql_query("show INDEX FROM ".$nome_table); $row = mysql_fetch_assoc($sql); $primaria = $row['column_name']; $sql = mysql_query("select max(".$primaria.") AS N FROM ".$nome_table); */ $array = mysql_fetch_array($sql); $id = $array['n']; return $id; /*método responsavel por montar uma lista geral para acesso ao um crud Lista Geral O lista geral será usado para listar algo de uma tabela, com os botões de alterar e excluir. Poderá ser usado em qualquer área administrativa, agora caso essa lista deva ser alterada, pode-se criar uma classe estendida da basics na área que deverá ter a lista diferente e através do POLIMORFISMO, escreve-se o método lista_geral com as alterações. O lista geral base irá ter como parâmetros nome da tabela, três campos a serem usados, WHERE da consulta, ORDER da consulta, nome do arquivo CRUD (área). public static function lista_geral($table_name,$campo1,$campo2,$order,$area){ /* $table_name= nome da tabela $campo1 = campo ID de uma tabela $campo2 = campo a ser inserido na coluna do lista geral $order = de exibição da listagem $area = nome do arquivo PHP do crud, exemplo crudnoticia.php */ $sql = mysql_query("select * FROM ".$table_name." order by ".$order); $lista_texto = " <center><input type=\"button\" class=\"botoes\" value=\"cadastrar\" onclick=\"location.href='".$area."?cod=form'\" /></center>";//botão para inserir registros if(mysql_num_rows($sql) > 0){//1 $lista_texto.= "Existem ".mysql_num_rows($sql)." registros. "; $lista_texto.= "<table width=\"100%\" border=\"0\" cellspacing=\"3\" cellpadding=\"3\" align=\"center\">\n"; $lista_texto.="<tr> \n"; $lista_texto.="<th width=\"90%\"></th>\n"; $lista_texto.="<th width=\"5%\"></th>\n"; $lista_texto.="<th width=\"5%\"></th>\n"; $lista_texto.="</tr>\n"; 12

$zebrado = "zebra1"; while($arr = mysql_fetch_array($sql)){ if($zebrado == "zebra1"){ $zebrado = "zebra2"; else{ $zebrado = "zebra1"; $lista_texto.="<tr> \n"; $lista_texto.="<td class=\"".$zebrado."\">".$arr[$campo2]."</td>\n"; $lista_texto.="<td class=\"".$zebrado."\" align=\"center\"><a href=\"".$area."?cod=form&id=".$arr[$campo1]."\">alterar</a></td>\n"; $lista_texto.="<td class=\"".$zebrado."\" align=\"center\"><a href=\"".$area."?cod=exclui&id=".$arr[$campo1]."\" onclick=\"return confirm('você tem certeza que deseja deletar?')\" >Excluir</a></td>\n"; $lista_texto.="</tr>\n"; //3 $lista_texto.="</table>\n"; else{//2 $lista_texto.="não existem dados cadastrados!\n"; //2 return $lista_texto; // fim de métodos de CRUD //métodos básicos para funcionamento public function redireciona($url){// redireciona para uma URL a ser informada?> <script> location.href='<?php echo $url?>'; </script> <?php Construindo um arquivo de CRUD, exemplo crudnoticia.php Nesse exemplo de CRUD, nas primeiras linhas incluímos class.php, criamos e instanciamos objeto da classe basics. Após conectar com o banco, é necessário instanciar o método sessão irá controlar se o login esta ativo ou não. O CRUD é separado em 5 partes: 13

Controlado pela variável GET cod, temos 5 fases no CRUD CRUD GERAL E LOGIN No default será a lista dos registros da tabela mencionada no lista_geral. No FORM é acionado o formulário para inserção ou alteração. Se o paramento GET ID vier, o formulário será de alteração, senão será de inserção. No INSERE, será feito a inserção de dados na tabela mencionada através do método POST e será redirecionado para o DEFAULT. No ALTERA, será feito a alteração de dados na tabela mencionada através do método POST e será redirecionado para o DEFAULT. No EXCLUI, será feito a exclusão do registro na tabela mencionada através GET ID e mencionar a tabela e será redirecionado para o DEFAULT. Com esses 5 passos, será feito o CRUD e isso funciona para qualquer tabela. Basta fazer os formulários e utilizar esses métodos através do INCLUD do class.php. <?php include "class.php"; $obj = new basics; $obj->conn("localhost","news","root",""); $obj->sessao(); switch($_get['cod']){ case "form": if(isset($_get['id'])){ $obj->busca_dados_geral("noticia","noticia_id",$_get['id']); $cod = "altera"; $botoes = "Alterar"; else{ $cod = "insere"; $botoes = "Cadastrar"; include "noticia.html"; case "insere": $obj->insert_geral("noticia",$_post); $obj->redireciona("crudnoticia.php"); case "altera": $obj->update_geral("noticia",$_post); $obj->redireciona("crudnoticia.php"); case "exclui": $obj->delete_geral("noticia",$_get['id']); $obj->redireciona("crudnoticia.php"); default: $lista = $obj- >lista_geral('noticia','noticia_id','noticia_titulo','noticia_id DESC','crudnoticia.php'); include "lista.html"; 14

?> 15