SlideShare una empresa de Scribd logo
1 de 8
Descargar para leer sin conexión
Nos sistemas web que costumamos acessar hoje em dia é comum vermos controles de
usuários. Um exemplo seria o de sistemas de publicações de artigos ou textos onde temos
vários tipos de usuários como: Editor, Publicador, Revisor, etc, onde cada um possui
privilégios diferentes de acesso às páginas do sistema/site.
Neste artigo vamos abordar uma ideia básica de criação de controle de acesso, onde
teremos:
Tela de Login;
Tela de Cadastro de Usuário;
Funções que irão manipular os dados (cadastro no banco / verificação dos privilégios).
É um sistema simples, mas que pode ser tomado como base para a implementação de
sistemas de controle bastante complexos com sessions, cookies, e assim por diante.
O 1º passo é criarmos nossa index.php onde ficará nosso formulário de login e um link para
efetivar um cadastro, caso não possua.
Listagem 1: Criando arquivo index.php
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div>
Login
</div>
<form action="controle.php" method="post">
<input type="text" name="login" value="" />
<input type="password" name="senha" value="" />
<input type="submit" name="enviar" value="Login"/>
<a href="cadastrar.php">Sem cadastro?</a>
</form>
</body>
</html>
Figura 1: Formulário de login
Após a criação deste arquivo vamos criar o formulário de cadastro de usuário, assim, quem
não possuir login e senha poderá realizar um cadastro rápido.
Listagem 2: Criando o arquivo cadastrar.php
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div>
Cadastro de usuário
</div>
<form action="controle.php" method="post">
<label>Login</label>
<input type="text" name="login" value="" /><br />
<label>Senha</label>
<input type="password" name="senha" value="" /><br />
<label>Tipo de usuário</label>
<select name="tipo_usuario">
<option value="">Selecione</option>
<option value="1">Usuario Comum</option>
<option value="2">Administrador</option>
</select><br />
<input type="submit" name="cadastrar" value="cadastrar"/>
</form>
</body>
</html>
Figura 2: Formulário de cadastro de usuário
Com nossos formulários prontos, vamos prosseguir criando um controle para verificar se a
requisição é de um cadastro novo ou se é de um login. Para tal, vamos criar o arquivo
controler.php.
Listagem 3: Criando o arquivo controle.php
<?php
//utilização de namespaces
namespace controle;
include 'processaAcesso.php';
use processaAcesso as processaAcesso;
$controle = new processaAcessoProcessaAcesso;
if ($_POST['enviar']) {
$login = $_POST['login'];
$senha = md5($_POST['senha']);
$usuario = $controle->verificaAcesso($login, $senha);
//redirecionando para pagina conforme o tipo do usuário
if ($usuario[0]['id_tipo_acesso'] == 1) {
header("Location:paginas/pagina1.html");
} else if ($usuario[0]['id_tipo_acesso'] == 2) {
header("Location:paginas/pagina2.html");
}
} else if ($_POST['cadastrar']) {
$login = $_POST['login'];
$senha = md5($_POST['senha']);
$tipo_usuario = $_POST['tipo_usuario'];
$arr = array('login_usuario' => $login, 'senha_usuario' => $senha,
'id_tipo_acesso' => $tipo_usuario);
if (!$controle->cadastraUsuario($arr)) {
echo 'Aconteceu algum erro';
} else {
$tipo_acesso = $controle->verificaAcesso($login, $senha);
if ($tipo_acesso[0]['id_tipo_acesso'] == 1) {
header("Location:paginas/pagina1.html");
} else if ($tipo_acesso[0]['id_tipo_acesso'] == 2) {
header("Location:paginas/pagina2.html");
}
}
}
?>
Agora já sabemos se é uma requisição de login ou é um cadastro de usuário recente.
Nosso próximo passo é criar outro controler para inserir novos usuários e para verificar qual
o tipo de perfil que o usuário possui. Esse controler conversa diretamente com o controler
criado anteriormente (controler.php).
Listagem 4: Criando o arquivo processaAcesso.php
<?php
//utilização de namespaces
namespace processaAcesso {
include 'conexao/mysql.php';
use Mysql as Mysql;
class ProcessaAcesso {
var $db;
public function __construct() {
$conexao = new Mysqlmysql(DB_SERVER, DB_NAME, DB_USERNAME, DB_PASSWORD);
$this->db = $conexao;
}
public function verificaAcesso($login, $senha) {
$select = $this->db->select('tb_usuario', '*',
" where login_usuario = '$login' and senha_usuario = '$senha'");
return $select;
}
public function cadastraUsuario($dados){
$insert = $this->db->insert('tb_usuario', $dados);
return $insert;
}
}
}
?>
Para a lógica da nossa aplicação ficar completa, falta a comunicação com a base de dados
correto? Então vamos criar um controle para podermos realizar o CRUD.
Listagem 5: Criando o arquivo mysql.php dentro da pasta conexão
<?php
//utilização de namespaces
namespace Mysql {
//declaração de variáres globais
define('DB_SERVER', 'localhost');
define('DB_NAME', 'acesso');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
class mysql {
var $db, $conn;
public function __construct($server, $database, $username, $password) {
$this->conn = mysql_connect($server, $username, $password);
$this->db = mysql_select_db($database, $this->conn);
}
/**
* Função de seleção dos registros da tabela
* @param string $tabela tabela onde será buscado os registros
* @param string $colunas string contendo as colunas separadas
por virgula para seleção, se null busca por todas *
*/
public function select($tabela, $colunas = "*", $where = "1=1") {
$sql = "SELECT $colunas FROM $tabela $where";
$result = $this->executar($sql);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$return[] = $row;
}
return $return;
}
/**
* Função para inserir dados na tabela
* @param array $dados Array contendo os dados a serem inseridos
* @param string $tabela tabela que será inserido os dados
* @return boolean verdadeiro ou falso
*/
public function insert($tabela, $dados) {
foreach ($dados as $key => $value) {
$keys[] = $key;
$insertvalues[] = ''' . $value . ''';
}
$keys = implode(',', $keys);
$insertvalues = implode(',', $insertvalues);
$sql = "INSERT INTO $tabela ($keys) VALUES ($insertvalues)";
return $this->executar($sql);
}
private function executar($sql) {
$return_result = mysql_query($sql, $this->conn);
if ($return_result) {
return $return_result;
} else {
$this->sql_error($sql);
}
}
private function sql_error($sql) {
echo mysql_error($this->conn) . '<br>';
die('error: ' . $sql);
}
}
}
?>
Pronto! Nossa lógica está toda montada. Para verificarmos a diferença dos acessos em
relação ao tipo do usuário, vamos criar uma pasta chamada “Paginas” e dentro dela 2
arquivos, um para determinado tipo de usuário e outro para outro tipo.
Listagem 6: Criando o arquivo Pagina1.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div>Aqui, conteúdo para o login do tipo "Usuario comum"</div>
</body>
</html>
Listagem 7: Criando o arquivo Pagina2.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div>Aqui, conteúdo para o login do tipo "Adminitrador"</div>
</body>
</html>
O código deste artigo e o script do banco de dados utilizado estão em anexo para melhor
aproveitamento. Lembre-se que este controle de usuário é simples, servindo apenas como
base, podendo ser aplicadas a ele várias técnicas de controle como mencionado no início
deste artigo.
Caso tenha dúvidas, criticas ou sugestões, não esqueça de deixar nos comentários. É
sempre bom saber o que o leitor acha. Espero que tenham aproveitado e até o próximo
artigo.

