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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Как узнать сколько посетителей на сайте???
 
 автор: Адоп Акробат   (15.09.2004 в 21:18)   письмо автору
 
 

Собственно сабж


Пака нет работает спрошу =)

   
 
 автор: cheops   (15.09.2004 в 21:40)   письмо автору
 
   для: Адоп Акробат   (15.09.2004 в 21:18)
 

Хм... для этого следует написать счётчик посещений. Код приводить не буду, слшиком много, а в разделе downloads лежит несколько вариантов счётичков.... Идея проста - следует в каждый файл сайта включить скрипт
<?php
  
include "count.php";
?>

В котором следует увеличивать текущий счётчик страницы или сайта на единицу.

http://www.softtime.ru/info/downloads.php

   
 
 автор: Адоп Акробат   (16.09.2004 в 04:22)   письмо автору
 
   для: cheops   (15.09.2004 в 21:40)
 

Я новерно неправильно вырозился. Мне надо узнать сколько посетителей находятся в данный момент на сайте, вот у вас допустем "Участники «Online»" но мне надо не зарегестрированые пользователе, а просто все посетители

   
 
 автор: J.Lex   (16.09.2004 в 06:54)   письмо автору
 
   для: Адоп Акробат   (16.09.2004 в 04:22)
 

Алтернативный вариатн через базу данных!
записывать айпи посетителя,добавить в таблицу и вывести результат!
вариантов много а способов и того более

   
 
 автор: Адоп Акробат   (16.09.2004 в 14:43)   письмо автору
 
   для: J.Lex   (16.09.2004 в 06:54)
 

А нельзя просто какойнебуть програмку написать??
А как из этой базы будет удолятся??
Я зашол, ушол, а в базе асталось

   
 
 автор: J.Lex   (16.09.2004 в 15:55)   письмо автору
 
   для: Адоп Акробат   (16.09.2004 в 14:43)
 

ну зашел ушел тоже довольно легко!просто через определенное время пусть автоматом чиститься кого нет на сайте

   
 
 автор: cheops   (16.09.2004 в 16:16)   письмо автору
 
   для: J.Lex   (16.09.2004 в 15:55)
 

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

   
 
 автор: Адоп Акробат   (16.09.2004 в 16:34)   письмо автору
 
   для: J.Lex   (16.09.2004 в 15:55)
 

А как зделать чтобы он афтоматом чистил кого нету ?? :)

   
 
 автор: cheops   (16.09.2004 в 16:45)   письмо автору
 
   для: Адоп Акробат   (16.09.2004 в 16:34)
 

Для этого в таблице для хранения IP-адресов следует добавить поле типа DATETIME, в которое в момент добаления записи помещать текущее время при помощи встроенной функции MySQL - NOW(). Посетители OnLine - это посетители за короткий интервал времени скажем за 5 минут, все записи не попадающие в этот интервал можно уничтожать...

   
 
 автор: Адоп Акробат   (16.09.2004 в 18:51)   письмо автору
 
   для: cheops   (16.09.2004 в 16:45)
 

Пасиба, но а как зделать чтобы они унечтожались????

   
 
 автор: cheops   (16.09.2004 в 22:09)   письмо автору
 
   для: Адоп Акробат   (16.09.2004 в 18:51)
 

Ну... например, при помощи SQL-запроса:
DELETE FROM base WHERE puttime<NOW() - INTERVAL 5 MINUTE

Который уничтожит все сообщения, поле puttime которых содержит время помещённое раньше, чем 5 минут назад.

   
 
 автор: Адоп Акробат   (16.09.2004 в 22:44)   письмо автору
 
   для: cheops   (16.09.2004 в 22:09)
 

Спосибо потехоньку начил понемать но не доконца :)
Только 2 вопросика есть если вам не трудно конечно :)
1-Как использовать функцию now()
2-Как зделать чтобы один и тотже IP не заносился в базы (с помощью primary key????)
А пот еще адно допустим я зашол и в это време все из таблице удолилось то мне покажет точто 0 посетителей или 1???

