Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

_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`)
);

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

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.

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

×

Informação importante

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