SlideShare uma empresa Scribd logo
1 de 8
Baixar para ler offline
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.

Mais conteúdo relacionado

Mais procurados

Cours linux complet
Cours linux completCours linux complet
Cours linux completaubin82
 
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호KTH, 케이티하이텔
 
Do you know what your Drupal is doing_ Observe it!
Do you know what your Drupal is doing_ Observe it!Do you know what your Drupal is doing_ Observe it!
Do you know what your Drupal is doing_ Observe it!sparkfabrik
 
kpackによるコンテナイメージのビルド
kpackによるコンテナイメージのビルドkpackによるコンテナイメージのビルド
kpackによるコンテナイメージのビルドMasanori Nara
 
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)I Goo Lee
 
[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow석환 홍
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpointNAVER D2
 
Tanzu Mission Control における Open Policy Agent (OPA) の利用
Tanzu Mission Control における Open Policy Agent (OPA) の利用Tanzu Mission Control における Open Policy Agent (OPA) の利用
Tanzu Mission Control における Open Policy Agent (OPA) の利用Motonori Shindo
 
Mongoose: MongoDB object modelling for Node.js
Mongoose: MongoDB object modelling for Node.jsMongoose: MongoDB object modelling for Node.js
Mongoose: MongoDB object modelling for Node.jsYuriy Bogomolov
 
프론트엔드 코딩 컨벤션 자동화 도구
프론트엔드 코딩 컨벤션 자동화 도구프론트엔드 코딩 컨벤션 자동화 도구
프론트엔드 코딩 컨벤션 자동화 도구Taegon Kim
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드Insub Lee
 
VPN - Virtual Private Network
VPN - Virtual Private NetworkVPN - Virtual Private Network
VPN - Virtual Private Networkjulienlfr
 
Swagger pour documenter votre REST API - présentation en français
Swagger pour documenter votre REST API - présentation en françaisSwagger pour documenter votre REST API - présentation en français
Swagger pour documenter votre REST API - présentation en françaisMartin Yung
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングTomoya Hibi
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912Yooseok Choi
 

Mais procurados (20)

Cours linux complet
Cours linux completCours linux complet
Cours linux complet
 
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
 
Do you know what your Drupal is doing_ Observe it!
Do you know what your Drupal is doing_ Observe it!Do you know what your Drupal is doing_ Observe it!
Do you know what your Drupal is doing_ Observe it!
 
kpackによるコンテナイメージのビルド
kpackによるコンテナイメージのビルドkpackによるコンテナイメージのビルド
kpackによるコンテナイメージのビルド
 
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
 
[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow
 
App check pro_표준제안서_z
App check pro_표준제안서_zApp check pro_표준제안서_z
App check pro_표준제안서_z
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpoint
 
Tanzu Mission Control における Open Policy Agent (OPA) の利用
Tanzu Mission Control における Open Policy Agent (OPA) の利用Tanzu Mission Control における Open Policy Agent (OPA) の利用
Tanzu Mission Control における Open Policy Agent (OPA) の利用
 
Mongoose: MongoDB object modelling for Node.js
Mongoose: MongoDB object modelling for Node.jsMongoose: MongoDB object modelling for Node.js
Mongoose: MongoDB object modelling for Node.js
 
프론트엔드 코딩 컨벤션 자동화 도구
프론트엔드 코딩 컨벤션 자동화 도구프론트엔드 코딩 컨벤션 자동화 도구
프론트엔드 코딩 컨벤션 자동화 도구
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드
 
Multithreading
MultithreadingMultithreading
Multithreading
 
VPN - Virtual Private Network
VPN - Virtual Private NetworkVPN - Virtual Private Network
VPN - Virtual Private Network
 
Rich domain model
Rich domain modelRich domain model
Rich domain model
 
Swagger pour documenter votre REST API - présentation en français
Swagger pour documenter votre REST API - présentation en françaisSwagger pour documenter votre REST API - présentation en français
Swagger pour documenter votre REST API - présentation en français
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
 
EC CUBE 3.0.x installation guide
EC CUBE 3.0.x installation guideEC CUBE 3.0.x installation guide
EC CUBE 3.0.x installation guide
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
 

Destaque

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
 

Destaque (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
 

Semelhante a Sistema de controle de acesso básico com PHP

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
 
Pgads42
Pgads42Pgads42
Pgads42csmp
 
Pg2
Pg2Pg2
Pg2csmp
 
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
 

Semelhante a Sistema de controle de acesso básico com PHP (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
 
Pgads42
Pgads42Pgads42
Pgads42
 
Pg2
Pg2Pg2
Pg2
 
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
 

Sistema de controle de acesso básico com PHP

  • 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.