@go_fire - хех, мерси, макар че не се считам за толкова "голям"

ORM и prepared statements не са единствените решения за работа с ДБ - и за тях има много "за и против". Аз също работя с ORM - ползвам Doctrine, макар и някои да я считат за прекалено тежка.
В този случай единственото, което е сигурно е, че не трябва да се създава "суперобект" (било то и процедурно имплементиран), който да върши всичко - проверка за валидност, съхранение в ДБ, генериране на HTML и т.н.
Би трябвало кодът да е разделен на Model-View-Controller принципа, като Моделът да е композитен обект - да притежава инстанции на обект за валидация, обект за съхранение в ДБ и други необходими... т.е. да има отделни обекти, всеки с една единствена отговорност в целия механизъм на обработка и представяне на данните. При това връзката между обектите и знанията им за другите обекти трябва да е минимална, а в идеалния случай - никаква.
Самият факт, че първите два реда от всички скриптове показани от toti84 се повтарят във всеки един от тях говори, че нещо определено не е както трябва.
При мен реализацията на контрол над автентификацията (и авторизацията в проекти с роли) изпълянва един единствен обект:
CodeIgniter
GeSHi (PHP):
abstract class Auth_Controller extends Base_Auth_Controller
{
function __construct()
{
parent::__construct();
$this->load->model('application/CurrentUser_Model', 'currentUser');
}
protected function _hasPermission($method, $arguments)
{
return $this->currentUser->isLogged;
}
protected function _notPermitted($method, $arguments)
{
Error::register('Не сте автентифицирали пред системата.');
$this->view('response');
}
}
Всички останали контролери са наследници на този контролер. Няма HTML, няма SQL, няма дори следа от DB, SESSION и т.н. Обектът Error съдържа масив от всички съобщения за грешки - без форматиране.
Login/logout действията също се изпълняват от наследник на този контролер:
GeSHi (PHP):
class CurrentUser extends Auth_Controller
{
function __construct()
{
parent::__construct();
$this->suspendPermissionCheck();
}
public function login()
{
$this->currentUser->doLogin();
$this->view('response');
}
public function logout()
{
$this->currentUser->doLogout();
$this->view('response');
}
}