PI S2 DSW II DouglasARS

De IFSC
Ir para navegação Ir para pesquisar

Apresentação

Olá Estudante,

Nessa segunda semana vamos registrar as equipes e o modelo conceitual escolhido. O próximo passo é a criação dos formulários (telas) e a conexão com o banco de dados. Lembre-se! A modelagem de dados já deve ter sido realizada e o código SQL gerado para criação no banco de dados MySQL. Para essa atividade as telas/formulários serão feitas ou preparadas com HTML/PHP, de acordo com o sistema escolhido. Se a sua equipe tem alternativa ao modelo de desenvolvimento escolhido, entre em contato. É importante rever a instalação dos aplicativos utilizados no desenvolvimento de sistemas Web, como o LAMP ou WAMP (Linux/Windows, Apache, MySQL e PHP).

Não se preocupem com as cores e formatos de formulários, fontes e da própria tela. Utilizem os softwares que vocês praticaram nas unidades curriculares anteriores, como o próprio Netbeans. Aproveitando o que já tem pronto você reduzirá o trabalho e não precisarão criar tudo do zero.

Boa programação!

Fiquem atentos as postagens no Fórum e participem dos nossos encontros virtuais.

Estamos a disposição!

Prof. Douglas A.

Objetivos

  • Registrar equipes e sistemas;
  • Apresentar a criação formulários;
  • Acesso ao banco de dados MySQL.

Equipes Registradas

Joinville

  • Edson, Antonio e Luciane - Tema: Aluguel de carros
  • Francisco, José Luis e Kleber - Donativos para uma igreja
  • Jorge - Reservas de Hotel.

Tubarão

Equipe 1: Anderson, Bruno, Lucas e Marcos. Tema: Reserva de hotéis.

Equipe 2: Clailson, Mariselma, Mislaine e Talita. Tema: Locadora de carros.

Equipe 3: Emerson, Filipe e Fillipe. Tema: Donativos para igreja.

Laguna

Grupo 1: Aluguel de Carros

Marcos Paulo Vicente de Oliveira
Karoline Dias Carvalho Dimiras
Luana Gomes da Silva
Luis Eduardo Ulyssea Rollin

Grupo 2: Doações

Vander Ribeiro Figueiredo
Jussara Nilsen Jerônimo


Canelinha

  • Equipe 1: Ana Paula e Márcia;
  • Equipe 2: Diego.

Telas e banco de dados

Os sistemas propostos foram:

  1. Reservas em Hotéis
  2. Aluguel de Carros
  3. Donativos para uma Igreja

É necessário, a partir do modelo conceitual, criar esse banco de dados fisicamente. Para isso você precisa ter redesenhado o modelo conceitual no MySQLWorkbench ou no DBDesigner, respeitando os aspectos da tradução para o português dos nomes de campos e relacionamentos entre as tabelas. O uso dos softwares e criação do banco de dados, você encontra na unidade curricular anterior. Como foi falado na apresentação da unidade, vamos utilizar o conhecimento adquirido nas unidade anteriores para a concepção de um sistema web completo.

O vídeo abaixo mostra como criar os formulários (telas) inicias e um acesso ao banco de dados. Você também pode encontrar essas orientações no material didático da unidade. Atentem! Esse se trata apenas de um exemplo e dá uma ideia de partida para o desenvolvimento do sistema de vocês.

https://www.youtube.com/watch?v=_TjHKWdOF94

Fique atento! O vídeo trata de um exemplo utilizando o Windows, porém facilmente adaptável para o Linux/Ubuntu.

Como criar um sistema de login com PHP e MySQL

(por Tiagoo Belem (2009))


Antes de mais nada, é preciso que você já tenha conhecimento prévio de HTML e, se possível, PHP e MySQL para tornar as coisas mais fáceis. Nosso sistema será bem simples: um arquivo chamado seguranca.php, que deverá ser incluído no topo do seu site (em todas as páginas), fazendo a conexão com o banco de dados, além de possuir algumas funções usadas para redirecionar o visitante para o formulário de login (login.php) caso ele não esteja logado. Vamos ao trabalho: O que iremos definir primeiro é a tabela usada para armazenar os usuários do sistema:

