Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр 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 Яндекс.Метрика Яндекс цитирования