Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde, pessoal.
Estou montando um crud bem básico em php, e tive problema de cara nas funções de login.
Olha só a esquematização:
Em login.tpl tenho essa condição que checa se foi dado iniciado o $_POST.
require "../includes/user.php";
require "../includes/utils.php";
if($_POST){
if(logar($_POST['email'], $_POST['senha'])){
header('Location:index.php');
}else{
echo '<h1 style="color:red">Acesso Negado</h1>';
exit;
}
}
Caso a verificação seja verdadeira, vem uma outra condição que executa a função logar(), recebendo como parametros $_POST['email'] e $_POST['senha']. Essa função está em user.php:
function logar($email, $senha){
$retorno = ver('usuarios'," email = '$email' and senha = '$senha' and ativo = '1'");
if($retorno){
session_start();
$_SESSION['logado'] = true;
$_SESSION['usuario'] = $retorno['Nome'];
$_SESSION['id'] = $retorno['Id'];
return true;
}else{
return false;
}
}
Como dá pra perceber, a função de logar, em vez de executar diretamente a query, também tem uma função de consulta, que a ver(), e vai ser padrão em todo o sistema. Se a variável $retorno, que executou a função ver for true, vai iniciar a seção e retornar true. Abaixo a função ver apenas para checagem:
function ver($tabela, $onde, $campos = "*"){
$sql = "SELECT $campos FROM $tabela WHERE $onde";
$query = mysql_query($sql);
return mysql_fetch_assoc($query);
}
Se a query retornar uma linha, então, $retorno é true e logar() também. Voltamos pra aquela condição inicial em login.tpl, que redirecionará o usuário - agora logado - para "index.php".
O index.php tem o include para header.php, e esse por sua vez chama os arquivos de configuração user.php e utils.php.
Logo abaixo, uma condição para verificar se o usuário está logado:
if (!verificarLogin()){
header('location:login.php');
}
E a função verificarLogin() em user.php está escrita assim:
function verificarLogin(){
if(isset($_SESSION['logado'])){
return true;
}else{
return false;
}
}
Se eu retiro a condição verificarLogin do header.php e envio um email e senha existente no banco de dados por $_POST, eu consigo logar.
Agora, se eu ativo a mesma condição pra verificar e impedir o acesso sem login, ao enviar o $_POST, volto pra página de login.
Obs: Caso eu coloque um email e senha incorretos, recebo acesso negado.
E mesmo retirando a condição pra verificar se o usuário está logado e conseguindo logar, não consigo imprimir as $_SESSION, como por exemplo a $_SESSION['usuario'].
Alguém conseguiu entender onde eu errei?
Um abraço.
Carregando comentários...