Witam,
Utworzyłem system logowania w smarty i PEAR.
Klasa łącząca się z bazą danych
class DBManager {
private static $DBConnection = null;
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';
if(!isSet($_POST['username']) && !isSet($_POST['password'])) { $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');
echo $error->getMessage(); }
}
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 1936Na kompie zainstalownay mam phpMyAdmin 1.7.3
Z góry dzięki za odpowiedź,
Jacek