Más contenido relacionado

La actualidad más candente

Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVCArawn Park
 
Solid Principles & Design patterns with PHP examples
Solid Principles & Design patterns with PHP examplesSolid Principles & Design patterns with PHP examples
Solid Principles & Design patterns with PHP examplesFederico Damián Lozada Mosto
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Thyago Maia
 
Spring Data JPA 실무 적용 How-To
Spring Data JPA 실무 적용 How-ToSpring Data JPA 실무 적용 How-To
Spring Data JPA 실무 적용 How-ToDongmin Shin
 
Don't Be Mocked by your Mocks - Best Practices using Mocks
Don't Be Mocked by your Mocks - Best Practices using MocksDon't Be Mocked by your Mocks - Best Practices using Mocks
Don't Be Mocked by your Mocks - Best Practices using MocksVictor Rentea
 
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspendCONNECT FOUNDATION
 
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdfInjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf정민 안
 
The Power of Composition (NDC Oslo 2020)
The Power of Composition (NDC Oslo 2020)The Power of Composition (NDC Oslo 2020)
The Power of Composition (NDC Oslo 2020)Scott Wlaschin
 
Melakukan Perbaikan dan atau Setting Ulang Sistem PC dan Perawatan PC
Melakukan Perbaikan dan atau Setting Ulang Sistem PC dan Perawatan PCMelakukan Perbaikan dan atau Setting Ulang Sistem PC dan Perawatan PC
Melakukan Perbaikan dan atau Setting Ulang Sistem PC dan Perawatan PCAnca Septiawan
 
