Ir para conteúdo
_SDinfo

Sistema de login e perfil

Recommended Posts

É muito importante tornar a aplicação acessível aos usuário, garantir que eles poderão usufruir dela. Alguns sites não permite ao usuário fazer login caso a opção de cookie esteja desabilitada. Para contornar isso podemos utilizar session.

 

O sistema abaixo ainda não possui validação de dados como (email), mas está ainda é a primeira versão de uma aplicação web.

 

cabecalho.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt-br">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<?php
 echo '<title>Segurança Digital - ' . $page_title . '</title>';
?>

 <link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>

 

conectar.php

<?php
$dbc = mysqli_connect ('localhost', 'usuário', 'senha', 'login') or die ('Erro ao se conectar com o servidor MySQL');
?>

 

index.php

<?php
/*
Autor: Fábio Jânio
Contato: fabiojanio@segurancadigital.info
Site: www.segurancadigital.info
Blog: fabiojanio.blogspot.com
Licença: Está aplicação é totalmente livre de direitos autorais. Aproveite está liberdade!
*/
 require_once('inicia_sessao.php');
 require_once('cabecalho.php');
 require_once('conectar.php');

if  (empty($_SESSION['user_id'])) {
 require_once('login.php');
}
else {
require_once('navmenu.php');
echo '<p class="login">Você está logado como ' . $_SESSION['nome_de_usuario'] . '.</p>';

$query = "SELECT user_id FROM usuarios";
$registros = mysqli_query($dbc, $query);
$total = mysqli_num_rows($registros);
echo '<p class="login">Total de usuários cadastrados: ' . $total . '</p>';

}
 require_once('rodape.php');
?>

 

inicia_sessao.php

<?php
 session_start();
 if (!isset($_SESSION['user_id'])) {
   if (isset($_COOKIE['user_id']) && isset($_COOKIE['nome_de_usuario'])) {
     $_SESSION['user_id'] = $_COOKIE['user_id'];
     $_SESSION['nome_de_usuario'] = $_COOKIE['nome_de_usuario'];
   }
 }
?>

 

login.php

<?php
 require_once('conectar.php');

 session_start();
 $error_msg = "";

 if (!isset($_SESSION['user_id'])) {
   if (isset($_POST['submit'])) {

     $user_username = mysqli_real_escape_string($dbc, trim($_POST['nome_de_usuario']));
     $user_password = mysqli_real_escape_string($dbc, trim($_POST['senha']));

     if (!empty($user_username) && !empty($user_password)) {
       $query = "SELECT user_id, nome_de_usuario FROM usuarios WHERE nome_de_usuario = '$user_username' AND senha = MD5('$user_password')";
       $data = mysqli_query($dbc, $query);

       if (mysqli_num_rows($data) == 1) {
         $row = mysqli_fetch_array($data);
         $_SESSION['user_id'] = $row['user_id'];
         $_SESSION['nome_de_usuario'] = $row['nome_de_usuario'];
         setcookie('user_id', $row['user_id'], time() + (60 * 60 * 24 * 30));
         setcookie('nome_de_usuario', $row['nome_de_usuario'], time() + (60 * 60 * 24 * 30));
         $home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/login_efetuado.php';
         header('Location: ' . $home_url);
       }
       else {
         $error_msg = 'Desculpe, você deve digitar um nome e senha válidos para fazer login.';
       }
     }
     else {
       $error_msg = 'Desculpe, você deve digitar seu nome e senha para fazer login.';
     }
   }
 }

 $page_title = 'Fazer Login';
 require_once('cabecalho.php');

 if (empty($_SESSION['user_id'])) {
   echo '<p class="error">' . $error_msg . '</p>';
?>
<a href="registrar_se.php">Registrar-se</a>
<div id="quadro">
 <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
   <fieldset>
     <legend>Fazer Login</legend>
     <label for="nome_de_usuario">Nome de usuário:</label><br />
     <input type="text" size="35px" name="nome_de_usuario" value="<?php if (!empty($user_username)) echo $user_username; ?>" /><br />
     <label for="senha">Senha:</label><br />
     <input type="password" size="35px" name="senha" />
     <input type="submit" value="Fazer Login" name="submit" />
   </fieldset>
 </form>
</div>
<?php
 }
 else {
   echo('<p class="login">Você está logado como ' . $_SESSION['nome_de_usuario'] . '.</p>');
 }
?>

<?php
 require_once('rodape.php');
?>

 

login_efetuado.php

<?php

 require_once('inicia_sessao.php');
 require_once('proteger_pagina.php');

 $page_title = 'Storage Total';
 require_once('cabecalho.php');

 require_once('proteger_pagina.php');

$home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/index.php';
header("Refresh: 3; URL=$home_url");

echo ('<div id="login_efetuado"></div>');
echo ('<div id="bem_vindo">Seja bem vindo ao ' . $page_title . '!</div>');
echo ('<center>Aguarde, em breve você será redirecionado<br /></center>');
echo ('<center><br /><img src="imagens/aguarde.gif"></center>');
echo ('<div id="login_efetuado"></div>');

 require_once('rodape.php');
?>

 

logout.php

<?php
 session_start();
 if (isset($_SESSION['user_id'])) {
   $_SESSION = array();
   if (isset($_COOKIE[session_name()])) {
     setcookie(session_name(), '', time() - 3600);
   }
   session_destroy();
 }
 setcookie('user_id', '', time() - 3600);
 setcookie('nome_de_usuario', '', time() - 3600);
 $home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/index.php';
 header('Location: ' . $home_url);
?>

 

navmenu.php

<?php
 echo '<hr />';
 if (isset($_SESSION['nome_de_usuario'])) {
   echo '<a href="index.php">Página inicial</a> - ';
   echo '<a href="perfil.php">Perfil</a> - ';
   echo '<a href="logout.php">Sair (' . $_SESSION['nome_de_usuario'] . ')</a>';
 }
 else {
   echo '<a href="login.php">Fazer Login</a>';
 }
 echo '<hr />';
?>

 

perfil.php

<?php
 require_once('inicia_sessao.php');
 require_once('proteger_pagina.php');
 // Insert the page header
 require_once('cabecalho.php');
 require_once('conectar.php');

 // Menu de navegação
 require_once('navmenu.php');


 // Pegar os dados do perfil do banco de dados
 if (!empty($_SESSION['user_id'])) {
   $query = "SELECT nome_de_usuario, join_date, nome_completo, email FROM usuarios WHERE user_id = '" . $_SESSION['user_id'] . "'";
 }
 else {
   $query = "SELECT nome_de_usuario, join_date, nome_completo, email FROM usuarios WHERE user_id = '" . $_COOKIE['user_id'] . "'";
 }
 $data = mysqli_query($dbc, $query);

 if (mysqli_num_rows($data) == 1) {
   // Se o usuário for encontrado, exibir as informações
   $row = mysqli_fetch_array($data);
   echo '<table>';
   if (!empty($row['nome_de_usuario'])) {
     echo '<tr><td class="label">Nome de usuário:</td><td>' . $row['nome_de_usuario'] . '</td></tr>';
   }
   if (!empty($row['nome_completo'])) {
     echo '<tr><td class="label">Nome completo:</td><td>' . $row['nome_completo'] . '</td></tr>';
   }
   if (!empty($row['email'])) {
     echo '<tr><td class="label">E-mail:</td><td>' . $row['email'] . '</td></tr>';
   }
   if (!empty($row['join_date'])) {
list($data, $hora) = explode(' ', $row['join_date']);
list($ano, $mes, $dia) = explode('-', $data);
       echo '<tr><td class="label">Registrado:</td><td>' . $dia . '-' . $mes . '-' . $ano . ' / ' . $hora . '</td></tr>';
     }
   }
     echo '</td></tr>';
