#1 2010.08.07 12:29

@Office
Участник
Откуда: Лесосибирск/Красноярский край
Зарегистрирован: 2010.02.17
Сообщений: 38
Карма: 0
Профиль

OnLine

Вобщем не могу понять, куда сувануть $_SERVER['REQUEST_URI'], чо-оп обновлялся при переходе на другую страницу : )
Вот код :

Код:

1
span style="color: #0000BB"><?php$data = dirname(__FILE__) . '/online.dat';$file = file($data);if (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR');} else { $ip = getenv('REMOTE_ADDR');}$ua = getenv('HTTP_USER_AGENT');for($i = 0; $i < count($file); $i++) { list($agent, $user, $last) = explode('::', $file[$i]); if (!empty($user) && !empty($last) && !empty($agent)) { if($last < time - 180) { $user = null; $last = null; $agent = null; } if(!empty($user) && !empty($last) && !empty($agent)) { if($ip == $user && $ua == $agent) { $online_array[] = $ua.'::'.$ip.'::'.time()."\r\n"; } else { $online_array[] = $agent.'::'.$user.'::'.$last; } } }}if(isset($online_array)) { foreach($online_array as $i => $str) { if($str == $ua.'::'.$ip.'::'.time()."\r\n") { $ok = $i; break; } } foreach($online_array as $j => $str) { if($ok == $j) { $online_array[$ok] = $ua.'::'.$ip.'::'.time()."\r\n"; break; } }}$open = fopen($data, 'w') or exit('Не могу открыть файл '.basename($data));flock($open, 2);if(empty($online_array)) { $online_array[] = $ua.'::'.$ip.'::'.time()."\r\n";}foreach($online_array as $str) { fputs($open, $str);}flock($open, 3);fclose($open);echo count($file);?>

Помогите засунуть его в нужное место. Мне нужно записывать, где сейчас находится чел  tongue
Добавлено спустя   1 минуту  56 секунд:
И еще, если можно. Замутите что-бы записывало кол-во переходов юзера : )


tongue

Неактивен

#2 2010.08.07 15:49

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: OnLine

для начала откажись от хранения данных в файле. передам я юзерагент с символами :: и нарушу тебе структуру, что делать тогда будешь?

Неактивен

#3 2010.08.07 17:20

@Office
Участник
Откуда: Лесосибирск/Красноярский край
Зарегистрирован: 2010.02.17
Сообщений: 38
Карма: 0
Профиль

Re: OnLine

Щас напишу тогда на mysql ^^ попробую oop заюзать :-d


tongue

Неактивен

#4 2010.08.07 17:21

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: OnLine

Gemorroj, как вариант, ':' -> '[амперсанд]#58;'

Отредактировано Morgan (2010.08.07 17:22)


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#5 2010.08.07 17:25

@Office
Участник
Откуда: Лесосибирск/Красноярский край
Зарегистрирован: 2010.02.17
Сообщений: 38
Карма: 0
Профиль

Re: OnLine

Так лучше?

Код:

1
span style="color: #0000BB"><?phpclass MySQL { private $_link; public function connect ($host, $user, $pass, $db) { $this->_link = mysql_connect($host, $user, $pass) or die('Немогу подключиться к серверу!'); mysql_select_db($db, $this->_link) or die('Немогу подключиться к базе данных'); mysql_unbuffered_query('SET NAMES `utf8`', $this->_link); } public function query ($sql) { return mysql_query($sql, $this->_link); } public function result ($sql, $value = 0) { return mysql_result($sql, $this->_link, $value); } public function escape ($str) { return mysql_real_escape_string(trim($str)); } public function utf ($str) { return htmlspecialchars($str, ENT_QUOTES); } }$sql = new MySQL;$sql->connect('localhost', 'root', '', 'setew');if(isset($_SERVER['HTTP_X_OPERAMINI_PHONE_UA'])) { $ua = $sql->utf($_SERVER['HTTP_X_OPERAMINI_PHONE_UA']);} else { $ua = $sql->utf($_SERVER['HTTP_USER_AGENT']);}$ip = $sql->utf($_SERVER['REMOTE_ADDR']);if (mysql_num_rows($sql->query("select (`id`) from `online` where `ip`='".$sql->escape($ip)."' and `ua`='".$sql->escape($ua)."' limit 1"))) { $sql->query("update `online` set `time`='".time()."', `where`='".$sql->escape($_SERVER['REQUEST_URI'])."', `count`=`count`+'1' where `ip`='".$sql->escape($ip)."' and `ua`='".$sql->escape($ua)."' limit 1");} else { $sql->query("insert into `online` set `time`='".time()."', `where`='".$sql->escape($_SERVER['REQUEST_URI'])."', `ip`='".$sql->escape($ip)."', `ua`='".$sql->utf($ua)."', `count`='1'");}?>

Добавлено спустя   1 минуту :
Иль что - то нужно еще добавить ? smile


tongue

Неактивен

#6 2010.08.07 17:43

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: OnLine

sql injection, несоблюдение стандартов кодирования...
  public function utf ($str) {
    return htmlspecialchars($str, ENT_QUOTES);
  }
это совершенно ни к чему
mysql_result($sql, $this->_link, $value);
это не корректно
return mysql_real_escape_string(trim($str));
почему не используется ресурс соединения с БД?

Неактивен

#7 2010.08.07 17:54

@Office
Участник
Откуда: Лесосибирск/Красноярский край
Зарегистрирован: 2010.02.17
Сообщений: 38
Карма: 0
Профиль

Re: OnLine

Я уже все переделал smile

public function utf ($str) {
    return htmlspecialchars($str, ENT_QUOTES);
  }
Это плохо разве? О_О а как еще фильтровать при выводе?

Отредактировано @Office (2010.08.07 17:55)


tongue

Неактивен

#8 2010.08.07 17:58

@Office
Участник
Откуда: Лесосибирск/Красноярский край
Зарегистрирован: 2010.02.17
Сообщений: 38
Карма: 0
Профиль

Re: OnLine

Мля я грю уже сделал все smile щас покажу как сделал smile


Вложения

Отредактировано @Office (2010.08.07 17:59)


tongue

Неактивен

#9 2010.08.07 18:35

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: OnLine

tipsun написал:

Не обязательно от файлового хранения отказываться...

Обязательно. Этот говнокод потом в могилу весь код потянет.
И никто-ничего тут не усложняет, кот элементарен до безобразия.
Добавлено спустя   1 минуту  15 секунд:
@Office, все равно, код не корректен.

Неактивен

#10 2010.08.07 18:40

@Office
Участник
Откуда: Лесосибирск/Красноярский край
Зарегистрирован: 2010.02.17
Сообщений: 38
Карма: 0
Профиль

Re: OnLine

Что именно там не корректо? Помоги сдлать корректнее smile


tongue

Неактивен

#11 2010.08.07 18:43

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: OnLine

Комментарий номер 6

Неактивен

#12 2010.08.07 18:46

@Office
Участник
Откуда: Лесосибирск/Красноярский край
Зарегистрирован: 2010.02.17
Сообщений: 38
Карма: 0
Профиль

Re: OnLine

Что тут некорректно?
public function utf ($str) {
    return htmlspecialchars($str, ENT_QUOTES);
}

mysql_result($sql, $this->_link, $value); - снес функцию.

return mysql_real_escape_string(trim($str));
почему не используется ресурс соединения с БД?

Исправлено.

Еще не корректно?


tongue

Неактивен

#13 2010.08.07 19:03

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: OnLine

почему htmlspecialchars называется utf? тем более что ты там даже не указываешь кодировку для htmlspecialchars и по умолчанию она ISO-какая-то там.
mysql_result - посмотри синтаксис этой функции и сравни с тем, что ты ей передаешь
ну и повсюду sql injection проходит. твой htmlspecialchars/utf никак не защищает тебя от sql injection, тебя защитит только mysql_real_escape_string
перед занесением данных в БД обрабатывать их с помощью htmlspecialchars не нужно. htmlspecialchars применяется перед самым выводом данных пользователю. т.е. в echo, print и т.п. (для простоты понимания)