Если у вас завалялся такой примерчик немоглибы мне кинуть :)
Ато чона понять немогу как это работает извеняюсь за тупость :)

   
 
 автор: Kirill   (16.09.2004 в 22:56)   письмо автору
 
   для: Адоп Акробат   (16.09.2004 в 22:44)
 

Я постараюсь ответить.
1. Функцию NOW() включаете в текст запроса, это функция MySQL
К примеру:
<?php
$query 
"INSERT INTO bz VALUES(0, NOW());";
mysql_query($query);
?>

О работе этой и многих других функций можно из мануала по MySQL
http://dev.mysql.com/doc/mysql/ru/
2. Я, к сожалению точно не знаю (поэтому не буду писать), как решить эту задачку в 1 запрос.
> А пот еще адно допустим, я зашол и в это време все из таблице удолилось то мне покажет точто 0 посетителей или 1???
Если пользоваться вышеприведенным запросом, то удаляются информация о пользователях которые не проявляли никакой активности в течении 5 минут и более, т.е. вас это не коснется.

ЗЫ
А разве нельзя для этой цели использовать сессии? И просто проходиться по активным сессиям... Или это сделать невозможно? Я с сессиями никогда не работал...

   
 
 автор: cheops   (16.09.2004 в 23:00)   письмо автору
 
   для: Адоп Акробат   (16.09.2004 в 22:44)
 

1)Функция NOW() используется следующим образом: допустим имеется таблица base содержщая два поля
id INT
puttime DATETIME
вставить запись в такую таблицу можно при помощи запроса:
INSERT INTO base VALUES(12,"2004-09-16 22:48:00" )

Если полю puttime необходимо присовить текущее время, то вместо даты и вермени в двойных скобках следует поместить функцию NOW():
INSERT INTO base VALUES(12, NOW())

2) В общем можно, конечно, проверять при помещении IP-адреса в таблицу, имеется он в таблице или нет, но так как IP-адреса будут добавляться постоянно, а просмотр посетителей "OnLine" осуществляться лишь изредка - лучше помещать в базу данных все IP-адреса. Для того, чтобы отобразить уникальные следует воспользоваться ключевым словом DISTINCT:
SELECT DISTINCT(ip) FROM count

3) Нет, все IP-адреса делятся на две группы, помещённые в базу данных менее 5 минут назад и более 5 минут назад. Удаляются только последние, а так как после того, как вы зашли на сайт время обращения с вашего IP-адреса не успело устареть - удаление его не происходит.

   
 
 автор: Адоп Акробат   (17.09.2004 в 05:55)   письмо автору
 
   для: cheops   (16.09.2004 в 23:00)
 

Начинаю немного понимать :)

Нащет DISTINCT мне не очень понравилось потому что будет очень много ip-ишников валятся просто так :)

А вот можно чтобы было вот так: я зашол на сайт в базу занесся мой ип и тогда я зарефрешил эту строницу и мой ип как бы обновился(если ип одинаковый то он занново записывает данные на ево место, как бы обновляются)

   
 
 автор: glsv (Дизайнер)   (17.09.2004 в 11:06)   письмо автору
 
   для: Адоп Акробат   (17.09.2004 в 05:55)
 

>Нащет DISTINCT мне не очень понравилось потому что будет очень много ip-ишников валятся просто так :)

Но ведь они он хлеба то не просят :)

>А вот можно чтобы было вот так: я зашол на сайт в базу занесся мой ип и тогда я зарефрешил эту строницу и мой ип как бы обновился

Здесь вот какие соображения: По вашему варианту на каждом хите страницы будет выполняться "лишний" запрос к базе (для проверки существования IP).

В тоже время запрос online пользователей будет происходить несравнимо реже. И его применение с DINSTINCT даст те же результаты, что и обновление существующего IP.

Ну в общем, можно делать хоть так, хоть эдак.

   
 
 автор: Адоп Акробат   (17.09.2004 в 17:25)   письмо автору
 
   для: glsv (Дизайнер)   (17.09.2004 в 11:06)
 