echo '</table>';

 mysqli_close($dbc);
?>

<?php
 // Rodapé
 require_once('rodape.php');
?>

 

proteger_pagina.php

<?php
 require_once('cabecalho.php');
 // Verifique se o usuário está logado antes de prosseguir.
 if (!isset($_SESSION['user_id'])) {
   echo '<p class="login">Faça <a href="login.php">login</a> para poder acessar essa página.</p>';
   exit();
 }
?>

registrar_se.php
<?php
 $page_title = 'Registrar-se';
 require_once('cabecalho.php');
 require_once('conectar.php');

 if (isset($_POST['submit'])) {
   $nome_de_usuario = mysqli_real_escape_string($dbc, trim($_POST['nome_de_usuario']));
   $nome_completo = mysqli_real_escape_string($dbc, trim($_POST['nome_completo']));
   $email = mysqli_real_escape_string($dbc, trim($_POST['email']));
   $senha1 = mysqli_real_escape_string($dbc, trim($_POST['senha1']));
   $senha2 = mysqli_real_escape_string($dbc, trim($_POST['senha2']));

   if (!empty($nome_de_usuario) && !empty($senha1) && !empty($senha2) && ($email)) {
if ($senha1 == $senha2) {
     $query = "SELECT * FROM usuarios WHERE nome_de_usuario = '$nome_de_usuario'";
     $data = mysqli_query($dbc, $query);
          if (mysqli_num_rows($data) == 0) {
          $query = "INSERT INTO usuarios (nome_de_usuario, senha, join_date, nome_completo, email) VALUES ('$nome_de_usuario', MD5('$senha1'), NOW(), '$nome_completo', '$email')";
          mysqli_query($dbc, $query);
          echo '<p>Cadastro efetuado com sucesso. Você será redirecionado em 5 segundos!</p>';
   $home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/index.php';
header("Refresh: 5; URL=$home_url");

          mysqli_close($dbc);
          exit();
          }
          else {
          echo '<p class="error">Já existe uma conta com este nome. Por favor, escolha outro nome</p>';
         $nome_de_usuario = "";
         }
     }
     else {
     echo '<p class="error">Os dois campos de senha não são iguais!</p>';
     }
   }
   else {
     echo '<p class="error">Você deve digitar todos os dados de login, incluindo a senha e o campo de verificação da senha.</p>';
   }
 }

 mysqli_close($dbc);
?>
<div id="quadro_registrar_se">
 <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
   <fieldset>
     <legend>Cadastre-se</legend>
     <label for="nome_completo">Nome completo:</label><br />
     <input type="text" size="50px" id="nome_completo" name="nome_completo" value="<?php if (!empty($nome_completo)) echo $nome_completo; ?>" /><br />
     <label for="email">*E-mail:</label><br />
     <input type="text" size="50px" id="email" name="email" value="<?php if (!empty($email)) echo $email; ?>" /><br />
     <label for="nome_de_usuario">*Nome de usuário:</label><br />
     <input type="text" id="nome_de_usuario" name="nome_de_usuario" value="<?php if (!empty($nome_de_usuario)) echo $nome_de_usuario; ?>" /><br />
     <label for="senha1">*Senha:</label><br />
     <input type="password" id="senha1" name="senha1" /><br />
     <label for="senha2">*Confirme a Senha:</label><br />
     <input type="password" id="senha2" name="senha2" /><br />
   </fieldset>
   <input type="submit" value="Enviar" name="submit" />
 </form>
</div>
<p>* Preenchimento obrigatório</p>
<?php
 require_once('rodape.php');
?>

 

rodape.php

  <hr />
 <p class="footer">Este código pode ser livremente distribuido. Autor: Fábio Jânio, http://www.twitter.com/_SDinfo</p>
</body>
</html>

 

style.css

.footer {
 text-align: center;
 font-size: 80%;
}

.error {
 font-weight: bold;
 color: #FF0000;
}
#msg {
 font-weight: bold;
 color: #FF0000;
}