Неактивен

#14 2010.08.07 19:10

@Office
Участник
Откуда: Лесосибирск/Красноярский край
Зарегистрирован: 2010.02.17
Сообщений: 38
Карма: 0
Профиль

Re: OnLine

А название играет роли? О_о
Потому что я так превык, называть функцию utf.

mysql_real_escape_string использую при записи в БД, а при выводе: "htmlspecialchars".

Я не заношу в бд фильтруя htmlspecialchars()

ENT_QUOTES экранирует ковычки, sql inj не прокатит smile
Добавлено спустя   5 минут  46 секунд:
Кхмм.. если ты про фильтрацию USERAGENTA то убрал smile

Отредактировано @Office (2010.08.07 19:11)


tongue

Неактивен

#15 2010.08.07 20:07

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: OnLine

@Office, а нулл байты или обратные слеши он фильтрует? экранируй с помощью mysql_real_escape_string и не выдумывай велосипедов
стандартизация кода это очень важный момент, если ты привык к utf, то это не значит что это правильно и так делать надо. нарушая стандарты кодирования, ты тем самым гробишь проект в плане расширяемости. во многих конторах код не считается принятым пока полностью не прокомментирван и оформлен в соответствии со стандартами.

Неактивен

#16 2010.08.07 20:30

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: OnLine

Геморрой, для тебя конечно код простой big_smile (в рифму получилось)
Автор счетчика, не точный он у тебя будет с переходами, скорее всего...
Добавлено спустя   4 минуты  18 секунд:
Потому, что после 3х минут юзер с базы удаляется, отсюда следует и неточность. Вдруг он подаст признак присутствия на сайте после 3х минут, а его переходы уже по-новой будут считаться...

Отредактировано tipsun (2010.08.07 20:43)

Неактивен

#17 2010.08.07 22:19

@Office
Участник
Откуда: Лесосибирск/Красноярский край
Зарегистрирован: 2010.02.17
Сообщений: 38
Карма: 0
Профиль

Re: OnLine

tipsun, внимательно код смотри, не удаляются записи.
Если он вдруг зайдет, переходы будут продолжаться.

Gemorojj, Т.е ты хочешь сказать при выводе mysql_real_escape_string использовать? О_о
Я при записи, использую его, а при выводе htmlspecialchars, а насчет utf(), у тебя есть более наилучший вариант названия функции?
Покажи, может превыкну к нему. Незнаю, как только ознакомился с функциями, начал юзать utf..

Отредактировано @Office (2010.08.07 22:19)


tongue

Неактивен

#18 2010.08.07 22:30

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: OnLine

Автор счетчика, извиняюсь. Увидел smile посчитать всех, у кого время больше лимита, таким же запросом и выводим... Мда, всё продуманно...

Неактивен

#19 2010.08.07 22:59

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: OnLine

@Office написал:

Т.е ты хочешь сказать при выводе mysql_real_escape_string использовать?

совсем нет, где я такое говорил?
Я бы лично htmlspecialchars вообще не выделял в отдельный метод.

Неактивен

#20 2010.08.07 23:24

@Office
Участник
Откуда: Лесосибирск/Красноярский край
Зарегистрирован: 2010.02.17
Сообщений: 38
Карма: 0
Профиль

Re: OnLine

Хз, геморой. Привык делать так, не считаю ошибкой smile
Всеравно, спасибо за совет.

Gemor, еще вопрос, стоило ли тут использовать такое мего OOP? :-D

Отредактировано @Office (2010.08.07 23:25)


tongue

Неактивен

#21 2010.08.08 00:02

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: OnLine

ООП предпологает правильный, с точки зрения структуры, код. Почитай об именовании классов, методов, свойств, комментариев. Да и ООП тут в принципе-то и почти нет. Просто не используются никакие его приемущества. Набор функций объединенных неймспейсом (PHP 5.3) делает абсолютно тоже самое.
ООП не помешает в принципе, т.к. если нужно будет что-то расширить, изменить, то с ним намного проще будет это сделать.

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.017 s