За последние 24 часа нас посетили 17949 программистов и 1699 роботов. Сейчас ищут 1545 программистов ...

количество посетителей на сайте

Тема в разделе "PHP для новичков", создана пользователем Pasha, 1 май 2006.

  1. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    1. sid и SID разные колонки
    2. нужно проверять все mysql_query на оишбки.


    $timeout=time()+0.5*60;

    может тут знак минус? 8) или ты уже в будущее собрался?
     
  2. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Распечатай sql_2 и узнай много нового
     
  3. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    Код (Text):
    1. $sql_1="select TIME from SESSION where ('SID'='$sid[id]')";
    2. $sql_2="update SESSION set TIME=$timeout where ('SID'='$sid[id]')";
    3. $sql_3="insert into SESSION values('$sid[id]','$timeout','1')";
    делаю так!
    со временем помоему всё ок так как я TIME=$timeout и также где $sql_del="delete from SESSION where (TIME<$time)";
    тока не могу понять одного, в базе получается множество записей при обновлении страници, а при одной и той же сессии должна быть тока одна запись с именем этой сессии!
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Pasha


    работающий код
    http://440hz.ru/trash/sessions/

    PHP:
    1. <?
    2. // стартуем сессию
    3. // получаем е ID
    4. $sid=session_id();
    5. // текущее время
    6. $now=time();
    7. // время жизни сессии в секундах
    8. $deadline = $now - 60;
    9. // базовые хлопоты
    10. $server="localhost";
    11. $user="440hz";
    12. $passwd="*****";
    13.  
    14. $conn=mysql_connect($server,$user,$passwd);
    15. mysql_select_db("440hz",$conn);
    16.  
    17. // уничтожаем сессии, которые просрочены
    18. $sql_del="delete from SESSION where (TIME < ".$deadline.")";
    19.  
    20. // поиск сессии
    21. $sql_cnt = "select count(*) as CNT from SESSION where SID ='$sid'";
    22. // обновление сессии
    23. $sql_upd = "update SESSION set TIME = ".$now.", PAGES = PAGES+1 where SID = '$sid'";
    24. // вставка новой сессии
    25. $sql_ins = "insert into SESSION (SID,TIME,PAGES) values('$sid',$now,1)";
    26.  
    27. function Query($sql,$conn) {
    28.  
    29.     // получаем запрос
    30.     $result = mysql_query($sql,$conn);
    31.  
    32.     // обрабатываем
    33.     if(!$result) {
    34.         print('<hr>Ошибка выполнения запроса: '.$sql.'');
    35.         print('<hr>'.mysql_error());
    36.         exit();
    37.     }
    38.  
    39.     // при успехе возвращаем
    40.     return $result;
    41.  
    42. }
    43.  
    44. // убираем лишние
    45. Query($sql_del,$conn);
    46.  
    47. // ищем
    48. $result = Query($sql_cnt,$conn);
    49. // получаем результат
    50. $cnt = mysql_fetch_object($result);
    51. if ($cnt->CNT) {
    52.     // если ужо есть такая
    53.     Query($sql_upd,$conn);
    54. } else {
    55.     // новая сессия
    56.     Query($sql_ins,$conn);
    57. }
    58.  
    59. print ('<a href="./?rnd='.$now.'">обновить</a><hr>');
    60.  
    61. $rows = Query('SELECT * FROM SESSION',$conn);
    62.  
    63. print('<table border=1>');
    64.  
    65. while($row = mysql_fetch_object($rows)) {
    66.  
    67.     print('<tr><td>'.$row->SID.'</td><td>'.date('d.m.Y H:i'.$row->TIME).'</td><td>'.$row->PAGES.'</td></tr>');
    68.  
    69. }
    70.  
    71. print('</table>');
    72.  
    73. ?>
     
  5. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    440hz
    Ок, спасибо, теперь есть почва для дольнейшей работы :roll:
     
  6. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    я все же не пойму почему же у меня нормально скрипт не работает ведь строка
    Код (Text):
    1. $sql_2="update SESSION set TIME=".$timeout." where ('SID'='$sid[id]')";
    должна заменять TIME на значение в $timeout
    подскажите, в чём же я ошибаюсь? плиз?
     
  7. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Pasha

    а ты выведи запрос. увидишь что там на самом деле.

    я ж тебе привел РАБОЧИЙ код ... что-то не так?
     
  8. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    Во первых, как я уже говорил я новечёк в программирование, и в данный момент в первые изучаю что такое БД и с чем его едят и я не могу понять что вы подразумиваете под выводом этого запроса, этоже действие-иль у него есть результат? тогда как его вывести?-под выводом я понимаю что нужно послать запрос к бд, ражбить полученныи результат на дма массива и вывести его в таблице
    Во вторых я не совсем пойму что делает, а точнее как работает строка: $sql_cnt = "select count(*) as CNT from SESSION where SID ='$sid'"; и что такое $cnt->CNT
     
  9. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Pasha

    1. это отладка. как только что-то не выполняется (напримр запрос) нужно удостовериться что запрос корректный. Для этого он выводится просто в броузер

    $sql = 'bls-bls-bls';
    print($sql);
    $res=mysql_query($sql);

    запрос типа SELECT возвращает ресурс из которого можно получить или именованные массивы или объекты. я привык пользоваться объектами.

    select count(*) as cnt ... вернет кол-во записей подходящих под условие WHERE. так делается для того что б избежать лишних проверок ине тянуть все записи в скрипт. cnt это имя столбца в который эти данные поместяться. нужно же нам потом их оттуда доставать?

    пример:

    тебе нужно посчитать кол-во записей в таблице. новичек делает так:

    $res = mysql_query(select * from table);
    print mysql_num_rows($res);

    не подозревая о том, что все эти данные были закачаны из базы в скрипт. а сли таких записей 1000000? их что? тянуть все в скрипт? Конечно нет! Вот для этого и используют конструкции типа count(*) as cnt, тогда запрос вернет всего ОДНЦ строку в которой будет содержаться кол-во записей.

    $CNT->cnt это синтаксис к доступу переменной, принадлежащей объекту, который возвращает mysql_fetch_object($res); многие используют массивы. я редпочитаю объекты. дело вкуса, наверное.
     
  10. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    440hz
    спасибо за разяснения тока я так и не понял для чего же нам столбец cnt
     
  11. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Pasha

    реальный запрос с php.ru. эта цифра видна на первой странице. при условии времени жизни сессии 24 часа.

    Код (Text):
    1.  
    2. mysql> select count(*) as CNT from oops_sessions;
    3. +------+
    4. | CNT  |
    5. +------+
    6. | 2845 |
    7. +------+
    8. 1 row in set (0.00 sec)
    понятно?
     
  12. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    440hz
    или я глуп или чегото недогоняю, что это?
     
  13. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Pasha
    select count(*) as CNT from oops_sessions; - запрос
    CNT - поле
    2845 - значение
    1 row in set (0.00 sec) - время выполнения запроса.
     
  14. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    Hight
    т.е. поле CNT используется для временного хранеия информации, если да то для какой же информации и зачем?
     
  15. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Pasha
    извини,,, я не следил за вашей беседой с 440hz и не знаю что это поле у вас означает ) вы там чего-то спроектировали уже непонятного,,,, я лишь ответил на предыдущий вопрос )
     
  16. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    select count(*) as CNT from oops_sessions;

    конкретно в этом запросе, в поле CNT будет храниться значение количества записей таблицы
     
  17. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    в CNT я получаю кол-во текущих сессий.
     
  18. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    Hight
    Спасибо и на этом, хот я и подредактировал код 440hz(Отдельное вам спасидо) и он у меня работает, я так и не понял как же всёже это работает но как будет время и бодет по больше знаний так я сраз посторуясь разобраться,
    p.s. с паскалем было намного проще! 8) :roll: :oops:
     
  19. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    Спасибо, я разобрался и по аналогии кода 440hz подредактировал свой под себя и у меня всё заработало!
    вопрос закрыт, спасибо!
     
  20. el

    el Активный пользователь

    С нами с:
    23 окт 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Ташкент
    Доброго всем чегонибудь.
    Вот вопрос возник... счётчик это хорошо, а со статистикой ПО СТРАНАМ это вообще прелесть. на ВоВэбе нашёл один вроде нормальный, установился, считал... по началу.... но статистику не выводит вообще никак.

    сам скрипт (в архиве) http://planeta.uz/country.zip

    неподскажете в чём может быть дело? где ошибка, у кого?

    Заранее спасибо.

    UPD убрал ссылку самой статистики по причине замены счётчика. хотя нашёл в интернете такой же - работающий:
    http://www.vladtermo.ru/123/stat.php?d=t&what=countries связался с администрацией, которая любезно предоставила файлы прям с сетвера, чтоб я проверил на своём, сейчас будем смотреть.
     
  21. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    el
    для начала меняем аватарку на фотографию. написал ЛС
     
  22. el

    el Активный пользователь

    С нами с:
    23 окт 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Ташкент
    стганно, стганно... а уведомления на мыло не приходят... ну и ладно... аватарку поменял, терь бы кто помог со счётчиком, который страны контролировать будет...
     
  23. Self

    Self Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    13
    Симпатии:
    0
    Адрес:
    Москва
    всем привет!
    у меня вопрос по первоначальной теме счетчика посетителей

    написал я себе оный, все замечательно работает, только бывает глюк следующего плана: session_id() иногда не возвращает значения

    не понимаю в чем может быть ошибка


    http://mx9-2004.l2favorit.ru/ - здесь пример