Redjik
Джедай-мастер
сабж - > почему получилось такое говно? =)
Все как бе отлично работает, но не нравиться мне он ...
Поэтому и искал что-нибудь готовое... поучиться.
ЗЫ. познав прелесть Active Record - очень мучаюсь с sql запросами ...
PHP:
class Loginer
{
private $dbase;
private $table_prefix;
private $dbvalues;
private $modx;
public $errors = array();
function __construct($modx)
{
$this->modx = $modx;
$this->dbase = $modx->dbConfig['dbase'];
$this->table_prefix = $modx->dbConfig['table_prefix'];
if (isset($_COOKIE[md5('webUserLog')]) && $this->isLogged() == false)
{
$sql = "SELECT * FROM $this->dbase.`".$this->table_prefix."web_user_attributes` WHERE sessionid='".$_COOKIE[md5('webUserLog')]."'";
$ds = $modx->db->query($sql);
$this->dbvalues = $modx->db->getRow($ds);
if ($this->dbvalues['id'])
$this->UserSession();
};
}
private function UserSession()
{
session_start();
$_SESSION['webShortname']=$this->dbvalues['email'];
$_SESSION['webFullname']=$this->dbvalues['fullname'];
$_SESSION['webEmail']=$this->dbvalues['email'];
$_SESSION['webValidated']=1;
$_SESSION['webUser']=$this->dbvalues['email'];
$_SESSION['webLastlogin']=$this->dbvalues['lastlogin'];
$_SESSION['userId'] = $this->dbvalues['id'];
setcookie(md5('webUserLog'),session_id(),time()+60*60*24*90);
$sql = "UPDATE $this->dbase.`".$this->table_prefix."web_user_attributes` SET sessionid='".session_id()."', lastlogin = '".time()."' WHERE id =".$this->dbvalues['id'];
$this->modx->db->query($sql);
}
public function isLogged()
{
if (isset($_SESSION['webValidated']))
return true;
else
return false;
}
public function login($user,$pass)
{
$error_mail = filter_var($user, FILTER_VALIDATE_EMAIL);
if ($error_mail == false)
array_push($this->errors,'Введен неверный формат электронной почты');
$sql = "SELECT * FROM $this->dbase.`".$this->table_prefix."web_users` WHERE username LIKE '%".mysql_real_escape_string($user)."%'";
$ds = $this->modx->db->query($sql);
$tables = $this->modx->db->getRow($ds);
if ($tables['password'] === $pass)
{
$sql = "SELECT * FROM $this->dbase.`".$this->table_prefix."web_user_attributes` WHERE email LIKE '%".mysql_real_escape_string($user)."%'";
$ds = $this->modx->db->query($sql);
$this->dbvalues = $this->modx->db->getRow($ds);
if ($this->dbvalues['id'])
$this->UserSession();
}
else
{
array_push($this->errors,'Введен неверный пароль или электронная почта');
}
if (count($this->errors) > 0)
return false;
else
return true;
}
public function register ($user,$pass)
{
$error_mail = filter_var($user, FILTER_VALIDATE_EMAIL);
if ($error_mail == false)
array_push($this->errors,'Введен неверный формат электронной почты');
$sql = "SELECT * FROM $this->dbase.`".$this->table_prefix."web_users` WHERE username LIKE '%".mysql_real_escape_string($user)."%'";
$ds = $this->modx->db->query($sql);
$tables = $this->modx->db->getRow($ds);
if ($tables)
array_push($this->errors,'Адрес электронной почты уже зарегестрирован');
if (strlen($pass)<6)
array_push($this->errors,'Проль должен содержать больше 6 символов');
if (!preg_match('`[A-Za-z0-9]`',$pass))
array_push($this->errors,'Пароль может содержать только англйские буквы и цифры');
if (count($this->errors) > 0)
{
return false;
}
else
{
$sql = "INSERT INTO $this->dbase.`".$this->table_prefix."web_users` (username,password) VALUES ('".mysql_real_escape_string($user)."','".mysql_real_escape_string($pass)."')";
$ds = $this->modx->db->query($sql);
$sql = "INSERT INTO $this->dbase.`".$this->table_prefix."web_user_attributes` (email) VALUES ('".mysql_real_escape_string($user)."')";
$ds = $this->modx->db->query($sql);
$sql = "SELECT * FROM $this->dbase.`".$this->table_prefix."web_user_attributes` WHERE email LIKE '%".mysql_real_escape_string($user)."%'";
$ds = $this->modx->db->query($sql);
$this->dbvalues = $this->modx->db->getRow($ds);
if ($this->dbvalues['id'])
$this->UserSession();
return true;
}
}
public function logOut()
{
setcookie (md5('webUserLog'), "", time() - 3600);
session_destroy();
}
Поэтому и искал что-нибудь готовое... поучиться.
ЗЫ. познав прелесть Active Record - очень мучаюсь с sql запросами ...