Здравствуйте еще раз :)
У меня почемуто функция NOW() добовляет просто нули ???


А непотскажете какая функция узнает IP посетителя???

   
 
 автор: glsv (Дизайнер)   (17.09.2004 в 20:54)   письмо автору
 
   для: Адоп Акробат   (17.09.2004 в 17:25)
 

>У меня почемуто функция NOW() добовляет просто нули ???
А формат поля у вас тот что нужно? DATETIME?


> непотскажете какая функция узнает IP посетителя???
Попробуйте взять из переменной окружения $REMOTE_ADDR

   
 
 автор: Адоп Акробат   (17.09.2004 в 21:32)   письмо автору
 
   для: glsv (Дизайнер)   (17.09.2004 в 20:54)
 

>А формат поля у вас тот что нужно? DATETIME?
АГА

   
 
 автор: Адоп Акробат   (17.09.2004 в 21:48)   письмо автору
 
   для: Адоп Акробат   (15.09.2004 в 21:18)
 

Запрос я делаю вот такой

<?php
$query 
mysql_query("insert into ip(date,ip) value ('NOW()', '"$REMOTE_ADDR ."')");
if(!
$query)
{
 echo 
"Ошибка";
 echo 
mysql_error();
}
?>

   
 
 автор: Igorek   (17.09.2004 в 22:07)   письмо автору
 
   для: Адоп Акробат   (17.09.2004 в 21:48)
 

>Запрос я делаю вот такой
>
>
<?php
>$query mysql_query("insert into ip(date,ip) value
>('NOW()', '"
$REMOTE_ADDR ."')");
>
?>


Вероятнее всего NOW() нужно писать без кавычек, т.к. это стандартная функция

   
 
 автор: cheops   (17.09.2004 в 22:48)   письмо автору
 
   для: Адоп Акробат   (17.09.2004 в 21:48)
 

Igorek прав - кавычки совершенно лишние, в этом случае происходит попытка добавить строку "NOW()"...

   
 
 автор: Адоп Акробат   (18.09.2004 в 02:08)   письмо автору
 
   для: cheops   (17.09.2004 в 22:48)
 

С функцией NOW() получилось но теперь вот апять проблемы.
когда я делаю запрос, то IP не заносится в базу данных запрос вот такой:

<?php
$query 
mysql_query("insert into ip(date,ip) value (NOW(), '"$REMOTE_ADDR ."')");
?>

и еще делаю вот такой запрост

<?php
$total 
mysql_query("SELECT DISTINCT(ip) FROM ip");
echo 
$total;
?>

то мне пишет " Resource id #9" :(

   
 
 автор: glsv (Дизайнер)   (18.09.2004 в 04:04)   письмо автору
 
   для: Адоп Акробат   (18.09.2004 в 02:08)
 

По второму вопросу.
Нужно писать так:


<?
$total 
mysql_query("SELECT DISTINCT(ip) FROM ip"); 
while(
$ip mysql_fetch_array($total))
{
 echo 
$ip['ip'];
}

?>

   
 
 автор: Адоп Акробат   (18.09.2004 в 04:27)   письмо автору
 
   для: glsv (Дизайнер)   (18.09.2004 в 04:04)
 

А я зделал вот так
<?php
$total 
mysql_query("SELECT DISTINCT(ip) FROM ip");

$total1 mysql_num_rows($total);
echo 
$total;
?>

Так пойдет??

   
 
 автор: glsv (Дизайнер)   (18.09.2004 в 09:39)   письмо автору
 
   для: Адоп Акробат   (18.09.2004 в 04:27)
 

Если вы хотите узнать количество разных IP-адресов, то пойдет. Только вот так:

<?php 
$total 
mysql_query("SELECT DISTINCT(ip) FROM ip"); 

$total1 mysql_num_rows($total); 
echo 
$total1
?>

В echo нужно total1

   
 
 автор: cheops   (18.09.2004 в 11:47)   письмо автору
 
   для: Адоп Акробат   (18.09.2004 в 02:08)
 

А поле какого типа используется для хранения IP-адреса?

   
 
 автор: Адоп Акробат   (18.09.2004 в 14:06)   письмо автору
 
   для: cheops   (18.09.2004 в 11:47)
 

>А поле какого типа используется для хранения IP-адреса?
char(50)

to Дизайнер
Да я так и здела просто у меня $total1 в другом месте а когда я вам здесь писал ошибся :o)

   
 
 автор: Адоп Акробат   (18.09.2004 в 16:00)   письмо автору
 
   для: Адоп Акробат   (15.09.2004 в 21:18)
 

cheops как узнать IP посетителя ???
Потскажи плиз :o)

   
 
 автор: cheops   (18.09.2004 в 16:34)   письмо автору
 
   для: Адоп Акробат   (18.09.2004 в 16:00)
 

