Maronna che casino.......
Ci sono alcuni problemi di fondo, proprio riguardo OOP, ereditarietà, utilizzo delle superglobals e di progettazione architetturale del sistema.
metodi come :
codice:
/*====================================
* Setto la sessione per accedere
* all'area privata
*==================================*/
public function set_username($logkey){
return $_SESSION['logkey'] = $logkey;
}
Non ha senso, avere un metodo che ti da un dato di cui hai lo scope ovunque, avrebbe senso
se logkey fosse un attributo interno della classe. Fatto cosi' non serve a nulla.
1- non esegue alcun codice di controllo esistenza sessione o dato in sessione
2- lo scope di $_SESSION e' globale e puoi accedere a tale dato da qualsiasi posizione
3- e' dichiarato come "SET" ... i metodi se non dovrebbero resituire nulla, se fai ritornare qualcosa, o ritorni un booleano (nel tuo caso ritorni una assegnazione che e' sempre true e quindi non serve a niente) oppure il valore settato giusto per controllo.... ma anche in questo caso dovresti avere il metodo "GET" per cui non va bene
codice:
/*====================================
* Verifica lo stato del login
*==================================*/
public function is_logged($logkey){
//if ( isset(get) )
}
???????????????? Anche qui non ha senso il controllo commentato...
codice:
/*====================================
* Effettuo il logout
*==================================*/
public function logout(){
session_unset();
session_destroy();
header("location: ".$this->urls['login_page']."message=13");
}
NO! esegui un redirect non controllato e non bloccante. header("location") esegue il redirect si ma non esegui un "exit" o un "die" come successiva istruzione lo script continua l'esecuzione con risultati incoerenti. Ed anche eventuale redirect fallati.
Inoltre passare tutto il testo del messaggio in get... lo trovo problematico e' meglio se ti passi il codice, quindi includi il file che associa codici ai testi.
codice:
/*====================================
* Link alla pagina privata
*==================================*/
public function get_link_private(){
header("location: ".$this->urls['private_page']);
return;
}
stesso problema di sopra. In aggiunta la chiamata a return non risolve il problema in quanto chiude l'esecuzione del metodo e non dello script. Inoltre un metodo che chiama die o exit va ponderato bene in quanto termina in toto l'esecuzione. Io farei una classe statica per gestire i redirects in modo che hai il controllo di queste operazioni.
Come vedi c'e' moltissima confusione, unitamente a come imposti le varie classi, relative estensioni e cosa devono fare. Per di piu' non applichi alcun pattern per cui ti perdi a mescalre controllers con model etc.......
Consiglio di fermarsi subito e riprogettare tutto solo dopo aver testato e appreso bene come funziona OOP.
imposta una struttura dati per codici-> messaggi
imposta una classe che esegua solamente le queries a database, tale classe (statica o dinamica che sia) non fa altro che fornire il layer ed interfaccia per le connessioni al db e la gestione delle query. (studia bene come operano le funzioni msql/i_query() i valori ritornati etc e imposta correttamente i controlli per discriminare i risultati ( una query errata e' differente da una select che non da risultati)
imposta correttamente le classi per gestire il login, l'utente etc.... qui puoi fare in vari modi.
E nel caso li vediamo poi.
In ogni caso fermati e rivedi completamente tutto.