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

Criando controle de acesso com php e my sql

Embed Size (px)

DESCRIPTION

MySQL

Citation preview

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 namespacesnamespace controle;include 'processaAcesso.php';use processaAcesso as processaAcesso;$controle = new \processaAcesso\ProcessaAcesso;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 namespacesnamespace processaAcesso {include 'conexao/mysql.php'; use Mysql as Mysql; class ProcessaAcesso { var $db; public function __construct() { $conexao = new Mysql\mysql(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 namespacesnamespace 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 separadaspor 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.