Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Paul_REE
0 / 0 / 0
Регистрация: 30.07.2017
Сообщений: 24
1

Счётчик посетителей онлайн (PHP, jQuery mySQL) - не работает?

25.12.2017, 01:02. Просмотров 902. Ответов 12

Добрый вечер!
Имеется следующий код счётчика посетителей онлайн. Оригинал статьи находится здесь.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
require_once("connection.php"); // подключаем скрипт
 
session_start();
$_SESSION['session']=session_id();
 
 
function total_online()
{
 global $connection;
 
 $current_time=time();
 $timeout = $current_time - (60);
 
 $session_exist = "SELECT session FROM total_visitors WHERE session='".$_SESSION['session']."'";
 
 $result_session_exist = mysqli_query($connection, $session_exist) or die("Ошибка " . mysqli_error($connection));
 
 $session_check = mysqli_num_rows($result_session_exist);
 
 if($session_check==0 && $_SESSION['session']!="")
 {
 "INSERT INTO total_visitors values ('','".$_SESSION['session']."','".$current_time."')";
 }
 else
 {
  "UPDATE total_visitors SET time='".time()."' WHERE session='".$_SESSION['session']."'";
 }
 
 $select_total = "SELECT * FROM total_visitors WHERE time>= '$timeout'";
 
 $result_select_total = mysqli_query($connection, $select_total) or die("Ошибка " . mysqli_error($connection));
 
 $total_online_visitors = mysqli_num_rows($result_select_total);
 return $total_online_visitors;
}
 
if(isset($_POST['get_online_visitor']))
{
 $total_online=total_online();
 echo $total_online;
 exit();
}
?>
 
<html>
<head>
<script type="text/javascript" src="js/jquery-3.2.1.js"></script>
<script type="text/javascript">
$(document).ready(function(){
setInterval(function()
{ 
 $.ajax
 ({
 type:'post',
 url:'',
 data:{
  get_online_visitor:"online_visitor",
 },
 success:function(response) {
 if(response!="")
 {
  $("#online_visior_value").html(response);
 }
 }
 });
}, 10000)
}); 
</script>
</head>
<body>
<?php
 
// To Get Total Online Visitors
$total_online_visitors=total_online();
 
?>
 
<div id="stat">
<li>Онлайн <span id="online_visior_value"><?php echo $total_online_visitors;?></span></li>
</div>
</body>
</html>


При запуске этого кода (т.н. файл statistics.php), отображается текст Онлайн 0. У вас также? Или где-то в коде закралась ошибка?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2017, 01:02
Ответы с готовыми решениями:

Php + mySql? jQuery? CSS?
С помощью каких инструментов можно реализовать выделенные области PSD-макета?...

Не работает PHP+jQuery+AJAX
Есть файл, называется all.php. В нем есть Javascript код. Он расположен между...

Php+MySQL jquery Сначала загрузить пустую таблицу, потом в неё догрузить значения из БД
Есть таблица HTML. Неважно какая. Пусть будет простая. Такого вида: ...

Счётчик посетителей (php+mysql)
Нуждаюсь в вашей помощи. Требуется самый простой, несложный счётчик...

счётчик онлайн посетителей
Помогите,пожалуйста, написать счйтчик онлайна посетителей на сайте. Только...

12
ytf
230 / 252 / 183
Регистрация: 15.08.2017
Сообщений: 1,442
25.12.2017, 16:40 2
Цитата Сообщение от Paul_REE Посмотреть сообщение
if($session_check==0 && $_SESSION['session']!="")
PHP
1
if($session_check==0)
0
Paul_REE
0 / 0 / 0
Регистрация: 30.07.2017
Сообщений: 24
25.12.2017, 17:08  [ТС] 3
Цитата Сообщение от ytf Посмотреть сообщение
if($session_check==0)
Всё-равно тоже самое
Данные в базу не пишутся. Может быть проблема в самом условии if, где идёт передача SQL запроса?
0
ytf
230 / 252 / 183
Регистрация: 15.08.2017
Сообщений: 1,442
25.12.2017, 19:06 4
Цитата Сообщение от Paul_REE Посмотреть сообщение
SELECT session FROM total_visitors WHERE session='".$_SESSION['session']."'
достаточно одной найденной строки в таблице, поэтому можно добавить лимит

SQL
1
SELECT `session` FROM total_visitors WHERE `session`='".$_SESSION['SESSION']."' LIMIT 1
Добавлено через 3 минуты
проверьте "журнал ошибок" в панели хостинга или файл error_log

Добавлено через 3 минуты
после таймаута посещения можно удалять или перемещать в другую таблицу, возможно это ускорит запрос update и запрос select where time>timeout

