[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Класс авторизации
m4a1fox
Доброго утра всем! Есть такой класс

<?php
/**
* class for autorization for admin in the admin panel on the site
*
@author admin
*
@copyright 2011
*/

if(!defined('M4A1_KEY')){
header("HTTP/1.1 404 Not Found");
exit(file_get_contents('../404.html'));
}

class autorizationAdmin {

private static $table = 'login'; //table in BD for autorization
private $name; //name from the $_POST
private $pass; //pass from the $_POST

/**
* method for $_POST['name'] & $_POST['pass']. data pocessing
*/

function __construct($name, $pass) {
$this->name = !empty($name)?mysql_real_escape_string($name):NULL;
$this->pass = !empty($pass)?md5($pass):NULL;
}

/**
* method for search __constract data in DB
*/

function enter() {
$sql = "SELECT COUNT(*) FROM `".self::$table."`
WHERE `name` = '"
.$this->name."'
AND `encode` = '"
.$this->pass."'
"
;
if(mysql_result(connectDb::sql($sql), 0) == 0) {
$ok = '<font color="red">Name or Pass is wrong. Please retry again.</font>';
} else {
$this->setCookie();
header("Location: ./index.php");
}
return $ok;
}

public function setSession(){
return $_SESSION['ok'];
}

/**
* method for setup cookie to the browser whith the name & pass
*/

function setCookie() {
setcookie("name", $this->name, time()+3600*24, '/');
setcookie("pass", $this->pass, time()+3600*24, '/');
}

/**
* method for delete cookie from the browser
*/

function delCookie() {
setcookie("name", "", time() - 60, '/');
setcookie("pass", "", time() - 60, '/');
}

/**
* method for check cookie in the browser for the truth
*/

function checkCookie() {
$info = array();
if(isset($_COOKIE)) {
$info['name'] = isset($_COOKIE['name'])?$_COOKIE['name']:NULL;
$info['pass'] = isset($_COOKIE['pass'])?$_COOKIE['pass']:NULL;
}
return $info;
}

/**
* method for check cookie in the browser for the empty
*/

function emptyCookie() {
$true = $this->getInfoFromDbCookie();
if(!$true) {
return header("Location: ./index.php?page=log");
}
}


/**
* method for data processing in the DB by the cookie on the browser
*/

function getInfoFromDbCookie() {
$true = $this->checkCookie();
$sql = "SELECT `id` FROM `login`
WHERE `name` = '"
.$true['name']."'
AND `encode` = '"
.$true['pass']."'
LIMIT 1"
;
$true = connectDb::sql($sql);
$name = mysql_num_rows($true);
return $name;
}
}


//$autorization = new autorizationAdmin($_POST['name'], $_POST['pass']);

?>

В принципе - ничего сложно! Даже по сути эллементарно. Но! Вот так его применяю

$autorization = new autorizationAdmin($_POST['name'], $_POST['pass']);

if($_GET['act'] == 'logout') {
{

$autorization->delCookie();
session_destroy();
header ('Location: ./index.php?page=log');
}
}



Вопрос в следующем! Вылетают вот такие нотисы

Notice: Undefined index: name in Y:\home\billiard.com\www\admin\index.php on line 17

Notice: Undefined index: pass in Y:\home\billiard.com\www\admin\index.php on line 17

Notice: Undefined index: act in Y:\home\billiard.com\www\admin\index.php on line 19

Почему - так же мне понятно! Не понятно как избавиться от этого? Советы? Критика? Пожелания - приветствуются! Спасибо кто откликниться в столь ранний час! :)



Спустя 17 минут, 44 секунды (25.08.2011 - 10:00) T1grOK написал(а):
А POST точно приходит в скрипт?

Спустя 2 минуты, 3 секунды (25.08.2011 - 10:02) m4a1fox написал(а):
T1grOK
Да! Как только ввожу дынные - первые 2 нотиса пропадают!
P.S Их конечно можно скрыть - так как они не критичны! Но хотелось бы понять как их убрать вовсе! Вывод ошибок - error_reporting(E_ALL);

Спустя 2 минуты, 13 секунд (25.08.2011 - 10:04) linker написал(а):
Элементов с ключами $_POST['name'], $_POST['pass'], $_GET['act'] не существуют, о чём PHP тебе в явном виде и написал.

Спустя 1 минута, 42 секунды (25.08.2011 - 10:06) m4a1fox написал(а):
linker
Это я понимаю! Они пока что не существуют! Как только я ввожу данные форму то все - онги существуют!

Спустя 5 минут, 23 секунды (25.08.2011 - 10:11) linker написал(а):
А в чём тогда вопрос и суть проблемы? Если хочешь избавиться от нотисов, то прежде чем обращать к элементу массива по его ключу необходимо вообще-то проверить его существование.

Спустя 1 минута, 16 секунд (25.08.2011 - 10:13) m4a1fox написал(а):
linker
Цитата
необходимо вообще-то проверить его существование

Не спорю! В классе проверить? Но тогда от __constuct придется отказаться?! Так?! Или как то по другому?

Спустя 2 минуты, 20 секунд (25.08.2011 - 10:15) linker написал(а):
А зачем вообще создавать объект, т.е. вызывать конструктор, если в запросе не существует ни $_POST['name'], ни $_POST['pass']? Вывод, прежде чем создавать объект, нужно проверить а все ли необходимые данные существует.

Спустя 9 минут, 42 секунды (25.08.2011 - 10:25) m4a1fox написал(а):
linker
Цитата
прежде чем создавать объект, нужно проверить а все ли необходимые данные существует

Ага! Ясно! Тогда нафиг __coinstruct, буду юзать просто метод, дабы в объявлении класса, не приходили $_POST переменные!

Спустя 7 секунд (25.08.2011 - 10:25) linker написал(а):
exit(file_get_contents('../404.html'));
видимо перепутал с
die(file_get_contents('../404.html'));

Спустя 1 минута, 11 секунд (25.08.2011 - 10:26) linker написал(а):
m4a1fox
Ёпт, а чём проблема проверить наличие name и pass и пол результатам либоб создавать объект, либо не создавать? Да не конструкторе дело, а в логике.

Спустя 52 секунды (25.08.2011 - 10:27) T1grOK написал(а):
1) Переадресации в классе авторизации - это лишнее.
2) Проверять ПОСТ в классе тоже лишнее.
3) Лучше создать объект класса, а потом проверить методом авторизацию.
Нужно подходить более абстрактно.
Можно написать класс для работы с массивами:

class Arr{
public static function get(&$arr, $keys){
$array = array();
foreach($keys as $key=>$value){
$array[$key] = isset($arr[$key])?($arr[$key]:NULL;
}
return $array;
}
}


Что то типо такого.

Спустя 2 минуты, 33 секунды (25.08.2011 - 10:29) m4a1fox написал(а):
T1grOK
О как! До этого я еще не дорос! Но буду сейчас понимать! Спасибо!

linker
Цитата
чём проблема проверить наличие name и pass

Ок! Сейчас буду соображать как проверить!

Спустя 36 секунд (25.08.2011 - 10:30) linker написал(а):
Нахрена из простейшей фигни городить огород.

Спустя 5 минут, 29 секунд (25.08.2011 - 10:35) m4a1fox написал(а):
linker
Цитата
Нахрена из простейшей фигни городить огород

Мы не ищем легких путей!

Спустя 18 минут, 28 секунд (25.08.2011 - 10:54) m4a1fox написал(а):
Все! Разобралсо! Спасибо Всем!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.