.login {
 font-style: italic;
}

#quadro {
 display: block;
 width: 240px;
 margin-top: 50px;
 margin-left: 40%;
 margin-right: 60%;
 margin-bottom: 50px;
}
#quadro_registrar_se {
 display: block;
 width: 240px;
}

td.label {
 font-weight: bold;
}

img.profile {
 vertical-align: top;
}
#bem_vindo {
 text-align: center;
 font-size: 32px;
}
#login_efetuado {
 margin-top: 50px;
}

 

Código para gerar a tabela do banco: login

CREATE TABLE IF NOT EXISTS `usuarios` (
 `user_id` int(11) NOT NULL AUTO_INCREMENT,
 `nome_de_usuario` varchar(32) DEFAULT NULL,
 `senha` varchar(32) DEFAULT NULL,
 `join_date` datetime DEFAULT NULL,
 `nome_completo` varchar(60) DEFAULT NULL,
 `email` varchar(100) NOT NULL,
 PRIMARY KEY (`user_id`)
);

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você pretende com isso ? alguma dúvida e/ou erro .. se foi um script para perfis, não seria melhor postar no laboratório ?

 

Por algum motivo não consigo postar no laboratório. O ultimo código que postei aqui foi movido pra lá! Achei que deveria antes ser postado aqui e então um moderador o movia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem certesa que o sistema está funcionando ? e também ele está completo ? eu testei e vi que está faltando várias partes :natalsad: , mesmo assim agradeço

Editado por Daniel1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia. Utilizei este programa do Fabio Janio, o qual agradeço e parabenizo.

Deram os seguintes erros:

----ao registrar e enviar----
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /var/www/vhosts/olintronica.com/httpdocs/cadastro4/registrar_se.php on line 18

-----ao tentar o login apos registro ----
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /var/www/vhosts/olintronica.com/httpdocs/cadastro4/login.php on line 17.

 

As paginas PHP continuam com o mesmo nome. 

Abaixo a estrutura MySql do meu servidor com entrada manual coluna a coluna:

    Coluna                              Tipo                     Collation    Atributos    Nulo    Padrão    Extra    Ação
    1    user_id                        int(11)                                             Não    None    AUTO_INCREMENT    
    2    nome_do_usuario    varchar(32)    utf8_general_ci        Sim    NULL        
    3    senha                         varchar(32)    utf8_general_ci        Sim    NULL        
    4    join_date                    datetime                                            Sim    NULL      
    5    nome_completo       varchar(60)    utf8_general_ci        Sim    NULL        
    6    email                           varchar(100)    utf8_general_ci     Não    None        

 

Solicito que verifiquem o que fiz de errado por favor.

O usuario, login e nome do banco de dados foram colocados certos já que a opção de registro foi aceita.

Obrigado colegas.

  • -1 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
23 minutos atrás, Olinto Godinho R. Filho disse:

Bom dia. Utilizei este programa do Fabio Janio, o qual agradeço e parabenizo.

Deram os seguintes erros...

 

Bom dia,

não use tópicos antigos para postar sua dúvida. Crie um novo tópico e iremos lhe auxiliar.

https://forum.imasters.com.br/forum/3-php/

 

Aprenda a postar sua dúvida de forma correta, não pense que vamos procurar o sistema do Fabio, para resolver o erro. Poste o código para que possamos lhe auxiliar à resolver o problema.

Desculpe qualquer coisa e fique por dentro das regras da área.

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado por isso . Já resolvi grande parte do problema. Era a configuração da tabela no host que não foi bem definida. O problema agora são as funções de header e temporizador 3 segundos direcionando a outra pagina (paginas LOGIN_EFETUADO.PHP e   REGISTRAR_SE.PHP).

Vou tentar achar um substituto para o HEADER.

Obrigado e precisando de qualquer coisa na área de eletronica, CFTV e robótica estarei sempre a disposição. Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.