2022 경희대학교 테크콘서트
2022 경희대학교 테크콘서트2022 경희대학교 테크콘서트
2022 경희대학교 테크콘서트JongyoonJeong1
 
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration수홍 이
 
[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자
[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자
[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자Yurim Jin
 
20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POPChiwon Song
 
Twitter 数据分析
Twitter 数据分析Twitter 数据分析
Twitter 数据分析wei teng
 

La actualidad más candente (20)

Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVC
 
Solid Principles & Design patterns with PHP examples
Solid Principles & Design patterns with PHP examplesSolid Principles & Design patterns with PHP examples
Solid Principles & Design patterns with PHP examples
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3
 
Spring Data JPA 실무 적용 How-To
Spring Data JPA 실무 적용 How-ToSpring Data JPA 실무 적용 How-To
Spring Data JPA 실무 적용 How-To
 
Don't Be Mocked by your Mocks - Best Practices using Mocks
Don't Be Mocked by your Mocks - Best Practices using MocksDon't Be Mocked by your Mocks - Best Practices using Mocks
Don't Be Mocked by your Mocks - Best Practices using Mocks
 
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend
 
Java VS Kotlin
Java VS KotlinJava VS Kotlin
Java VS Kotlin
 
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdfInjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
 
The Power of Composition (NDC Oslo 2020)
The Power of Composition (NDC Oslo 2020)The Power of Composition (NDC Oslo 2020)
The Power of Composition (NDC Oslo 2020)
 
Классы и объекты С#
Классы и объекты С#Классы и объекты С#
Классы и объекты С#
 
Melakukan Perbaikan dan atau Setting Ulang Sistem PC dan Perawatan PC
Melakukan Perbaikan dan atau Setting Ulang Sistem PC dan Perawatan PCMelakukan Perbaikan dan atau Setting Ulang Sistem PC dan Perawatan PC
Melakukan Perbaikan dan atau Setting Ulang Sistem PC dan Perawatan PC
 
iOS WebView App
iOS WebView AppiOS WebView App
iOS WebView App
 
2022 경희대학교 테크콘서트
2022 경희대학교 테크콘서트2022 경희대학교 테크콘서트
2022 경희대학교 테크콘서트
 
系統程式 -- 第 7 章
系統程式 -- 第 7 章系統程式 -- 第 7 章
系統程式 -- 第 7 章
 
RxSwift to Combine
RxSwift to CombineRxSwift to Combine
RxSwift to Combine
 
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
 
[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자
[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자
[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자
 
極める routes.php
極める routes.php極める routes.php
極める routes.php
 
20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP
 
Twitter 数据分析
Twitter 数据分析Twitter 数据分析
Twitter 数据分析
 

Destacado

Lagunas en la formación universitaria de los traductores europeos
Lagunas en la formación universitaria de los traductores europeosLagunas en la formación universitaria de los traductores europeos
Lagunas en la formación universitaria de los traductores europeosSarah Henter
 
Event Hacks: 5 things to look out for when choosing your venue
Event Hacks: 5 things to look out for when choosing your venueEvent Hacks: 5 things to look out for when choosing your venue
Event Hacks: 5 things to look out for when choosing your venuePeatix
 
Working Jams: What Music Should You Listen to on The Job?
Working Jams: What Music Should You Listen to on The Job?Working Jams: What Music Should You Listen to on The Job?
Working Jams: What Music Should You Listen to on The Job?Column Five
 
QNBFS Daily Market Report March 2, 2017
QNBFS Daily Market Report March 2, 2017QNBFS Daily Market Report March 2, 2017
QNBFS Daily Market Report March 2, 2017QNB Group
 
من تونس الى سويسرا ... الكل متعجبون؟
من تونس الى سويسرا ... الكل متعجبون؟من تونس الى سويسرا ... الكل متعجبون؟
من تونس الى سويسرا ... الكل متعجبون؟Hamdi Mohame Fadhel
 
2017 CR Atelier Lieux partagés et approches communautaires dans la fabrique d...
2017 CR Atelier Lieux partagés et approches communautaires dans la fabrique d...2017 CR Atelier Lieux partagés et approches communautaires dans la fabrique d...
2017 CR Atelier Lieux partagés et approches communautaires dans la fabrique d...Noémie Galvez
 
Multi-Manager Insights
Multi-Manager InsightsMulti-Manager Insights
Multi-Manager InsightsSTANLIB
 
Pesquisa de Mercado de RPG de Mesa 2016
Pesquisa de Mercado de RPG de Mesa 2016Pesquisa de Mercado de RPG de Mesa 2016
Pesquisa de Mercado de RPG de Mesa 2016AsterEditora
 
Announcements- Wednesday March 1, 2017
Announcements- Wednesday March 1, 2017Announcements- Wednesday March 1, 2017
Announcements- Wednesday March 1, 2017Ken Stayner
 

Destacado (13)

Lagunas en la formación universitaria de los traductores europeos
Lagunas en la formación universitaria de los traductores europeosLagunas en la formación universitaria de los traductores europeos
Lagunas en la formación universitaria de los traductores europeos
 
Event Hacks: 5 things to look out for when choosing your venue
Event Hacks: 5 things to look out for when choosing your venueEvent Hacks: 5 things to look out for when choosing your venue
Event Hacks: 5 things to look out for when choosing your venue
 
Working Jams: What Music Should You Listen to on The Job?
Working Jams: What Music Should You Listen to on The Job?Working Jams: What Music Should You Listen to on The Job?
Working Jams: What Music Should You Listen to on The Job?
 
QNBFS Daily Market Report March 2, 2017
QNBFS Daily Market Report March 2, 2017QNBFS Daily Market Report March 2, 2017
QNBFS Daily Market Report March 2, 2017
 
Blogging for business
Blogging for businessBlogging for business
Blogging for business
 
من تونس الى سويسرا ... الكل متعجبون؟
من تونس الى سويسرا ... الكل متعجبون؟من تونس الى سويسرا ... الكل متعجبون؟
من تونس الى سويسرا ... الكل متعجبون؟
 
2017 CR Atelier Lieux partagés et approches communautaires dans la fabrique d...
2017 CR Atelier Lieux partagés et approches communautaires dans la fabrique d...2017 CR Atelier Lieux partagés et approches communautaires dans la fabrique d...
2017 CR Atelier Lieux partagés et approches communautaires dans la fabrique d...
 
Multi-Manager Insights
Multi-Manager InsightsMulti-Manager Insights
Multi-Manager Insights
 
Pesquisa de Mercado de RPG de Mesa 2016
Pesquisa de Mercado de RPG de Mesa 2016Pesquisa de Mercado de RPG de Mesa 2016
Pesquisa de Mercado de RPG de Mesa 2016
 
Announcements- Wednesday March 1, 2017
Announcements- Wednesday March 1, 2017Announcements- Wednesday March 1, 2017
Announcements- Wednesday March 1, 2017
 
Recull de premsa #Figueres - 01/03/2017
Recull de premsa #Figueres - 01/03/2017Recull de premsa #Figueres - 01/03/2017
Recull de premsa #Figueres - 01/03/2017
 
Funny Money
Funny MoneyFunny Money
Funny Money
 
Technology in Restaurants
Technology in RestaurantsTechnology in Restaurants
Technology in Restaurants
 

Similar a Criando controle de acesso com php e my sql

ZF Básico - 6. Autenticação
ZF Básico - 6. AutenticaçãoZF Básico - 6. Autenticação
ZF Básico - 6. AutenticaçãoMarcos Bezerra
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - TabelasDalton Martins
 
modernizando a arquitertura de sua aplicação
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicaçãoAntonio Spinelli
 
Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUIDouglas Lira
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que pareceImpacta Eventos
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 
J query javascript para seres humanos
J query   javascript para seres humanosJ query   javascript para seres humanos
J query javascript para seres humanosnobios
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
 
jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão GeralKaio Valente
 
Pg2
Pg2Pg2
Pg2csmp
 
Pgads42
Pgads42Pgads42
Pgads42csmp
 
Hooks, o condimento mágico e escondido do WordPress
Hooks, o condimento mágico e escondido do WordPressHooks, o condimento mágico e escondido do WordPress
Hooks, o condimento mágico e escondido do WordPressZé Fontainhas
 
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebDalton Martins
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php segurosDouglas V. Pasqua
 

Similar a Criando controle de acesso com php e my sql (20)

ZF Básico - 6. Autenticação
ZF Básico - 6. AutenticaçãoZF Básico - 6. Autenticação
ZF Básico - 6. Autenticação
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - Tabelas
 
modernizando a arquitertura de sua aplicação
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicação
 
PHP ao Extremo
PHP ao ExtremoPHP ao Extremo
PHP ao Extremo
 
Aula 8 php
Aula 8 phpAula 8 php
Aula 8 php
 
Bread board
Bread boardBread board
Bread board
 
Sistema php
Sistema phpSistema php
Sistema php
 
Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUI
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
J query javascript para seres humanos
J query   javascript para seres humanosJ query   javascript para seres humanos
J query javascript para seres humanos
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Phpex2
Phpex2Phpex2
Phpex2
 
jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão Geral
 
Pg2
Pg2Pg2
Pg2
 
Pgads42
Pgads42Pgads42
Pgads42
 
Hooks, o condimento mágico e escondido do WordPress
Hooks, o condimento mágico e escondido do WordPressHooks, o condimento mágico e escondido do WordPress
Hooks, o condimento mágico e escondido do WordPress
 
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
 

Criando controle de acesso com php e my sql

  • 1. Nos sistemas web que costumamos acessar hoje em dia é comum vermos controles de usuários. Um exemplo seria o de sistemas de publicações de artigos ou textos onde temos vários tipos de usuários como: Editor, Publicador, Revisor, etc, onde cada um possui privilégios diferentes de acesso às páginas do sistema/site. Neste artigo vamos abordar uma ideia básica de criação de controle de acesso, onde teremos: Tela de Login; Tela de Cadastro de Usuário; Funções que irão manipular os dados (cadastro no banco / verificação dos privilégios). É um sistema simples, mas que pode ser tomado como base para a implementação de sistemas de controle bastante complexos com sessions, cookies, e assim por diante. O 1º passo é criarmos nossa index.php onde ficará nosso formulário de login e um link para efetivar um cadastro, caso não possua.
  • 2. Listagem 1: Criando arquivo index.php <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div> Login </div> <form action="controle.php" method="post"> <input type="text" name="login" value="" /> <input type="password" name="senha" value="" /> <input type="submit" name="enviar" value="Login"/> <a href="cadastrar.php">Sem cadastro?</a> </form> </body> </html> Figura 1: Formulário de login Após a criação deste arquivo vamos criar o formulário de cadastro de usuário, assim, quem não possuir login e senha poderá realizar um cadastro rápido. Listagem 2: Criando o arquivo cadastrar.php <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head>
  • 3. <body> <div> Cadastro de usuário </div> <form action="controle.php" method="post"> <label>Login</label> <input type="text" name="login" value="" /><br /> <label>Senha</label> <input type="password" name="senha" value="" /><br /> <label>Tipo de usuário</label> <select name="tipo_usuario"> <option value="">Selecione</option> <option value="1">Usuario Comum</option> <option value="2">Administrador</option> </select><br /> <input type="submit" name="cadastrar" value="cadastrar"/> </form> </body> </html> Figura 2: Formulário de cadastro de usuário Com nossos formulários prontos, vamos prosseguir criando um controle para verificar se a requisição é de um cadastro novo ou se é de um login. Para tal, vamos criar o arquivo controler.php.
  • 4. Listagem 3: Criando o arquivo controle.php <?php //utilização de namespaces namespace controle; include 'processaAcesso.php'; use processaAcesso as processaAcesso; $controle = new processaAcessoProcessaAcesso; if ($_POST['enviar']) { $login = $_POST['login']; $senha = md5($_POST['senha']); $usuario = $controle->verificaAcesso($login, $senha); //redirecionando para pagina conforme o tipo do usuário if ($usuario[0]['id_tipo_acesso'] == 1) { header("Location:paginas/pagina1.html"); } else if ($usuario[0]['id_tipo_acesso'] == 2) { header("Location:paginas/pagina2.html"); } } else if ($_POST['cadastrar']) { $login = $_POST['login']; $senha = md5($_POST['senha']); $tipo_usuario = $_POST['tipo_usuario']; $arr = array('login_usuario' => $login, 'senha_usuario' => $senha, 'id_tipo_acesso' => $tipo_usuario); if (!$controle->cadastraUsuario($arr)) { echo 'Aconteceu algum erro'; } else { $tipo_acesso = $controle->verificaAcesso($login, $senha); if ($tipo_acesso[0]['id_tipo_acesso'] == 1) { header("Location:paginas/pagina1.html"); } else if ($tipo_acesso[0]['id_tipo_acesso'] == 2) { header("Location:paginas/pagina2.html"); } } } ?> Agora já sabemos se é uma requisição de login ou é um cadastro de usuário recente. Nosso próximo passo é criar outro controler para inserir novos usuários e para verificar qual
  • 5. o tipo de perfil que o usuário possui. Esse controler conversa diretamente com o controler criado anteriormente (controler.php). Listagem 4: Criando o arquivo processaAcesso.php <?php //utilização de namespaces namespace processaAcesso { include 'conexao/mysql.php'; use Mysql as Mysql; class ProcessaAcesso { var $db; public function __construct() { $conexao = new Mysqlmysql(DB_SERVER, DB_NAME, DB_USERNAME, DB_PASSWORD); $this->db = $conexao; } public function verificaAcesso($login, $senha) { $select = $this->db->select('tb_usuario', '*', " where login_usuario = '$login' and senha_usuario = '$senha'"); return $select; } public function cadastraUsuario($dados){ $insert = $this->db->insert('tb_usuario', $dados); return $insert; } } } ?> Para a lógica da nossa aplicação ficar completa, falta a comunicação com a base de dados correto? Então vamos criar um controle para podermos realizar o CRUD. Listagem 5: Criando o arquivo mysql.php dentro da pasta conexão <?php //utilização de namespaces namespace Mysql { //declaração de variáres globais define('DB_SERVER', 'localhost'); define('DB_NAME', 'acesso'); define('DB_USERNAME', 'root'); define('DB_PASSWORD', '');
  • 6. class mysql { var $db, $conn; public function __construct($server, $database, $username, $password) { $this->conn = mysql_connect($server, $username, $password); $this->db = mysql_select_db($database, $this->conn); } /** * Função de seleção dos registros da tabela * @param string $tabela tabela onde será buscado os registros * @param string $colunas string contendo as colunas separadas por virgula para seleção, se null busca por todas * */ public function select($tabela, $colunas = "*", $where = "1=1") { $sql = "SELECT $colunas FROM $tabela $where"; $result = $this->executar($sql); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $return[] = $row; } return $return; } /** * Função para inserir dados na tabela * @param array $dados Array contendo os dados a serem inseridos * @param string $tabela tabela que será inserido os dados * @return boolean verdadeiro ou falso */ public function insert($tabela, $dados) { foreach ($dados as $key => $value) { $keys[] = $key; $insertvalues[] = ''' . $value . '''; } $keys = implode(',', $keys); $insertvalues = implode(',', $insertvalues); $sql = "INSERT INTO $tabela ($keys) VALUES ($insertvalues)"; return $this->executar($sql); } private function executar($sql) { $return_result = mysql_query($sql, $this->conn); if ($return_result) { return $return_result; } else { $this->sql_error($sql); } }
  • 7. private function sql_error($sql) { echo mysql_error($this->conn) . '<br>'; die('error: ' . $sql); } } } ?> Pronto! Nossa lógica está toda montada. Para verificarmos a diferença dos acessos em relação ao tipo do usuário, vamos criar uma pasta chamada “Paginas” e dentro dela 2 arquivos, um para determinado tipo de usuário e outro para outro tipo. Listagem 6: Criando o arquivo Pagina1.html <!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div>Aqui, conteúdo para o login do tipo "Usuario comum"</div> </body> </html> Listagem 7: Criando o arquivo Pagina2.html <!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div>Aqui, conteúdo para o login do tipo "Adminitrador"</div> </body> </html> O código deste artigo e o script do banco de dados utilizado estão em anexo para melhor aproveitamento. Lembre-se que este controle de usuário é simples, servindo apenas como
  • 8. base, podendo ser aplicadas a ele várias técnicas de controle como mencionado no início deste artigo. Caso tenha dúvidas, criticas ou sugestões, não esqueça de deixar nos comentários. É sempre bom saber o que o leitor acha. Espero que tenham aproveitado e até o próximo artigo.