Вы не зашли.
Вот сделал. Подскажите пожалуйста, нет ли ошибок? А то я вот только начал use PDO...
Код:
<?php |
|
///// |
$time = $_SERVER['REQUEST_TIME']; //Время с запуска страницы |
$offline = $time - 240; //Лимит тунеянства |
///// |
$browser = isset($_SERVER['HTTP_X_OPERAMINI_PHONE_UA']) ? $_SERVER['HTTP_X_OPERAMINI_PHONE_UA'] : $_SERVER['HTTP_USER_AGENT']; |
//Получание данных о браузере |
$ip = $_SERVER['REMOTE_ADDR']; |
//Получение данных об ip-адресе |
|
//DB CONNECTION// |
$host_db = 'mysql:host=localhost;dbname=tsb'; |
$user = 'root'; |
$pass = ''; |
///// |
$db = new PDO($host_db, $user, $pass); //Соединение с БД |
$db->exec("SET NAMES 'utf8';"); //Установка кодировки |
|
//SESSION// |
if(isset($_COOKIE['PHPSESSID'])) |
{ |
session_start(); |
|
if(isset($_COOKIE['REMEMBER']) AND $_SESSION['ip'] != $ip) |
{ |
$Hq1 = $db->prepare("SELECT `id`, `team` FROM `users` WHERE `remember`=1 AND `ip`=? LIMIT 1;"); |
$Hq2 = $db->prepare("UPDATE `users` SET `online`='$time', `browser`=?, WHERE `ip`=? LIMIT 1;"); |
///// |
$Hq1->execute(array($ip)); |
|
if($Hq1->rowcount()) |
{ |
$_SESSION = null; |
session_regenerate_id(1); |
|
$Ha = $Hq1->fetch(PDO::FETCH_ASSOC); |
$Hq1->closecursor(); |
|
$_SESSION['id'] = $Ha['id']; //Из базы будет извлекаться... |
$_SESSION['team'] = $Ha['team']; //Из базы будет извлекаться... |
$_SESSION['ip'] = $ip; |
///// |
$Hq2->execute(array($browser, $ip)); |
$Hq2->closecursor(); |
} |
else |
{ |
$_SESSION = null; |
session_destroy(); |
} |
} |
elseif(!isset($_COOKIE['REMEMBER']) AND $_SESSION['ip'] != $ip) |
{ |
$_SESSION = null; |
session_destroy(); |
} |
} |
else |
{ |
$Hq3 = $db->prepare("REPLACE INTO `guests` SET `online`='$time', `browser`=?, `ip`=?;"); |
$Hq3->execute(array($browser, $ip)); |
$Hq3->closecursor(); |
} |
|
?> |
Друг подсказал, что надо и браузер в это дело подключить и еще ип сравнивать только по 3м первым диапазонам. 4ый меняется.
Отредактировано tipsun (2011.04.13 22:10)
#42.
Nu3oN
Off
(11)
Moderator
2011.04.14 00:12
вместо $db->exec("SET NAMES 'utf8';"); делай так
Код:
<?php |
$db = new PDO($host_db, $user, $pass, array(PDO :: MYSQL_ATTR_INIT_COMMAND => 'SET NAMES `utf8`')); |
?> |
Вместо fetch(PDO::FETCH_ASSOC); укажи один раз, и вс

Код:
<?php |
$db-> setAttribute(PDO :: ATTR_DEFAULT_FETCH_MODE, PDO :: FETCH_ASSOC); |
?> |
Вот это:
Код:
<?php |
$stmt = $db -> prepare("..."); |
$stmt -> execute(array(...)); |
$stmt -> closecursor(); |
?> |
Сделай как плагинизацию (в котором ты будешь разширять класс пдо) такой метод
Код:
<?php |
class ClassBase extends PDO { |
|
// ля ля ля |
|
/** |
* prepare |
* |
* @param string $sql Строка запроса. |
* @return object |
**/ |
|
public function prepare($sql) |
{ |
|
$stmt = parent :: prepare($sql, array(PDO :: ATTR_STATEMENT_CLASS => array('PDOStatement'))); |
return $stmt; |
} |
} |
|
?> |
В общем глянь как это в роторе сделано! удобней чем каждый раз это все писать!
Я буду лучше голоден, но между креслом и рулем и на дороге.
Спс