Добавлено через 3 минуты
Цитата Сообщение от Paul_REE Посмотреть сообщение
$.ajax ({ type:'post', url:'',
ajax запрос идёт на пустой url или вы скрыли адрес сайта только на форуме?
0
Paul_REE
0 / 0 / 0
Регистрация: 30.07.2017
Сообщений: 24
27.12.2017, 21:54  [ТС] 5
Цитата Сообщение от ytf Посмотреть сообщение
ajax запрос идёт на пустой url или вы скрыли адрес сайта только на форуме?
Не скрывал. А что должно быть в url:''? Код взят с упомянутого в первой записи урока и немного адаптирован под себя. Сайт тестирую на localhost. А где найти файл error_log?
0
ytf
230 / 252 / 183
Регистрация: 15.08.2017
Сообщений: 1,442
27.12.2017, 23:10 6
Цитата Сообщение от Paul_REE Посмотреть сообщение
А что должно быть в url:''?
Javascript
1
url: '/statistics.php',
Добавлено через 6 минут
Цитата Сообщение от Paul_REE Посмотреть сообщение
где найти файл error_log?
в случае kibojoe linux и веб-сервера apache путь к файлу
Код
/var/log/httpd/error_log
Добавлено через 12 минут
проверьте в phpmyadmin в таблице total_visitors что поле id имеет галочку AUTO_INCREMENT, индекс PRIMARY
0
Paul_REE
0 / 0 / 0
Регистрация: 30.07.2017
Сообщений: 24
27.12.2017, 23:14  [ТС] 7
ytf, не работает и со ссылкой. В демке урока тоже ссылка пустая если глянуть исходный код страницы.
По адресу /var/log/ папки httpd нет и в папке apache2 пусто (система Mac OS X 10.13.1).
0
Paul_REE
0 / 0 / 0
Регистрация: 30.07.2017
Сообщений: 24
27.12.2017, 23:20  [ТС] 8
Скрины базы.
0
Миниатюры
Счётчик посетителей онлайн (PHP, jQuery mySQL) - не работает?   Счётчик посетителей онлайн (PHP, jQuery mySQL) - не работает?  
ytf
230 / 252 / 183
Регистрация: 15.08.2017
Сообщений: 1,442
27.12.2017, 23:56 9
Кодировку поля session можно поменять на utf8_general_ci, так как вряд ли в нём будут японские иероглифы

Добавлено через 3 минуты
Названия полей и таблиц в sql запросах на всякий случай лучше обернуть символом
Код
`
Добавлено через 14 минут
PHPHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
/* для уменьшения объёма кода, облегчения чтения я применяю скрипт
https://github.com/plohoyav/php_mysql_upros   */
require 'db.php';
 
session_start();
$_SESSION['session'] = session_id();
$current_time = time();
$timeout = $current_time - 60;
$session_exist = mr("SELECT `session` FROM `total_visitors`" . sqlwhere(array(
    "session" => $_SESSION['session']
)));
 
if ($session_check === false)
    {
    mq("INSERT INTO `total_visitors`" . sqlset(array(
        "session" => $_SESSION['session'],
        "time" => $current_time
    )));
    }
  else
    {
    mq("UPDATE `total_visitors`" . sqlset(array(
        "time" => $current_time
    )) . sqlwhere(array(
        "session" => $_SESSION['session']
    )));
    }
 
$total_online = mf("SELECT COUNT(*) s FROM `total_visitors` WHERE `time`>=" . $timeout, "s");
 
if (isset($_POST['get_online_visitor']))
    {
    echo $total_online;
    exit;
    }
 
?>
 
<html>
<head>
<script type="text/javascript" src="js/jquery-3.2.1.js"></script>
<script type="text/javascript">
$(document).ready(function(){
setInterval(function()
{ 
 $.ajax
 ({
 type:'post',
 url:'/statistics.php',
 data:{
  get_online_visitor:"online_visitor",
 },
 success:function(response) {
 if(response!="")
 {
  $("#online_visior_value").html(response);
 }
 }
 });
}, 10000);
}); 
</script>
</head>
<body>
<div id="stat">
<li>Онлайн <span id="online_visior_value"><?php
echo $total_online; ?></span></li>
</div>
</body>
</html>
Добавлено через 8 минут
по запросу "mac os x error_log" в поисковике дакдакгоу выдало
Код
/var/log/apache2/error_log
0
Paul_REE
0 / 0 / 0
Регистрация: 30.07.2017
Сообщений: 24
28.12.2017, 00:43  [ТС] 10
Цитата Сообщение от ytf Посмотреть сообщение
по запросу "mac os x error_log" в поисковике дакдакгоу выдало
Код
/var/log/apache2/error_log
Та у меня вообще пусто в папке apache2.

При запуске вашего кода пишет: Notice: Undefined variable: session_check in /Users/mc373/Sites/statistics.php on line 14

Вот эта строка:
PHP
1
if ($session_check === false)
Пока как заглушку поставил этот код

Javascript
1
2
3
4
5
6
7
8
var val = Math.ceil(Math.random()*1000);
if (val >= 100 && val <= 999) {
document.write("Одновременно с вами на сайте " + val + " человек");
}
else {
val = val + 100;
document.write("Одновременно с вами на сайте " + val + " человек");
}
0
ytf
230 / 252 / 183
Регистрация: 15.08.2017
Сообщений: 1,442
28.12.2017, 12:32 11
Лучший ответ Сообщение было отмечено Paul_REE как решение

Решение

Цитата Сообщение от Paul_REE Посмотреть сообщение
Та у меня вообще пусто в папке apache2
теоретически отсутствие файла приравнивается к отсутствию ошибок

поиск "поиск файлов в mac os x" в дакдакгоу выдал :

Самый простой и, пожалуй, древний способ отыскать какой-нибудь файл — это обратиться за помощью к проводнику Finder. Для этого необходимо открыть данное приложение и в строке поиска, расположенной в правом верхнем углу, ввести интересующий запрос error_log
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
/* для уменьшения объёма кода, облегчения чтения я применяю скрипт
https://github.com/plohoyav/php_mysql_upros   */
require 'db.php';
 
session_start();
$_SESSION['session'] = session_id();
$current_time = time();
$timeout = $current_time - 60;
$sessia_suschestvuet = mr("SELECT `session` FROM `total_visitors`" . sqlwhere(array(
    "session" => $_SESSION['session']
))." LIMIT 1");
 
if ($sessia_suschestvuet === false)
    {
    mq("INSERT INTO `total_visitors`" . sqlset(array(
        "session" => $_SESSION['session'],
        "time" => $current_time
    )));
    }
  else
    {
    mq("UPDATE `total_visitors`" . sqlset(array(
        "time" => $current_time
    )) . sqlwhere(array(
        "session" => $_SESSION['session']
    ))." LIMIT 1");
    }
 
$polzovateley_onlain = mf("SELECT COUNT(*) s FROM `total_visitors` WHERE `time`>=" . $timeout, "s");
 
if (isset($_POST['get_online_visitor']))
    {
    echo $polzovateley_onlain;
    exit;
    }
 
?>
 
<html>
<head>
<script type="text/javascript" src="js/jquery-3.2.1.js"></script>
<script type="text/javascript">
$(document).ready(function(){
setInterval(function()
{ 
 $.ajax
 ({
 type:'post',
 url:'/statistics.php',
 data:{
  get_online_visitor:"online_visitor",
 },
 success:function(response) {
 if(response!="")
 {
  $("#online_visior_value").html(response);
 }
 }
 });
}, 10000);
}); 
</script>
</head>
<body>
<div id="stat">
<li>Онлайн <span id="online_visior_value"><?php
echo $polzovateley_onlain; ?></span></li>
</div>
</body>
</html>
1
Paul_REE
0 / 0 / 0
Регистрация: 30.07.2017
Сообщений: 24
30.12.2017, 13:37  [ТС] 12
ytf, спасибо! Заработало В чём был подвох по сравнению с моим и вашим кодом? Пожалуйста, объясните новичку

Добавлено через 12 минут
ytf, когда запускаю ваш код, появляется 1. При запуске моего кода параллельно с вашим тоже появляется 1, а потом через некоторое время у меня 1 меняется на 0. Получается нет записи в базу, но есть чтение?
0
ytf
230 / 252 / 183
Регистрация: 15.08.2017
Сообщений: 1,442
30.12.2017, 14:41 13
Цитата Сообщение от Paul_REE Посмотреть сообщение
В чём был подвох по сравнению с моим и вашим кодом? Пожалуйста, объясните новичку
1. для уменьшения объёма кода, облегчения чтения я применяю скрипт
https://github.com/plohoyav/php_mysql_upros
2. если функция вызывается один раз и она вызывается при каждом запуске скрипта,
нет необходимости использовать функцию, я заменил функцию на её содержимое и
код работает также, как и раньше
3. идентификатор сессии по идее программы должен быть уникальным, поэтому я
указал " limit 1 " в конце запроса update и select, чтобы полностью исключить
продолжение поиска в таблице после найденной первой строки
4. все поля и таблицы заключены в обратные апострофы, например, `имя таблицы или поля`
чтобы исключить понимание sql слов как специальных зарезервированных в mysql

Цитата Сообщение от Paul_REE Посмотреть сообщение
При запуске моего кода параллельно с вашим тоже появляется 1, а потом через некоторое время у меня 1 меняется на 0. Получается нет записи в базу, но есть чтение?
зачем вы задаетесь этим вопросом?

Добавлено через 14 минут
ошибка может быть в нескольких местах, начиная от запроса ajax, заканчивая выводом лишнего пробела перед session_start

Добавлено через 12 минут
сначала проверяете error_log, если там нет ошибок - в браузере firefox нажмите правую кнопку мыши в окне просмотра сайтов на любом месте, выберите Исследовать элемент, выберите вкладку Сеть

посмотрите какие запросы отправляет браузер и какие ответы получает во вкладке Сеть
2
30.12.2017, 14:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2017, 14:41

НУЖЕН PHP код посетителей онлайн
Всем привет,я новичок в этом деле,мне нужен рабочий php код что-бы показывал...

Счётчик посетителей
&lt;?php $file_name = &quot;add/counter.txt&quot;; if(!file_exists($file_name)) { ...

Количество посетителей онлайн
Здравствуйте! Написал скрипт который считает количество посетителей онлайн,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru