Block pages via url

1

The restricted page is blocked for url access, but I want to leave the warning on the login screen. For example: when entering the address of the business page.php in the url, the system directs to the login screen and displays the message LOGIN TO ACCESS below the form. Follow the code below.

Login

    <?php
    session_start();
    ?>
    <!doctype html>
    <form method="POST" action="login/valida.php">
        <h2>Área Restrita</h2>
    <label>Login</label>
        <input name="email_cli" type="email" autofocus required placeholder="Email">
    <label>Senha</label>
        <input type="password" name="senha_cli" placeholder="Senha (seu CPF)" required maxlength="11"><br>
        <button type="submit" class="botao_cadastro">Acessar</button>
    </form>
    <h4 style="color: red">
        <?php if(isset($_SESSION['loginErro'])){
            echo $_SESSION['loginErro'];
            unset($_SESSION['loginErro']);
        }?>
    </h4>
    <h4 style="color: green">
        <?php 
        if(isset($_SESSION['logindeslogado'])){
            echo $_SESSION['logindeslogado'];
            unset($_SESSION['logindeslogado']);
        }
        ?>
    </h4>
    <?php
    // Aqui ficaria sua mensagem, por exemplo
    if (isset($_SESSION['erro_acesso'])) {
    ?>
    <h4>Faça o login para acessar.</h4>
    <?php
    }
    ?>
    </html>

valida.php

    <?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_cli'])) && (isset($_POST['senha_cli']))){
    $usuario = mysqli_real_escape_string($conn, $_POST['email_cli']); 
    //Escapar de caracteres especiais, como aspas, prevenindo SQL injection
    $senha = mysqli_real_escape_string($conn, $_POST['senha_cli']);
    $senha = md5($senha);

    //Buscar na tabela usuario o usuário que corresponde com os dados digitado no formulário
    $result_usuario = "SELECT * FROM clientes WHERE email_cli = '$usuario' && senha_cli = '$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_cli'];
        $_SESSION['usuarioNome'] = $resultado['nome_cli'];
        $_SESSION['usuarioNiveisAcessoId'] = $resultado['nivel'];
        $_SESSION['usuarioEmail'] = $resultado['email_cli'];
        if($_SESSION['usuarioNiveisAcessoId'] == "1"){
            header("Location: ../basico.php");
        }elseif($_SESSION['usuarioNiveisAcessoId'] == "2"){
            header("Location: ../profissional.php");
        }elseif($_SESSION['usuarioNiveisAcessoId'] == "3"){
            header("Location: ../avancado.php");
        }elseif($_SESSION['usuarioNiveisAcessoId'] == "4"){
            header("Location: ../empresarial.php");
        }else{
            $_SESSION['erro_acesso'] = "Faça o login para acessar";
            header("Location: ../login.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: ../login.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: ../login.php");
    };
    ?>

connection.php

    <?php

$servidor = "localhost";
$usuario = "root";
$senha = "";
$dbname = "clientes_db";

//Criar a conexao
$conn = mysqli_connect($servidor, $usuario, $senha, $dbname);

if(!$conn){
    die("Falha na conexao: " . mysqli_connect_error());
}else{
    //echo "Conexao realizada com sucesso";
}      
?>

verifica_acesso.php

    <?php
    session_start();
    function verifica_nivel($nivel_de_acesso) {
    if (!isset($_SESSION['usuarioNiveisAcessoId']) || $_SESSION['usuarioNiveisAcessoId'] != $nivel_de_acesso) {
    $_SESSION['erro_acesso'] = 1;
    header('Location: ../login.php');
    exit();
    }
    }
    ?>
    
asked by anonymous 24.05.2017 / 02:19

2 answers

3

As far as I understand, you could use its access level to not access certain types of files.

Editing the code as you edit the question.

verifica_acesso.php

session_start();
function verifica_nivel($nivel_de_acesso) {
    if (!isset($_SESSION['usuarioNiveisAcessoId']) || $_SESSION['usuarioNiveisAcessoId'] != $nivel_de_acesso) {
        $_SESSION['erro_acesso'] = 1;
        header('Location: login.php');
        exit();
    }
}

Place at the top of the pages where you want to check if the level of access is allowed for the area.

Using business.php

include_once "verifica_acesso.php";
verifica_nivel(4);

login.php would look something like this:

<?php
session_start();
?>
<!doctype html>
<form method="POST" action="login/valida.php">
<h2>Área Restrita</h2>
<?php
// Aqui ficaria sua mensagem, por exemplo
if (isset($_SESSION['erro_acesso'])) {
?>
<h4>Faça o login para acessar.</h4>
<?php
}
?>
<label>Login</label>
<input name="email_cli" type="email" autofocus required placeholder="Email">
<label>Senha</label>
<input type="password" name="senha_cli" placeholder="Senha (seu CPF)" required maxlength="11"><br>
<button type="submit" class="botao_cadastro">Acessar</button>
</form>
<h4 style="color: red">
<?php if(isset($_SESSION['loginErro'])){
echo $_SESSION['loginErro'];
unset($_SESSION['loginErro']);
}
?>
</h4>
<h4 style="color: green">
<?php 
if(isset($_SESSION['logindeslogado'])){
echo $_SESSION['logindeslogado'];
unset($_SESSION['logindeslogado']);
}
?>
</h4>
<h4 style="color: green">
<?php 
if(isset($_SESSION['restrito'])){
echo $_SESSION['restrito'];
unset($_SESSION['restrito']);
}
?>
</h4>
</html>

And in valida.php after confirming the user's existence and correct password:

if (isset($_SESSION['erro_acesso'])) {
    unset($_SESSION['erro_acesso']);
}

I hope I have helped.

    
24.05.2017 / 06:03
0

Try this code:

$Page_Request = strtolower(basename($_SERVER['REQUEST_URI']));
$Page_File = strtolower(basename(__FILE__));
if ($Page_Request == $Page_File)
{
    exit("Acesso negado.");
} else {
   return true;
}

Or you can use header for home.

I hope I have helped.

    
24.05.2017 / 03:40