Как будет время рассмотрю остальную половину сообщения. Под рукой компа нет... С моб не удобно...
Как бы мне снова не заблудиться
Отредактировано tipsun (2011.04.14 12:12)
Nu3oN написал:
$db = new PDO($host_db, $user, $pass, array(PDO :: MYSQL_ATTR_INIT_COMMAND => 'SET NAMES `utf8`'));
http://php.net/ChangeLog-5.php#5.3.6Implemented FR #47802 (Support for setting character sets in DSN strings). (Kalle)
так, к сведению, начиная с PHP 5.3.6 кодировку можно указвыать прямо в строке подключения
Ахринеть, это только сессия!

Надо более компактно и логично сделать...
Код:
<?php |
|
$time = $_SERVER['REQUEST_TIME']; //Время с запуска страницы |
$offline = $time - 240; //Лимит тунеянства |
///// |
$browser = $_SERVER['HTTP_USER_AGENT']; |
$ip = $_SERVER['REMOTE_ADDR']; |
$stat_ip = substr($ip, 0, strrpos($ip, '.')); |
|
//DB CONNECTION// |
$base = array( |
'localhost', //Host |
'root', //User |
'', //Pass |
'tsb', //Base |
'utf8'); //Char |
|
if('5.3.6' > phpversion()) |
{ |
$attr[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES `'.$base[4].'`;'; |
} |
|
$db = new PDO('mysql:host='.$base[0].';dbname='.$base[3].';charset='.$base[4].';', $base[1], $base[2], $attr); |
|
//SESSION// |
if(!empty($_COOKIE['PHPSESSID'])) |
{ |
session_start(); |
|
if(!empty($_COOKIE['REMEMBER']) && $_SESSION['browser'] != $browser && $_SESSION['ip'] != $stat_ip) |
{ |
$Hq1 = $db->prepare(" |
SELECT `id`, `team` |
FROM `users` |
WHERE `remember`=1 AND `browser`=? AND `ip` LIKE ?;"); |
|
$Hq2 = $db->prepare(" |
UPDATE `users` |
SET `online`='$time' |
WHERE `browser`=? AND `ip` LIKE ?;"); |
///// |
$Hq1->execute(array($browser, $stat_ip.'%')); |
|
if($Hq1->rowcount()) |
{ |
$_SESSION = null; |
session_regenerate_id(1); |
|
$Ha = $Hq1->fetch(PDO::FETCH_ASSOC); |
$Hq1->closecursor(); |
|
$_SESSION['id'] = $Ha['id']; |
$_SESSION['team'] = $Ha['team']; |
$_SESSION['browser'] = $browser; |
$_SESSION['ip'] = $stat_ip; |
///// |
$Hq2->execute(array($browser, $stat_ip.'%')); |
$Hq2->closecursor(); |
} |
else |
{ |
$_SESSION = null; |
session_destroy(); |
setcookie('PHPSESSID', null); |
} |
} |
elseif(empty($_COOKIE['REMEMBER']) && $_SESSION['browser'] != $browser && $_SESSION['ip'] != $stat_ip) |
{ |
$_SESSION = null; |
session_destroy(); |
setcookie('PHPSESSID', null); |
} |
} |
else |
{ |
$Hq3 = $db->prepare(" |
REPLACE INTO `guests` |
SET `online`='$time', `browser`=?, `ip`=?;"); |
$Hq3->execute(array($browser, $ip)); |
$Hq3->closecursor(); |
} |
|
?> |
Отредактировано tipsun (2011.04.16 18:06)
Чет мне народ говорит, что говнокод.
Типа по диапазону не стоит проверять, да и если так, то можно через модем билайн зайти, браузер поставить как у жертвы и все...
- - - -
Как тогда сделать?
Отредактировано tipsun (2011.04.17 10:10)
я вообще не понимаю, нафига ты что-то мудришь? ты банковскую систему чтоли пишешь? идентифицируй пользователя по сессии и хватит. если пользователь умудрился потерять потерять куки, то ему уже ничто не поможет, ИМХО.
Вебмани хотел переплюнуть

- - - -
Снова я заблудился.
- - - -
Пофиг на функцию запомнить...
Вот типа авторизовался, побродил.
Вышел кука ид сессии удалилась, она ведь при закрытия браузера удаляется...
И эмм... все?
- - - -
Код:
<?php |
|
if($_COOKIE['PHPSESSID']) |
{ |
session_start(); |
} |
|
?> |
Отредактировано tipsun (2011.04.17 12:12)
Зачем вообще на куках делать? Сессия же интереснее и никто не увидит хэш.
ДАУН-Данная Аватара Унаследована Незнайкой