stats-met-mysql
Code (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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?php
session_start();
ini_set('display_errors', 1);
error_reporting(E_ALL);
//onderstaand bestandje zorgt voor de verbinding met de database.
require_once 'connect.php';
$sql_ansi = "SET SESSION sql_mode = 'ANSI'";
if(!mysql_query($sql_ansi)){
echo 'werkt niet in ANSI modus';
}
//query voor bekijken of er al iemand met dit ip eerder op de dag online is geweest
$getsql = "
SELECT
id
FROM
visitors
WHERE
ip = '".$_SERVER['REMOTE_ADDR']."'
AND
DATE(online) = CURDATE() LIMIT 1";
//Limit 1 toegevoegd, omdat die als er 1 is gevonden, niet verder hoeft te zoeken.
if($getresult = mysql_query($getsql)){
if(mysql_num_rows($getresult) == 1){
//is al eerder online geweest vandaag, alleen tijd aanpassen
$statsql = "
UPDATE
visitors
SET
online = NOW()
WHERE
ip = '".$_SERVER['REMOTE_ADDR']."'
AND
DATE(online) = DATE(NOW())";
}
else{
//nog niet eerder online geweest, maak een nieuwe regel aan
$statsql = "
INSERT INTO
visitors
(ip, online)
VALUES
('".$_SERVER['REMOTE_ADDR']."',NOW())";
}
if(!mysql_query($statsql)){
echo 'Gegevens niet bijgwerkt wegens een fout in de SQL code.';
}
}
//---------- HIER IS ALLEEN VOOR WEERGAVE VAN STATISTIEKEN ------
// hier worden het aantal bezoekers geteld die op je site zijn geweest. Een IP telt maar 1 keer per dag
$sql_unique = "
SELECT
COUNT(id) AS number
FROM
visitors";
// deze query haalt het aantal bezoekers op dat in de afgelopen 5 minuten online was
$sql_now_online = "
SELECT
COUNT(id) AS now_online
FROM
visitors
WHERE
TIMEDIFF(NOW(),online) < '00:10:00'";
// deze query haalt het maximum aantal bezoekers op een dag op + de bijbehorende datum. -> Stel dat er 2 dagen zijn dat het maximum is bereikt, hier geeft die de laatste datum weer. (meest recente)
$sql_max_day = "
SELECT
COUNT( id ) AS unique_day,
DATEDIFF(NOW(),DATE(online)) AS date
FROM
visitors
GROUP BY
DATE( online ),
DATEDIFF(NOW(),DATE(online))
ORDER BY
unique_day DESC,
online DESC
LIMIT
1";
// Deze query bepaald het aantal dagen dat de teller actief is.
$sql_count_avg = "
SELECT
DATEDIFF( CURDATE( ) , MIN( DATE( online ) ) ) AS days
FROM
visitors";
if($result_unique = mysql_query($sql_unique)){
if(mysql_num_rows($result_unique) >= 1){
$row_unique = mysql_fetch_assoc($result_unique);
}
else{
$row_unique['number'] = 0;
}
}
if($result_now_online = mysql_query($sql_now_online)){
if(mysql_num_rows($result_now_online) >= 1){
$row_now_online = mysql_fetch_assoc($result_now_online);
}
else{
$row_now_online['now_online'] = 0;
}
}
if($result_max_day = mysql_query($sql_max_day)){
if(mysql_num_rows($result_max_day) >= 1){
$row_max_day = mysql_fetch_assoc($result_max_day);
}
else{
$row_max_day['unique_day'] = 0;
}
if($row_max_day['date'] == 0){
$row_max_day['date'] = 'Vandaag';
}
elseif($row_max_day['date'] == 1){
$row_max_day['date'] = $row_max_day['date'].' dag geleden';
}
else{
$row_max_day['date'] = $row_max_day['date'].' dagen geleden';
}
}
if($result_count_avg = mysql_query($sql_count_avg)){
if(mysql_num_rows($result_count_avg) >= 1){
$row_count_avg = mysql_fetch_assoc($result_count_avg);
}
else{
$row_count_avg['days'] = 0;
}
}
?>
<strong>Datum:</strong> <?php echo date('Y-m-d') ?><br />
<strong>Nu online:</strong> <?php echo $row_now_online['now_online']; ?><br />
<strong>Totaal bezoekers:</strong> <?php echo $row_unique['number']; ?><br />
<strong>Max per dag:</strong> <?php echo $row_max_day['unique_day']; ?><br />
<strong>Wanneer:</strong> <?php echo $row_max_day['date']; ?><br />
<strong>Gemiddeld:</strong> <?php
// dit was overigens ook prima via SQL te berekenen, maar deze gegevens had ik reeds verkregen, vandaar via de PHP manier
echo round($row_unique['number']/$row_count_avg['days']); ?><br />
<strong>Dagen online:</strong> <?php echo $row_count_avg['days']; ?>
session_start();
ini_set('display_errors', 1);
error_reporting(E_ALL);
//onderstaand bestandje zorgt voor de verbinding met de database.
require_once 'connect.php';
$sql_ansi = "SET SESSION sql_mode = 'ANSI'";
if(!mysql_query($sql_ansi)){
echo 'werkt niet in ANSI modus';
}
//query voor bekijken of er al iemand met dit ip eerder op de dag online is geweest
$getsql = "
SELECT
id
FROM
visitors
WHERE
ip = '".$_SERVER['REMOTE_ADDR']."'
AND
DATE(online) = CURDATE() LIMIT 1";
//Limit 1 toegevoegd, omdat die als er 1 is gevonden, niet verder hoeft te zoeken.
if($getresult = mysql_query($getsql)){
if(mysql_num_rows($getresult) == 1){
//is al eerder online geweest vandaag, alleen tijd aanpassen
$statsql = "
UPDATE
visitors
SET
online = NOW()
WHERE
ip = '".$_SERVER['REMOTE_ADDR']."'
AND
DATE(online) = DATE(NOW())";
}
else{
//nog niet eerder online geweest, maak een nieuwe regel aan
$statsql = "
INSERT INTO
visitors
(ip, online)
VALUES
('".$_SERVER['REMOTE_ADDR']."',NOW())";
}
if(!mysql_query($statsql)){
echo 'Gegevens niet bijgwerkt wegens een fout in de SQL code.';
}
}
//---------- HIER IS ALLEEN VOOR WEERGAVE VAN STATISTIEKEN ------
// hier worden het aantal bezoekers geteld die op je site zijn geweest. Een IP telt maar 1 keer per dag
$sql_unique = "
SELECT
COUNT(id) AS number
FROM
visitors";
// deze query haalt het aantal bezoekers op dat in de afgelopen 5 minuten online was
$sql_now_online = "
SELECT
COUNT(id) AS now_online
FROM
visitors
WHERE
TIMEDIFF(NOW(),online) < '00:10:00'";
// deze query haalt het maximum aantal bezoekers op een dag op + de bijbehorende datum. -> Stel dat er 2 dagen zijn dat het maximum is bereikt, hier geeft die de laatste datum weer. (meest recente)
$sql_max_day = "
SELECT
COUNT( id ) AS unique_day,
DATEDIFF(NOW(),DATE(online)) AS date
FROM
visitors
GROUP BY
DATE( online ),
DATEDIFF(NOW(),DATE(online))
ORDER BY
unique_day DESC,
online DESC
LIMIT
1";
// Deze query bepaald het aantal dagen dat de teller actief is.
$sql_count_avg = "
SELECT
DATEDIFF( CURDATE( ) , MIN( DATE( online ) ) ) AS days
FROM
visitors";
if($result_unique = mysql_query($sql_unique)){
if(mysql_num_rows($result_unique) >= 1){
$row_unique = mysql_fetch_assoc($result_unique);
}
else{
$row_unique['number'] = 0;
}
}
if($result_now_online = mysql_query($sql_now_online)){
if(mysql_num_rows($result_now_online) >= 1){
$row_now_online = mysql_fetch_assoc($result_now_online);
}
else{
$row_now_online['now_online'] = 0;
}
}
if($result_max_day = mysql_query($sql_max_day)){
if(mysql_num_rows($result_max_day) >= 1){
$row_max_day = mysql_fetch_assoc($result_max_day);
}
else{
$row_max_day['unique_day'] = 0;
}
if($row_max_day['date'] == 0){
$row_max_day['date'] = 'Vandaag';
}
elseif($row_max_day['date'] == 1){
$row_max_day['date'] = $row_max_day['date'].' dag geleden';
}
else{
$row_max_day['date'] = $row_max_day['date'].' dagen geleden';
}
}
if($result_count_avg = mysql_query($sql_count_avg)){
if(mysql_num_rows($result_count_avg) >= 1){
$row_count_avg = mysql_fetch_assoc($result_count_avg);
}
else{
$row_count_avg['days'] = 0;
}
}
?>
<strong>Datum:</strong> <?php echo date('Y-m-d') ?><br />
<strong>Nu online:</strong> <?php echo $row_now_online['now_online']; ?><br />
<strong>Totaal bezoekers:</strong> <?php echo $row_unique['number']; ?><br />
<strong>Max per dag:</strong> <?php echo $row_max_day['unique_day']; ?><br />
<strong>Wanneer:</strong> <?php echo $row_max_day['date']; ?><br />
<strong>Gemiddeld:</strong> <?php
// dit was overigens ook prima via SQL te berekenen, maar deze gegevens had ik reeds verkregen, vandaar via de PHP manier
echo round($row_unique['number']/$row_count_avg['days']); ?><br />
<strong>Dagen online:</strong> <?php echo $row_count_avg['days']; ?>