witam mam zrobione taki maly system logowania ktory sklada sie z 2 plikow.
pierwszy class.login.php:
<?php
require_once('class.DB.php');
require_once('class.validator.php');
require_once('class.config.php');
class login{
protected $login;
protected $password;
private function __construct(){
$config = config::singleton();
if(!empty($_POST['login'])) $this->login = $_POST['login']; else $this->login = ''; if(!empty($_POST['password'])) $this->password = $_POST['password']; else $this->password = ''; }
public static function singleton
(){ if (!isset(self::$instance)) { $c = __CLASS__;
self::$instance = new $c();
}
return self::$instance;
}
public function checkLoginData(){
$validator = validator::singleton();
if(!$validator->validatePassword($this->password)){
return false;
}else if(!$validator->validateLogin($this->login)){
return false;
}else{
$db = DB::singleton();
$pass = md5($this->password); $query = "SELECT COUNT(*) AS COUNT FROM `ADMIN` WHERE `PASSWORD` = '$pass'";
}else{
$query = "SELECT COUNT(*) AS COUNT FROM `USERS` WHERE LOWER(`LOGIN`) = LOWER('$this->login') ";
$query .= "AND `PASSWORD` = '$pass'";
};
$db->send_query($query);
$error = $db->isQueryError();
if($error === false){
$row = $db->getRow();
if($row['COUNT'] == 1){
return true;
}else{
return false;
};
}else{
return $error;
};
};
}
public function isActive(){
$db = DB::singleton();
$query = "SELECT `ACTIVATED` FROM `USERS` WHERE LOWER(`LOGIN`) = LOWER('$this->login')";
$db->send_query($query);
$row = $db->getRow();
if($row['ACTIVATED'] == 1) return true; else return false;
}
public function isBanned(){
$db = DB::singleton();
$query = "SELECT `BANNED` FROM `USERS` WHERE LOWER(`LOGIN`) = LOWER('$this->login')";
$db->send_query($query);
$row = $db->getRow();
if($row['BANNED'] == 1) return true; else return false;
}
public function login(){
if($this->checkLoginData()){
$_SESSION['logged'] = true;
$_SESSION['login'] = 'Admin';
}else{
$db = DB::singleton();
$query = "SELECT `LOGIN` FROM `USERS` WHERE LOWER(`LOGIN`) = LOWER('$this->login')";
$db->send_query($query);
$row = $db->getRow();
$query = "UPDATE `USERS` SET `LASTLOGIN` = $time WHERE `LOGIN` = '".$row['LOGIN']."'";
$db->send_query($query);
if($db->isQueryError() === false){
$_SESSION['logged'] = true;
$_SESSION['login'] = $row['LOGIN'];
return true;
}else{
return $db->isQueryError();
};
};
}else{
return '';
};
}
public function isLogged(){
if(!empty($_SESSION['logged']) && !empty($_SESSION['login'])) return true; else return false; }
public function logout(){
}
public function isAdmin(){
if(!empty($_SESSION['login']) && $_SESSION['login'] == 'Admin' && $_SESSION['logged'] === true) return true; else return false; }
public function showAccount(){
if($this->isLogged()){
if($this->isAdmin() == true) {
return '<div class="center"><a href="index.php?p=10&action=change_passw_form">Zmiana hasła</a></div>';
};
$login = $this->getLogin();
$query = "SELECT COUNT(*) AS COUNT FROM `USERS` WHERE LOWER(`LOGIN`) = LOWER('$login')";
$db = DB::singleton();
$db->send_query($query);
$error = $db->isQueryError();
if($error === false){
$row = $db->getRow();
if($row['COUNT'] == 1){
$query = "SELECT * FROM `USERS` WHERE LOWER(`LOGIN`) = LOWER('$login')";
$db->send_query($query);
if($db->isQueryError() === false){
$row = $db->getRow();
$table = '<div class="center">
<table style="margin:20px auto;">
<tr>
<td><div class="right">Login : </div></td>
<td><div class="left">'.$row['LOGIN'].'</div></td>
</tr>
<tr>
<td><div class="right">Email : </div></td>
<td><div class="left">'.$row['EMAIL'].'</div></td>
</tr>
<tr>
<td><div class="right">Imię : </div></td>
<td><div class="left">'.$row['NAME'].'</div></td>
</tr>
<tr>
<td><div class="right">Płeć : </div></td>
<td><div class="left">';
if($row['SEX'] == 1) $table .= 'Mężczyzna'; else $table .= 'Kobieta';
$table .= '</div></td>
</tr>
<tr>
<td><div class="right">Data urodzenia : </div></td>
<td><div class="left">'.date('d-m-Y',$row['BIRTHDATE']).'</div></td> </tr>
<tr>
<td><div class="right">Skąd : </div></td>
<td><div class="left">'.$row['CITY'].'</div></td>
</tr>
<tr>
<td><div class="right">Konto utworzono : </div></td>
<td><div class="left">'.date('d-m-Y H:i:s',$row['DATE']).'</div></td> </tr>
<tr>
<td><div class="right">Ostatnie logowanie : </div></td>
<td><div class="left">'.date('d-m-Y H:i:s',$row['LASTLOGIN']).'</div></td> </tr>
<tr>
<td colspan="2"><div class="center"><a href="index.php?p=10&action=edit_account_form">Edycja danych</a> |
<a href="index.php?p=10&action=change_passw_form">Zmiana hasła</a></div></td>
</tr>
</table></div>';
return $table;
}else{
return $db->isQueryError();
};
}else{
return '<div class="error">W bazie nie ma takiego użytkownika</div>';
};
}else{
return $error;
};
}else{
return '<div class="error">Nie jesteś zalogowany</div>';
};
}
public function showLoginForm(){
return '
<div class="center">
<form action="index.php?p=10&action=login" method="post">
<table style="margin:50px auto;">
<tr><td class="right">Login: </td><td><input type="text" maxlength="30" name="login" class="gb_sygnature" /></td></tr>
<tr><td class="right">Hasło: </td><td><input type="password" maxlength="30" name="password" class="gb_sygnature" /></td></tr>
<tr><td colspan="2" class="right"><input type="submit" value="Zalogój" class="submit" /></td></tr>
</table>
</form>
</div>';
}
};
?>
i teraz jak uzeywam $this->login(); to on ustwaia zmienne sesji $_SESSION['logged']=1 i $_SESSION['login']='Admin' . Gorzej sie robi kiedy przechodze do innej strony np na ktorej moge zaobaczyc dane mojego konta. No i na tej stronie kiedy sprawdzam czy admin funkcja isAdmin(); to print_r($_SESSION); wyswietla takie cos:
Kod
Array ( [logged] => 1 [login] => login Object ( [login:protected] => [password:protected] => ))
Zupelnie nie wiem co sie dzieje nigdy ni przypisywalem zmiennej sesyjnej obiektu jakiegokolwiek. Powinno byc 'Admin' a nie obiekt w tej zmiennej sesyjnej. Moze ktos wie co jest z tym nie tak.
ehh cos zle dziala kolorowanie skladni polowe mi ucielo drogiego pliku login.php i jeszcze jakas sieczke na ekranie wiec ga nie wypisze tutaj :/
edit: ehh udalo mi sie rozwiazac ten problem zaczalem uzywac $_SESSION['user_login'] zamiasta $_SESSION['login']; teraz przy sprawdzaniu czy admin print_r() wyswietla takie cos:
Kod
Array ( [logged] => 1 [login] => login Object ( [login:protected] => [password:protected] => ) [user_login] => Admin )
nie wiem czemu tam ciagle jest obiekt przypisany do zmiennej sesyjnej. Moze ktos wie czemu tak jest i czy to czase nie jest wina php bo ja tego obiektu nie przypisywalem do zmiennej sesyjnej??
Ten post edytował piotrekkr 28.08.2006, 10:46:25