Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: подсчет пользователей зашедших за последние Н минут

Сообщения:  [1-8] 

 
 автор: PantiL   (02.10.2006 в 12:10)   письмо автору
 
   для: PantiL   (02.10.2006 в 01:11)
 

И вот что я еще обнаружил, при обновлении страницы в Опере Апач создает во временном каталоге новые файлы сессий (я в шоке), хотя при этом идентфикатор выводится в браузер один и тот же. (Это на локальном компе) на хостинге вроде как нормально.
Вот пример http://tilla.net

   
 
 автор: PantiL   (02.10.2006 в 01:11)   письмо автору
 
   для: PantiL   (02.10.2006 в 00:42)
 

Еще раз поклацал в Opere и в IE
Странно но разница есть
В Опере при каждом обновлении счетчик прибавляется(причем если выключить cookie то прибавляет по 2 :)), причем выполняется условие правильно

<?php
//Выполняется вот этот код
//и если для проверки ставим вот это
echo session_id();
//выводит идентификатор верно, а в базу пишет какой-то бред - добавляет новые записи(хотя они вообще не должны добавляться)
//с непонятно откуда взявшимся id 
$sQueryU "UPDATE `statistic` SET `time` = '".time()."' WHERE `sid` = '".session_id()."' LIMIT 1;"
    
mysql::query($sQueryU);
?>

В IE счетчик при обновлении страницы не прибавляется (что и должно происходить)

Какая может быть связь между браузером и выполнением скрипта на сервере

   
 
 автор: PantiL   (02.10.2006 в 00:42)   письмо автору
 
   для: cheops   (02.10.2006 в 00:12)
 

В том то и дело что ошибки при запросе не возникает.
Моя обертка для функции mysql_query прерывает выполнение скрипта при возникновении ошибки

<?php
class mysql
{
    
//Обертка для стандартной функции mysql_query
    //Делается проверка на успешность выполненного запроса
    
static function query($sQuery)
    {
        
$rRes mysql_query($sQuery);
        if(
mysql_errno())
        {
            throw new 
Exception(mysql_errno()."::".mysql_error());
        }
        else
        {
            return 
$rRes;
        }
    }
}
?>

Да и еще одно загадочное проишествие - скрипт неправильно себя ведет в Opere а в IE вроде как нормально

   
 
 автор: cheops   (02.10.2006 в 00:12)   письмо автору
 
   для: PantiL   (02.10.2006 в 00:07)
 

Проверьте что выводит функция mysql_error() после выполнения запроса?

   
 
 автор: PantiL   (02.10.2006 в 00:07)   письмо автору
 
   для: PantiL   (01.10.2006 в 20:34)
 

Значит я это реализовал вот так,
Таблица в которую записую идентификаторы состоит из 3-х столбцов
sid - идентификатор
time - время записи
id_user - флаг определяющий гость или пользователь (у гостя 0 у пользователя его порядковый номер)
Далее код

<?php
//Удаляем все старые записи - чистим таблицу
//ONLINE_TIME - период времени за который происходит подсчет 
$iTime time() - ONLINE_TIME*60;
$sQueryDel "DELETE FROM `statistic` WHERE `time`<$iTime ;";
mysql::query($sQueryDel);
//Проверка записа ли уже такой sid
$sQuerySID "SELECT * FROM `statistic` WHERE `sid`='".session_id()."' ;";
$rResSID mysql::query($sQuerySID);
//Если такой идентификатор есть то изменим в этой записи время на текущее
if(mysql_num_rows($rResSID))

    
$sQueryU "UPDATE `statistic` SET `time` = '".time()."' WHERE `sid` = '".session_id()."' LIMIT 1;";
    
mysql::query($sQueryU);
}
else
{
//если идентификатора нет, запишем его
    
$sQueryI "INSERT INTO `statistic` ( `sid` , `time` , `id_user` ) VALUES ('".session_id()."', '".time()."', '$USER->id');";
    
mysql::query($sQueryI);
}
?>


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

   
 
 автор: PantiL   (01.10.2006 в 20:34)   письмо автору
 
   для: kasmanaft   (01.10.2006 в 20:13)
 

Спасибо

   
 
 автор: kasmanaft   (01.10.2006 в 20:13)   письмо автору
 
   для: PantiL   (01.10.2006 в 19:29)
 

Да, наверное, подойдет .. только нужно еще время записывать, чтобы чистить таблицу от старых записей

   
 
 автор: PantiL   (01.10.2006 в 19:29)   письмо автору
 
 

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

   

Сообщения:  [1-8] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования