Jump to content
Rafael Freitas

Exibir página somente para usuarios logados

Recommended Posts

Boa noite galera!

 

Estou precisando de uma força, seguinte:

Eu tenho um sisteminha de login e senha funcionando normalmente. Porém, a página que seria "restrita somente à usuários logado" está acessível para qualquer um, se esse tentar acessar pela url.

 

Como faço pra restringir aquela página somente para quem estiver logado. Caso não esteja, direcionar para a página de login novamente.

 

Segue o código:

<?php
	session_start();	
	//Incluindo a conexão com banco de dados
	include_once("conexao.php");	
	//O campo usuário e senha preenchido entra no if para validar
	if((isset($_POST['email'])) && (isset($_POST['senha']))){
		$usuario = mysqli_real_escape_string($conn, $_POST['email']); //Escapar de caracteres especiais, como aspas, prevenindo SQL injection
		$senha = mysqli_real_escape_string($conn, $_POST['senha']);
		$senha = md5($senha);
			
		//Buscar na tabela usuario o usuário que corresponde com os dados digitado no formulário
		$result_usuario = "SELECT * FROM usuarios WHERE email = '$usuario' && senha = '$senha' LIMIT 1";
		$resultado_usuario = mysqli_query($conn, $result_usuario);
		$resultado = mysqli_fetch_assoc($resultado_usuario);
		
		//Encontrado um usuario na tabela usuário com os mesmos dados digitado no formulário
		if(isset($resultado)){
			$_SESSION['usuarioId'] = $resultado['id'];
			$_SESSION['usuarioNome'] = $resultado['nome'];
			$_SESSION['usuarioNiveisAcessoId'] = $resultado['niveis_acesso_id'];
			$_SESSION['usuarioEmail'] = $resultado['email'];
			if($_SESSION['usuarioNiveisAcessoId'] == "1"){
				header("Location: administrativo.php");
			}elseif($_SESSION['usuarioNiveisAcessoId'] == "2"){
				header("Location: colaborador.php");
			}else{
				header("Location: cliente.php");
			}
		//Não foi encontrado um usuario na tabela usuário com os mesmos dados digitado no formulário
		//redireciona o usuario para a página de login
		}else{	
			//Váriavel global recebendo a mensagem de erro
			$_SESSION['loginErro'] = "Usuário ou senha Inválido";
			header("Location: index.php");
		}
	//O campo usuário e senha não preenchido entra no else e redireciona o usuário para a página de login
	}else{
		$_SESSION['loginErro'] = "Usuário ou senha inválido";
		header("Location: index.php");
	}
?>

Ainda estou começando no PHP,  quem puder dar uma força, agradeço! =)

 

Abraço.

Share this post


Link to post
Share on other sites

Olá, se você já criou a SESSION após o usuário logar, fica fácil. Agora, na página que você quer restringir, você só precisar verificar se a SESSION existe, ex:

 

session_start();
if(!isset($_SESSION['login']) AND !isset($_SESSION['senha'])){
	header("Location:index.php");
}

Adicione no topo da página a verificação, pode adicionar isso num método e chamar também, assim se precisar restringir varias páginas, só chamar o método. Só adaptar para o seu projeto.

 

É uma forma simples e funcional.

Share this post


Link to post
Share on other sites

Ola, completando o comentário do nosso colega acima. Crie uma página em php tipo ---> verifica_login.php

E adicione o código Como nesse exemplo:

 

<?php
session_start();
if(!$_SESSION['usuario']) {
    header('Location: index.php');
    exit();
}
?>

E toda pagina que precisara restringir adicione no topo

 

<?php
session_start();
include('verifica_login.php');
?>

 

Espero ter ajudado

 

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By soaresra
      Olá colegas, eu venho avançando a cada dia na programação em PHP mas eu travei em uma estrutura e queria a ajuda dos colegas mais experientes.
       
      Eu tenho 3 tabelas:
      Adm_Funcionarios_Usuarios - contem login e senha
      # login,  senha
          jose,  1234
       
      Sis_Setores: aonde tem os nomes dos módulos e os links dele. Ex. Administrativo, Financeiro, etc.
      # linkNome          link
      administrativo     administrativo.php
      financeiro             financeiro.php
      vendas                  vendas.php
       
      Adm_Funcionarios_Usuarios_Acessos - contem login e módulos
      # login,  autorizados
           jose,  administrativo, financeiro
       
      Hoje eu só uso o menu carregando todas as opções
      $sql = "SELECT * FROM Sis_Setores WHERE linkNome = '$Sistema' AND situacao = 1;"; $return = mysqli_query($conexao, $sql) or trigger_error(" Query falhou! SQL: $sql - Error: ".mysqli_error(), E_USER_ERROR); while($LinhaMenu = mysqli_fetch_assoc($return)) { echo '<a href="'.$LinhaMenu["link"].'" target="_self">'.$LinhaMenu["linkNome"]."</a>"; } O que eu estou tentando fazer é: (levando em consideração que eu já tenha as informações do usuário logado)
       
      1 - Verifica quem é a pessoa logada / Já tenho isso pronto
      2 - Verifica se a pessoa logada existe na tabela Adm_Funcionarios_Usuarios_Acessos no campo login / Já tenho isso pronto
       
      Não estou conseguindo fazer
       
      3 - Verifica na tabela Adm_Funcionarios_Usuarios_Acessos o campo autorizados os módulos que serão carregados
      4 - Percorre a array com os valores, exemplo: administrativo, vendas
      5 - Se existe na array a palavra administrativo que também existe no campo linkNome da tabela Sis_Setores
      6 - Carrega no menu apenas os links que existem dentro da array.
       
      O que eu tentei fazer sem sucesso (coisas de café com leite):
       
      $sql = "SELECT autorizados FROM Adm_Funcionarios_Usuarios_Acessos WHERE iduser = 1;"; $return = mysqli_query($conexao, $sql) or die(mysqli_error($conexao)); if(!$result = mysqli_fetch_array($return)) { echo "Deu Ruim no SQL dos Acessos"; } else { $autorizados = $result["autorizados"]; //echo $autorizados; foreach($autorizados as $valor) { $sql = "SELECT * FROM Sis_Setores WHERE linkNome = '$autorizados' AND situacao = 1;"; $return = mysqli_query($conexao, $sql) or trigger_error(" Query falhou! SQL: $sql - Error: ".mysqli_error(), E_USER_ERROR); while($LinhaMenu = mysqli_fetch_assoc($LinksSubSistema)) { echo '<a href="'.$LinhaMenu["link"].'" target="_self">'.$LinhaMenu["linkNome"]."</a>".$br; } } } O erro que dá é 
      Warning: Invalid argument supplied for foreach() in testeArray.php on line 50 //Linha 50 -> foreach($autorizados as $valor)
       
      Agradeço desde já aos colegas.
       
       
       
       
       
       
       
    • By samuelpanamericana
      Olá Pessoal, estou com um problema com relação ao Oracle em nossas máquinas aqui! Quando tentamos acessar o SGT (sistema de gerenciamento textil) através de um usuário de rede comum sem privilégios administrativos na máquina ele apresenta o seguinte erro ERRO: "Oracle não instalado ou seu caminho é inválido. Consulte o seu superior [\Bin\ORA803.dll]" Código de erro 803 O usuário não tem acesso ao Oracle Path por ser um usuário comum sem privilégios administrativos, devido a problemas de segurança não queremos deixar os usuários com privilégios administrativos evitando assim problemas com a alteração e instalação de programas, abrimos esse tópico para resolver este problema da necessidade de ser um administrador da máquina para executar o SGT, precisamos que usuários sejam comuns para acessá-lo! Confirmei que o usuário está tendo privilégios apropriados no caminho binário Oracle. Os usuários têm acesso completo ao caminho "C: \ Oracle", eu já configurei dessa maneira: Cliquei com o botão direito do mouse na pasta oracle/segurança/usuários do domínio/controle total A única maneira que nosso programa(SGT) pode encontrar a pasta oracle é definir os usuários do domínio para o grupo de administradores Porém tivemos alguns problemas ao fazer isso como por exemplo usuarios instalando programas de terceiro e efetuando alterações nas máquinas. Se alguém já passou pela mesma situação ou situação parecida eu ficaria grato se pudessem ajudar!! Atenciosamente Samuel
    • By Vinicius-Visanfe
      Ola tenho esses arquivos.
       
      // Esse arquivo usuarios.php tem a conexao e a parte de login e cadastro.
      ?php   class Usuario{   private $pdo;   //Construtor public function __construct($dbname, $host, $username, $password){ try { $this->pdo = new PDO("mysql:dbname=".$dbname.";host=".$host, $username, $password); } catch (PDOException $e) { echo "Erro com BD: ".$e->getMessage(); }catch (Exception $e) { echo "Erro: ".$e->getMessage(); } }   //Cadastrar public function cadastrar($nome, $telefone, $email, $cpf, $bairro, $cidade, $senha){   //Antes de cadastrar verificar se ja esta cadastrado $cmd = $this->pdo->prepare("SELECT id from usuarios WHERE email = :e"); $cmd->bindValue(":e",$email); $cmd->execute(); if($cmd->rowCount() > 0) //Veio id { return false; }else // Não veio id { //Cadastrar $cmd = $this->pdo->prepare("INSERT INTO usuarios (nome, telefone, email, cpf, bairro, cidade, senha) values (:n, :t, :e, :c, :b, :d, :s)"); $cmd->bindValue(":n",$nome); $cmd->bindValue(":t",$telefone); $cmd->bindValue(":e",$email); $cmd->bindValue(":c",$cpf); $cmd->bindValue(":b",$bairro); $cmd->bindValue(":d",$cidade); $cmd->bindValue(":s",md5($senha)); $cmd->execute(); return true; }     }   //Logar public function entrar($email, $senha) { $cmd = $this->pdo->prepare("SELECT * from usuarios WHERE email = :e AND senha = :s"); $cmd->bindValue(":e",$email); $cmd->bindValue(":s",md5($senha)); $cmd->execute(); if($cmd->rowCount() > 0) //Se foi encontrado essa pessoa { $dados = $cmd->fetch();   if($dados['id'] == 1) { //Usuario ADM $_SESSION['id_master'] = 1; }else{ //Usuario Normal $_SESSION['id_usuario'] = $dados['id']; } return true; //Usuário encontrado }else{ return false; //Usuário não foi encontrado } }   } ?>   // Ja esse arquivo meu-perfil.php seria o Perfil de usuario   html lang="pt-br"> <head> <title>Meu perfil - Pé na Estrada</title>   <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="../css/style.css"> <link rel="stylesheet" href="../css/perfil.css">     <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">   </head> <body> <header class="cabecalho"> <div class="container"> <div class="caixa-cabecalho"> <h1 class="logo"><img class="logo-pe" src="../images/logotipo-pne.png" width="50%"></h1> <button class="btn-menus"><a class="btns">Cadastrar <i class="fas fa-home"></i></button> <button class="btn-menul"><a class="btnl" href="">Sair <i class="fas fa-sign-out-alt"></i></i></a></button> </div> </div> </header> <main> <div class="container"> <div class="caixa-conteudo">   </div> </div> </main> <footer class="rodape"> <div class="container"> <div class="caixa-rodape"> <p class="titulo-rodape">Sobre</p><br> <a href="#" class="texto-rodape">Inicio</a> <a href="#" class="texto-rodape">Termos de Uso</a> <a href="#" class="texto-rodape">Pontos Turisticos</a> <a href="#" class="texto-rodape">Contato</a> </div> <div class="caixa-rodape" id="fale"> <p class="titulo-rodape">Fale Conosco</p><br> <p class="texto-rodape">(11) 98020-1329</p> <p class="texto-rodape">marketing@penaestrada.net.br</p> <P class="texto-rodape">contato@penaestrada.net.br</P> </div> <div class="caixa-links" id="redes"> <p class="titulo-rodape">Acesse nossos canais</p><br> <p class="texto-links"><i id="face" class="fab fa-facebook-f"></i> <i id="insta" class="fab fa-instagram"></i> <i id="twit" class="fab fa-twitter"></i> <i id="you" class="fab fa-youtube"></i></p> </div> <div class="caixa-rodape"> <p class="texto-rodape2">PAÚBA Criativa</p> </div> <div class="caixa-rodape"> <p class="texto-rodape2"> <i class="fas fa-credit-card" id="card"></i> Crédito/Débito <i class="fas fa-file-invoice-dollar" id="boleto"></i> Boleto </p> </div> <div class="caixa-rodape"> <p class="texto-rodape2"> Segurança <i class="fas fa-shield-alt" id="seguranca"></i> </p> </div> </div> <div class="caixa-reservados"> <p class="texto-reservados">PÉ NA ESTRADA © 2019 - Todos os direitos reservados</p> </div> </footer>   <!--Modal de Sign In--> <style> .modal-container{ width: 100vw; height: 100vh; background: rgba(0,0,0,.5); position: fixed; top: 0; left: 0; z-index: 2000; display: none; justify-content: center; align-items: center; } .modal-container.mostrar{ display: flex; } .modal{ background: #ffffff; width: 25%; min-width: 250px; padding: 20px; position: relative; border-radius: 8px; }   @keyframes modal{ from{ opacity: 0; transform: translate3d(0, -60px, 0); } to{ opacity: 1; transform: translate3d(0, 0, 0); } }   .mostrar.modal{ animation: modal .3s; }   .fechar{ position: absolute; font-size: 1.2em; top: -25px; right: -20px; width: 40px; height: 50px; border-radius: 50%; border: 2px solid #ffffff; background-color: #011936; color: #ffffff; cursor: pointer; box-shadow: 0 4px 4px 0 rgba(0, 0, 0, .3); } .title{ font-weight: bold; color: #011936; } .form-sign{ display: grid; } .cx-form{ height: 40px; margin-top: 5px; border: 1px solid #a8dbff; border-radius: 7px; }   .cx-btn{ margin-top: 5px; width: 40%; height: 40px; background-color: #a8dbff; border: 1px solid #a8dbff; color: #011936; font-weight: bold; border-radius: 7px; }   </style> <div id="modal-signin" class="modal-container"> <div class="modal"> <button class="fechar"><i class="fas fa-times"></i></button> <h3 class="title">Cadastrar Propriedade</h3> <form class="form-sign" action="" method="post" enctype="multipart/forma-data"> <input class="cx-form" type="text" name="titulo" id="titulo" placeholder=" Titulo" maxlength="255" required> <input class="cx-form" type="text" name="endereco" id="endereco" placeholder=" Endereço" maxlength="255" required> <input class="cx-form" type="text" name="cep" id="cep" placeholder="CEP" maxlength="20" required> <input class="cx-form" type="text" name="bairro" id="bairro" placeholder=" Bairro" maxlength="60" required> <input class="cx-form" type="text" name="cidade" id="cidade" placeholder=" Cidade" maxlength="60" required> <input class="cx-form" type="text" name="estado" id="estado" placeholder=" Estado" maxlength="2" required> <input class="cx-form" type="text" name="info" id="info" placeholder=" informações" maxlength="600" required> <input class="cx-upload" type="file" name="images" id="images"> <input class="cx-btn" type="submit" value="CADASTRAR"> </form> </div> </div>   <script> function iniciaModal(modalId){ const modal = document.getElementById(modalId); if(modal) { modal.classList.add('mostrar'); modal.addEventListener('click', (e) => { if(e.target.id == modalId || e.target.className == 'fechar' || e.target.className == 'fas fa-times') { modal.classList.remove('mostrar'); } }); } }   const btn = document.querySelector('.btn-menus'); btn.addEventListener('click', () => iniciaModal('modal-signin'));   </script> </body> </html>   <!--PHP -->   <?php   if(isset($_POST['titulo'])){ $titulo = htmlentities(addslashes($_POST['titulo'])); $endereco = htmlentities(addslashes($_POST['endereco'])); $cep = htmlentities(addslashes($_POST['cep'])); $bairro = htmlentities(addslashes($_POST['bairro'])); $cidade = htmlentities(addslashes($_POST['cidade'])); $estado = htmlentities(addslashes($_POST['estado'])); $info = htmlentities(addslashes($_POST['info'])); $images = htmlentities(addslashes($_POST['images']));   if(!empty($titulo) && !empty($endereco) && !empty($cep) && !empty($bairro) && !empty($cidade) && !empty($estado) && !empty($info) && !empty($images)) { require_once '../classes/propriedades.php'; $us = new PDO("mysql:dbname=navarro7_usuarios;host=localhost", "navarro70", "Navarro0");   } } ?>   // E tenho esse código PHP na página login.php com campos de email e senha.   <?php     if(isset($_POST['email'])){   $email = htmlentities(addslashes($_POST['email'])); $senha = htmlentities(addslashes($_POST['senha'])); if(!empty($email) && !empty($senha)){ require_once 'classes/usuarios.php'; $us = new Usuario("navarro7_usuarios", "localhost", "navarro70", "Navarro0"); if($us->entrar($email, $senha)){ echo '<script>window.location.href = "/pages-adm/meu-perfil.php"</script>'; }else{ echo "Email e/ou senha estão incorretos!"; } }else{ echo "Preencha todos os campos!"; }   }   ?>  
      Alguém pode me ajudar nesse caso quero que quando o usuario usa a pagina login colocando o email e senha ela vai para a pagina meu-perfil.php mais que eu consiga fazer aparecer o nome dele na pagina.
       
    • By Ribis
      Prezados, bom dia.
       
      Me cadastrei no fórum a fim de ajudar um amigo.
      Ele realiza pesquisa de vagas laborais no site governamental: https://empregabrasil.mte.gov.br/, o qual possui um campo de pesquisa denominado "Vagas de Emprego", onde se digita algo a ser encontrado.
      Anteriormente, além de digitar neste campo de pesquisa, existiam filtros que deveriam ser preenchidos, tais como: estado, cidade e etc., os quais restringiam e finalizavam a busca.
      Ocorreu mudança no sistema de pesquisa do site, sendo que: primeiramente se digita no campo de pesquisa e depois, se encontrar algum resultado de pesquisa, é que os filtros (estado, cidade e etc) serão habilitados...
       
      Antes de ocorrer a mudança no sistema de pesquisa do site, meu amigo digitava "%%%" (sem as aspas) e obtinha vários resultados, logo em seguida, aplicava os filtros correspondentes para restringir sua busca.
      Agora, a forma de pesquisa tornou-se complicada,  pois, considera-se os caracteres de forma genérica e o sistema de filtros nem sempre abrem, o "%%%" não funciona e etc.
      Enfim, tornou-se complicado algo que era relativamente simples.
       
      Pois bem, após estas explicações, peço a vocês: por favor, existe algum "operador de pesquisa" que possa ser digitado para retornar todos os valores existentes no banco de dados do site, o que consequentemente, fará com que o sistema de filtro seja habilitado e possa se restringir a busca?

      *Moderação, não sei qual o tipo de programação utilizada no site supracitado, coloquei o tópico na sessão HTML e CSS, por entender que seria mais apropriado.
       
      Desde já, agradeço a todos que possam tentar ajudar.
      Ribis.
       
       
    • By Rafael Freitas
      Fala galera!
      Estou travado em uma parte do projeto que estou fazendo, quem puder me ajudar, desde já agradeço.
      Seguinte,  eu tenho alguns dados gravados em uma tabela no banco. Eu recupero estes dados exibindo em uma tabela o nome do parametro "p_descricao" e um checkbox do lado, segue abaixo:
      <?php $max = 200; if(!$pagina){ $pagina = 1; } $inicio = $pagina -1; $inicio = $inicio * $max; $consulta = ("SELECT * FROM parametros WHERE p_tipo_analise='MICROBIOLOGICA'"); $p_id = $_GET["p_id"]; $query = mysql_query("$consulta LIMIT $inicio,$max"); $todos = mysql_query($consulta); $total = mysql_num_rows($todos); $tp = $total / $max; $regLinha = 4; $i = ceil($max / $regLinha); $j = 1; $z = 0; echo " <table width=100% class='tabela_parametros_itens' border=1><tr> "; while($x = mysql_fetch_array($query)){ echo "<td> <input type='checkbox' name='parametro' value='" .$x[p_descricao]."' checked> " .$x[p_id]." - " .$x[p_descricao]."</td>"; $z++; if($z == $regLinha and $j < $i){ echo "</tr><tr>"; $z = 0; $j++; } if($z == $regLinha and $j == $i){ echo "</tr>"; } } echo "</table>"; Eu coloquei checked para todos estarem marcados, até aí tudo certo. O que acontece é que quando eu cadastro, ele só grava no banco, o último registro, ou então se eu desmarco todos e deixo somente 1 marcado, aí ele grava certo.
       
      O que eu queria era gravar todos os registros que estiverem marcados com a checkbox e não só 1.
       
      Conto com a ajuda de vocês.
       
      Abraço.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.