I did an optimization on the login system and as I had problems with directory I decided to search the web and found a legal resource of PHP that is autoload . I did the whole implementation according to the examples I got but I'm having problems.
Here's how my code is:
It starts with index.php
, which is at the root of the project.
index.php
<?php
// Adicionando o arquivo de autoload, que faz o carregamento dos diretórios de forma dinâmica.
require_once( "autoload.php" );
// Verificando se existe a sessão.
session_start();
// A sessão ainda não existe. Primeiro acesso do usuário.
if ( !isset( $_SESSION[ 'logado' ] ) ) {
header( 'location:login.php' );
}
// A sessão do usuário já existe. Vericando se ainda está logado.
elseif ( $_SESSION[ 'logado' ] == false) {
header( 'location:login.php' );
}
// Usuário já conectado. Envia direto para a página inicial.
else {
header( 'location:inicio.php' );
}
?>
The first task of PHP is to add autoload.php
, which is also at the root of the project. Follow it below:
autoload.php
<?php
// Função que carrega as classes da pasta "database".
function carregar_classes_database( $class ) {
if ( file_exists( "database/" . strtolower( $class ) . ".class.php" ) ) {
require_once( "database/" . strtolower( $class ) . ".class.php" );
}
}
spl_autoload_register( "carregar_classes_database" );
$obj1 = new Database();
// Função que carrega as classes da pasta "entity".
function carregar_classes_usuario( $class ) {
if ( file_exists( "entity/usuario/" . strtolower( $class ) . ".class.php" ) ) {
require_once( "entity/usuario/" . strtolower( $class ) . ".class.php" );
}
}
spl_autoload_register( "carregar_classes_usuario" );
$obj2 = new Usuario();
?>
I already put a echo
within if
of file_exists
just to ensure that the file is really valid and is.
My directory structure is in the following format:
Asmysessiondoesnotexistonfirstaccesstothesite,I'mforwardedtologin.Atthispointautoload.php
hasalreadybeenadded.
Igetontheloginscreen,whereIhavetheuserinputandtheinputpasswordandalsothesubmitbutton.>
Theaction
ofform
callsaloginvalidationfunction,whichIcalledvalidarLogin.php
validateLogin.php
<?php//Adicionandorecursos.COMENTADOPARAUTILIZAROAUTOLOADEEVITARINCLUIROSARQUIVOS"NA MÃO".
//require_once( "database/database.class.php" );
//require_once( "entity/usuario/usuario.class.php" );
session_start();
$database = new Database();
$database->connect();
// Conexão bem sucedida.
if ( $database->getConnected() ) {
$user = new Usuario();
$user->setUsuario( $_POST[ 'usuario' ] );
$user->setSenha( $_POST[ 'senha' ] );
// Validando se o usuário e a senha são válidos.
if ( $user->exists( true, '' ) ) {
$_SESSION[ 'erro' ] = '';
$_SESSION[ 'logado' ] = true;
$_SESSION[ 'usuario' ] = $user->getUsuario();
$_SESSION[ 'nome' ] = $user->getNome() . ' ' . $user->getSobrenome();
header('location:inicio.php');
// Se o usuário for inválido volta para a tela de login.
} else {
$_SESSION[ 'erro' ] = $user->getMSG_INVALID_USER();
$_SESSION[ 'logado' ] = false;
$_SESSION[ 'usuario' ] = '';
$_SESSION[ 'nome' ] = '';
header('location:login.php');
}
}
// Ocorreu um erro na conexão. Volta para a página de login.
else {
$_SESSION[ 'erro' ] = $database->getMsgError();
$_SESSION[ 'logado' ] = false;
$_SESSION[ 'usuario' ] = '';
$_SESSION[ 'nome' ] = '';
header('location:login.php');
}
?>
I've commented the require_once
, because in my head, if I'm already using autoload
, I do not need required_once
anymore.
When I submit the login form and the above function is called I have an error in the line:
$database = new Database();
Fatal error: Class 'Database' not found in /home/ubuntu/workspace/validatingLogin.php on line 10 Call Stack: 0.4673 238080 1. {main} () /home/ubuntu/workspace/validateLogin.php
Why am I having this error if my autoload has already started?
PHP should not know who the Database
class is, since it is already in memory?