Utworzyłem system logowania w smarty i PEAR.
Klasa łącząca się z bazą danych
class DBManager { private function __construct() { } private function DNSInit() { return ''.DB_TYPE.'://'.DB_USER.':'.DB_PASS.'@tcp+'.DB_SERVER.'/'.DB_NAME.''; } public function Init() { if(PEAR::isError(self::$DBConnection = MDB2::connect(self::DNSInit()))) { throw new Exception(self::$DBConnection->getMessage(), self::$DBConnection->getCode()); } } public function Query($queryString) { if(self::$DBConnection) { if(PEAR::isError($result = self::$DBConnection->Query($queryString))) { throw new Exception ($result->getMessage(), $result->getCode()); return $result; } } } public function Transaction($type) { $sqlquery = $type; if(PEAR::isError($result = self::$DBConnection->Query($sqlquery))) { throw new Exception ('Przesłanie zapytania nie powiodło się'); } else { if(self::$DBConnection->affectedRows() < 0) { throw new Exception ('Odebranie wyników zapytania nie powiódł się'); } } return TRUE; } }
Klasa gdzie pobierany jest użytkownik i hasło
class User { private $_Id; private $_DNS; private $_Password; private $_Email; public function __construct($userdata = NULL) { foreach ($userdata as $key => $value) { case 'usr_id'; $this->setId($value); break; case 'usr_email'; $this->setEmail($value); break; } } $this->setDNS(DNSInit()); } public function setId($id) { if($id <> NULL) { $this->_Id = $id; return TRUE; } else { return FALSE; } } public function getId() { return $this->_Id; } public function authorize ($userLogin, $userPassword) { DBManager::Transaction('BEGIN'); $sqlquery = "SELECT * FROM users WHERE USR_id = '".$userLogin."' "; $result = DBManager::Query($sqlquery); if($user = $result->fetchRow(DB_FETCHMODE_ASSOC)) { if($user['USR_Password'] == $userPassword) { DBManager::Transaction('COMMIT'); return TRUE; } } DBManager::Transaction('ROLLBACK'); throw new Exception ('Logowanie nieudane'); } public function Logon($login, $password) { self::authorize($login, $password); $sqlquery = "SELECT * FROM users WHERE usr_id = '".$login."' "; $result = DBManager::Query($sqlquery); if($userdata = $result->fetchRow(DB_FETCHMODE_ASSOC)) { $currentUser = new User($userdata); return $currenrUser; } else { throw new Exception ('Poranie danych nie powidło się'); } } }
Plik index.php
require_once 'config/application.inc.php'; require_once 'header.php'; $smarty->display('logon.tpl'); } else { try { DBManager::Init(); User::Logon($_POST['username'], $_POST['password']); $smarty->display('index.tpl'); } catch (Exception $error) { $smarty->display('error.tpl'); } } require_once 'footer.php';
w logon.tpl jest to zwykły formularz
i teraz jak wpisze login i hasło pojawia się błąd:
Fatal error: Call to undefined function: MDB2_Driver_mysql::affectedRows(). in C:\xampp\php\PEAR\MDB2.php on line 1936
Na kompie zainstalownay mam phpMyAdmin 1.7.3
Z góry dzięki za odpowiedź,
Jacek