CREATE TABLE IF NOT EXISTS `usuarios` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nome` varchar(100) NOT NULL,
  `usuario` varchar(50) NOT NULL,
  `senha` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `usuario` (`usuario`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Execute esse bloco SQL no seu banco de dados para criar a tabela usada pelo sistema. Depois disso, vamos ao formulário de login que você colocará dentro de um arquivo chamado login.php:


<form method="post" action="valida.php">
  <label>Usuário</label>
  <input type="text" name="usuario" maxlength="50" />
  
  <label>Senha</label>
  <input type="password" name="senha" maxlength="50" />
  
  <input type="submit" value="Entrar" />
</form>


Esse formulário, com apenas dois campos, manda pra página valida.php, que é um pequeno PHP que receberá os dados enviados pelo formulário, fará a validação deles e mandará o visitante ou pra página interna (index.php) ou de volta pra página de login (login.php).

Esse é o codigo fonte do arquivo valida.php:

<?php
// Inclui o arquivo com o sistema de segurança
require_once("seguranca.php");
// Verifica se um formulário foi enviado
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  // Salva duas variáveis com o que foi digitado no formulário
  // Detalhe: faz uma verificação com isset() pra saber se o campo foi preenchido
  $usuario = (isset($_POST['usuario'])) ? $_POST['usuario'] : '';
  $senha = (isset($_POST['senha'])) ? $_POST['senha'] : '';
  // Utiliza uma função criada no seguranca.php pra validar os dados digitados
  if (validaUsuario($usuario, $senha) == true) {
    // O usuário e a senha digitados foram validados, manda pra página interna
    header("Location: index.php");
  } else {
    // O usuário e/ou a senha são inválidos, manda de volta pro form de login
    // Para alterar o endereço da página de login, verifique o arquivo seguranca.php
    expulsaVisitante();
  }
}

A estrutura do seu site, até esse ponto, deve estar dessa forma:

../pasta_do_seu_site/index.php » Página intera a ser protegida
../pasta_do_seu_site/login.php » Página com o formulário de login
../pasta_do_seu_site/valida.php » Página que faz a validação dos dados do formulário


Agora vamos criar o arquivo seguranca.php na mesma pasta dos demais arquivos:

<?php
/**
* Sistema de segurança com acesso restrito
*
* Usado para restringir o acesso de certas páginas do seu site
*
* @author Thiago Belem <contato@thiagobelem.net>
* @link http://thiagobelem.net/
*
* @version 1.0
* @package SistemaSeguranca
*/
//  Configurações do Script
// ==============================
$_SG['conectaServidor'] = true;    // Abre uma conexão com o servidor MySQL?
$_SG['abreSessao'] = true;         // Inicia a sessão com um session_start()?
$_SG['caseSensitive'] = false;     // Usar case-sensitive? Onde 'thiago' é diferente de 'THIAGO'
$_SG['validaSempre'] = true;       // Deseja validar o usuário e a senha a cada carregamento de página?
// Evita que, ao mudar os dados do usuário no banco de dado o mesmo contiue logado.
$_SG['servidor'] = 'localhost';    // Servidor MySQL
$_SG['usuario'] = 'root';          // Usuário MySQL
$_SG['senha'] = '';                // Senha MySQL
$_SG['banco'] = 'test';            // Banco de dados MySQL
$_SG['paginaLogin'] = 'login.php'; // Página de login
$_SG['tabela'] = 'usuarios';       // Nome da tabela onde os usuários são salvos
// ==============================
// ======================================
//   ~ Não edite a partir deste ponto ~
// ======================================
// Verifica se precisa fazer a conexão com o MySQL
if ($_SG['conectaServidor'] == true) {
  $_SG['link'] = mysql_connect($_SG['servidor'], $_SG['usuario'], $_SG['senha']) or die("MySQL: Não foi possível conectar-se ao servidor [".$_SG['servidor']."].");
  mysql_select_db($_SG['banco'], $_SG['link']) or die("MySQL: Não foi possível conectar-se ao banco de dados [".$_SG['banco']."].");
}
// Verifica se precisa iniciar a sessão
if ($_SG['abreSessao'] == true)
  session_start();
/**
* Função que valida um usuário e senha
*
* @param string $usuario - O usuário a ser validado
* @param string $senha - A senha a ser validada
*
* @return bool - Se o usuário foi validado ou não (true/false)
*/
function validaUsuario($usuario, $senha) {
  global $_SG;
  $cS = ($_SG['caseSensitive']) ? 'BINARY' : '';
  // Usa a função addslashes para escapar as aspas
  $nusuario = addslashes($usuario);
  $nsenha = addslashes($senha);
  // Monta uma consulta SQL (query) para procurar um usuário
  $sql = "SELECT `id`, `nome` FROM `".$_SG['tabela']."` WHERE ".$cS." `usuario` = '".$nusuario."' AND ".$cS." `senha` = '".$nsenha."' LIMIT 1";
  $query = mysql_query($sql);
  $resultado = mysql_fetch_assoc($query);
  // Verifica se encontrou algum registro
  if (empty($resultado)) {
    // Nenhum registro foi encontrado => o usuário é inválido
    return false;
  } else {
    // Definimos dois valores na sessão com os dados do usuário
    $_SESSION['usuarioID'] = $resultado['id']; // Pega o valor da coluna 'id do registro encontrado no MySQL
    $_SESSION['usuarioNome'] = $resultado['nome']; // Pega o valor da coluna 'nome' do registro encontrado no MySQL
    // Verifica a opção se sempre validar o login
    if ($_SG['validaSempre'] == true) {
      // Definimos dois valores na sessão com os dados do login
      $_SESSION['usuarioLogin'] = $usuario;
      $_SESSION['usuarioSenha'] = $senha;
    }
    return true;
  }
}
/**
* Função que protege uma página
*/
function protegePagina() {
  global $_SG;
  if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
    // Não há usuário logado, manda pra página de login
    expulsaVisitante();
  } else if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
    // Há usuário logado, verifica se precisa validar o login novamente
    if ($_SG['validaSempre'] == true) {
      // Verifica se os dados salvos na sessão batem com os dados do banco de dados
      if (!validaUsuario($_SESSION['usuarioLogin'], $_SESSION['usuarioSenha'])) {
        // Os dados não batem, manda pra tela de login
        expulsaVisitante();
      }
    }
  }
}
/**
* Função para expulsar um visitante
*/
function expulsaVisitante() {
  global $_SG;
  // Remove as variáveis da sessão (caso elas existam)
  unset($_SESSION['usuarioID'], $_SESSION['usuarioNome'], $_SESSION['usuarioLogin'], $_SESSION['usuarioSenha']);
  // Manda pra tela de login
  header("Location: ".$_SG['paginaLogin']);
}

Não vai dar de explicar todas as funções do arquivo, mas todas elas estão devidamente comentadas e documentadas. Com esse arquivo nos conectamos automaticamente ao servidor MySQL, então se você usar outra forma pra fazer a conexão, vá na parte de configurações do seguranca.php e defina a variável $_SG['conectaServidor'] pra falso (false). O mesmo acontece pra sessão com a variável $_SG['abreSessao'].

Agora é só incluir essas linhas no topo de cada arquivo que deverá ter o acesso restrito:

Atenção!!!
<?php
include("seguranca.php"); // Inclui o arquivo com o sistema de segurança
protegePagina(); // Chama a função que protege a página

Quando vocês quiserem exibir o nome do usuário logado, é só fazer isso:

<?php
echo "Olá, " . $_SESSION['usuarioNome'];


Nota: Esse exemplo é apenas explicativo, você pode mudar o nome da tabela de usuários se preferir e depois é só alterar a variável no bloco de configurações dentro do seguranca.php.

Veja mais sobre escrever e pegar valores da sessão (coisa que acontece muito nesse sistema de login) no tópico Aprendendo a usar sessões no PHP. Viram como é fácil? Para quem quiser um tutorial mais detalhado, recomendo: Como criar um Sistema de Login com Níveis de Permissão (passo-a-passo). [3]

Organização da Semana 3

Já registramos as equipes e o sistema escolhido por cada uma delas, falamos da criação de telas e o acesso ao banco de dados. Na terceira semana vamos apresentar a primeira atividade obrigatória.

Até lá!


Prof. Douglas A.

Referências

[1] https://jonashenriquelima.wordpress.com/2012/11/04/pagina-em-php-criacao-da-tela-de-login/

[2] http://www.devmedia.com.br/phreeze-php-criando-uma-aplicacao-crud-em-10-minutos/30978

[3] http://blog.thiagobelem.net/criando-um-sistema-de-login-com-php-e-mysql



<< <> >>