SlideShare uma empresa Scribd logo
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

Destaque

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 Insights
STANLIB
 
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
AsterEditora
 
Announcements- Wednesday March 1, 2017
Announcements- Wednesday March 1, 2017Announcements- Wednesday March 1, 2017
Announcements- Wednesday March 1, 2017
Ken Stayner
 
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
Ajuntament de Figueres
 
Funny Money
Funny MoneyFunny Money
Funny Money
Cowry Consulting
 
Technology in Restaurants
Technology in RestaurantsTechnology in Restaurants
Technology in Restaurants
SwiftTech Solutions, Inc.
 

Destaque (7)

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 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ção
Marcos Bezerra
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - Tabelas
Dalton 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ção
Antonio Spinelli
 
PHP ao Extremo
PHP ao ExtremoPHP ao Extremo
PHP ao Extremo
Thiago Rigo
 
Aula 8 php
Aula 8 phpAula 8 php
Aula 8 php
sergio_henrique
 
Bread board
Bread boardBread board
Bread board
André Walker
 
Sistema php
Sistema phpSistema php
Sistema php
Nuno Bastos
 
Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUI
Douglas Lira
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
Michael Castillo Granados
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
Impacta Eventos
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
grupoweblovers
 
J query javascript para seres humanos
J query   javascript para seres humanosJ query   javascript para seres humanos
J query javascript para seres humanos
nobios
 
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
Michel Ribeiro
 
Phpex2
Phpex2Phpex2
jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão Geral
Kaio Valente
 
Pg2
Pg2Pg2
Pg2
csmp
 
Pgads42
Pgads42Pgads42
Pgads42
csmp
 
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
Zé 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 Web
Dalton Martins
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
Douglas V. Pasqua
 

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