Ir para conteúdo

Arquivado

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

Rodrigo5468

Restrição

Recommended Posts

Eu gostaria de restringir o acesso à algumas páginas para administradores. Porem não estou sabendo criar as sessões.

 

fZXfSx9.png

 

Login.php

<?php
class Login
{
    private $db_connection = null;
    public $errors = array();
    public $messages = array();
	public function __construct()
    {
        session_start();

        if (isset($_GET["logout"])) {
            $this->doLogout();
        }
        elseif (isset($_POST["login"])) {
            $this->dologinWithPostData();
        }
    }

    private function dologinWithPostData()
    {
        if (empty($_POST['Username'])) {
            $this->errors[] = "Usuário estava vazio.";
        } elseif (empty($_POST['Password'])) {
            $this->errors[] = "Senha estava vazio.";
        } elseif (!empty($_POST['Username']) && !empty($_POST['Password'])) {

            $this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
			
			$Password = $_POST['Password'];
            
			if (!$this->db_connection->set_charset("utf8")) {
                $this->errors[] = $this->db_connection->error;
            }

            if (!$this->db_connection->connect_errno) {

                $Username = $this->db_connection->real_escape_string($_POST['Username']);

                $sql = "SELECT Username, email, Password
                        FROM accounts
                        WHERE Username = '" . $Username . "' OR email = '" . $Username . "';";
                $result_of_login_check = $this->db_connection->query($sql);

                if ($result_of_login_check->num_rows == 1) {
					
                    $result_row = $result_of_login_check->fetch_object();
					if ( hash( 'whirlpool', $Password ) == $result_row->Password ){

                        $_SESSION['Username'] = $result_row->Username;
                        $_SESSION['email'] = $result_row->email;
                        $_SESSION['user_login_status'] = 1;

                    } else {
                        $this->errors[] = "Senha incorreta. Tente novamente.";
                    }
                } else {
                    $this->errors[] = "Este usuário não existe.";
                }
            } else {
                $this->errors[] = "Problema de conexão de banco de dados.";
            }
        }
    }

    public function doLogout()
    {
        $_SESSION = array();
        session_destroy();
        $this->messages[] = "Você foi desconectado.";

    }

    public function isUserLoggedIn()
    {
        if (isset($_SESSION['user_login_status']) AND $_SESSION['user_login_status'] == 1) {
            return true;
        }
        return false;
    }
}

Eu tentei fazer desta forma, porem não obtive resultado.

<?php

if ($result_of_login_check->num_rows == 1) {
	
	$result_row = $result_of_login_check->fetch_object();
	
	if ( hash( 'whirlpool', $Password ) == $result_row->Password ){
	
		$_SESSION['Username'] = $result_row->Username;
		$_SESSION['email'] = $result_row->email;
		$_SESSION['PAdministrador'] = $result_row->PAdministrador; //Adicionei está sessão.
		$_SESSION['user_login_status'] = 1;
	
	} else {
		$this->errors[] = "Senha incorreta. Tente novamente.";
	}
}

?>

No topo das páginas que quero restringir o acesso eu adiciono este código.

if($_SESSION['PAdministrador'] <= 0){
	header('location:./');
}

Porem se for maior que zero ele não permite o acesso, ele só fica redirecionando para o index, Deixando aquela página sem acesso algum.

 

 

 

Alguém pode me ajudar com isso por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, não foi o que eu disse. Você sabe o que é depurar um código ? debug?

 

Verifique se esse objeto tem valor amigo... se está sendo passado o valor pra ele da consulta.

<?php

if ($result_of_login_check->num_rows == 1) {
    
    $result_row = $result_of_login_check->fetch_object();
    
    if ( hash( 'whirlpool', $Password ) == $result_row->Password ){
       
       //Deverá imprimir um alert como valor desse objeto
       print '<script>alert("'.$result_row->PAdministrador.'");</script>'; 
       exit();

        $_SESSION['Username'] = $result_row->Username;
        $_SESSION['email'] = $result_row->email;
        $_SESSION['PAdministrador'] = $result_row->PAdministrador; //Adicionei está sessão.
        $_SESSION['user_login_status'] = 1;
    
    } else {
        $this->errors[] = "Senha incorreta. Tente novamente.";
    }
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não sei o que é debug, olhei o link acima, porem não fez nada.

function dbug() {
	if($_SESSION['PAdministrador'] <= 0){
		$result_row->PAdministrador;
	}
}

É assim? Alguém me ajude por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou te explicar de novo a mesma coisa. Você tem que verificar se o objeto "$result_row->PAdministrador;" está recebendo valor... se não estiver, o problema está em sua consulta.

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.