Хм... а $REMOTE_ADDR или $_SERVER['REMOTE_ADDR'] не работает?

   
 
 автор: Адоп Акробат   (18.09.2004 в 17:29)   письмо автору
 
   для: cheops   (18.09.2004 в 16:34)
 

$REMOTE_ADDR он ничо не записывает .Пример
<?php
$query 
mysql_query("insert into ip(date,ip) value (NOW(), '"$REMOTE_ADDR ."')"); 
?>


А $_SERVER['REMOTE_ADDR'] вставляет 127.0.0.1 но это не то

   
 
 автор: cheops   (18.09.2004 в 17:40)   письмо автору
 
   для: Адоп Акробат   (18.09.2004 в 17:29)
 

Хм... а дело где происходит? На локальном сервере или реальном? Для локального сервера ситуация нормальная как только перенесёте скрипты на реальный сервер - всё заработает как надо. Если не работает на реальном сервере, то следует спросить у хост-провайдера эквивалент перменной REMOTE_ADDR, скорее всего будет предложено использовать что-то вроде:
<?php
  urldecode
(getenv(HTTP_CLIENTIP));
?>

   
 
 автор: Адоп Акробат   (18.09.2004 в 17:49)   письмо автору
 
   для: cheops   (18.09.2004 в 17:40)
 

Да я пробывал на локальном серваке.
Теперь понил с этим разобрался :)
Спосибо!!!!!

   
 
 автор: Адоп Акробат   (19.09.2004 в 19:21)   письмо автору
 
   для: Адоп Акробат   (15.09.2004 в 21:18)
 

Опять проблема :(

Я загрузил все это хозяйство на виртуальный хост и он у меня просто напросто ничо не заносит в базу данных, пожет запроснеправельный???

<?php
$query 
mysql_query("insert into ip(date,ip) value (NOW(), '"$_SERVER['REMOTE_ADDR'] ."')");
?>

   
 
 автор: cheops   (19.09.2004 в 19:24)   письмо автору
 
   для: Адоп Акробат   (19.09.2004 в 19:21)
 

А чего пишет? Имеется ввиду есть какое-нибудь сообщение от интерпретатора PHP?

   
 
 автор: Адоп Акробат   (19.09.2004 в 19:33)   письмо автору
 
   для: cheops   (19.09.2004 в 19:24)
 

нет :(

Я когда писал
<?php
if(!$query)
echo 
"Ошибка"
?>


То он и пишет ошибка :)

   
 
 автор: Адоп Акробат   (19.09.2004 в 19:35)   письмо автору
 
   для: cheops   (19.09.2004 в 19:24)
 

А нет вот

<?php
errorYou have an error in your SQL syntax
Check the manual that corresponds to your MySQL server version for the right syntax to use near 'value (NOW(), '80.58.19.172')' at line 1
?>

   
 
 автор: Адоп Акробат   (19.09.2004 в 19:37)   письмо автору
 
   для: Адоп Акробат   (19.09.2004 в 19:35)
 

Все разобрался я писал value а надобыло values

Я почемуто путаюсь с этими бяками

   
Rambler's Top100
вверх

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