Bezoekers teller
Nou vraag ik mij af hoe jullie de bezoekers teller laten handelen, op het moment heb ik alleen dat ingelogde gebruikers worden gecount als ze op een profiel gaan.
Maar als een ingelogd gebruiker dan telkens refreshed dan count het alsmaar op.
Is het dan de idee om het per account 1x te optellen (als account een keer op profiel is geweest telt het volgende keer niet meer mee) ?
Dus als user A, op de profiel van user B een kijk je neemt is +1.
Logt de gebruiker uit of doet deze enkele minuten niets, dan zijn er x - 1 gebruikers online.
Je kunt dat op minstens drie manieren aanvaren:
- je houdt één teller bij van alle gebruikers,
- je telt de actieve sessies of
- je gebruikt een online/offline-schakelaar per individuele gebruiker.
Gewijzigd op 27/11/2014 14:50:54 door - Ariën -
Dus ID=1 heeft x aantal bezoekers gehad, ID=2 heeft x aantal bezoekers gehad.
Als ID=1 naar ID=2 gaat dan telt dit op naar 1 bezoeker bij ID=2 en slaat het op in de database.
Maar nu als ID=1 refresh doet op de pagina van ID=2 dan krijgt ID=2 nog een hit erbij.
Hiervoor wil ik graag weten wat de beste optie is om dit te voorkomen.
-Aar-, hoe pak ik dit aan, dat ik ID=1 10 minuten niet meer meereken als deze al binnen 10 minuten al op de profiel van ID=2 is geweest.
Hoe sla ik deze dingen op in de database, dat ik het weer gebaseerd op de account laat werken.
Als het altijd om geregistreerde gebruikers gaat, kun je "A heeft B bekeken" tellen als 1 view, ongeacht of dat nu 10 minuten of 10 weken geleden is. Je moet dat eerst even helder hebben: wanneer telt een pageview mee en voor hoe lang.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
// Sessie starten
session_start();
// ID ingelogde gebruiker
$UserID = mysqli_real_escape_string($con,$_SESSION['id']);
// ID Profiel
$ProfileID = mysqli_real_escape_string($con,$_GET['ID']);
// Controleren of ID al bestaat
$CountifExist = mysqli_num_rows(mysqli_query($con,"SELECT ID FROM clicks WHERE UserID = '$UserID'");
// Bestaat het ID niet, dan voeren we een actie uit
if($CountifExist == '0'){
// Invoegen QUERY
mysqli_query($con,"INSERT INTO clicks (UserID,ProfileID) VALUES ('$UserID','$ProfileID')");
}
// Ophalen gegevens
$Select = mysqli_num_rows(mysqli_query($con,"SELECT ID FROM clicks WHERE ProfileID = '$ProfileID'"));
// Aantal kliks echoën
echo $Select;
?>
// Sessie starten
session_start();
// ID ingelogde gebruiker
$UserID = mysqli_real_escape_string($con,$_SESSION['id']);
// ID Profiel
$ProfileID = mysqli_real_escape_string($con,$_GET['ID']);
// Controleren of ID al bestaat
$CountifExist = mysqli_num_rows(mysqli_query($con,"SELECT ID FROM clicks WHERE UserID = '$UserID'");
// Bestaat het ID niet, dan voeren we een actie uit
if($CountifExist == '0'){
// Invoegen QUERY
mysqli_query($con,"INSERT INTO clicks (UserID,ProfileID) VALUES ('$UserID','$ProfileID')");
}
// Ophalen gegevens
$Select = mysqli_num_rows(mysqli_query($con,"SELECT ID FROM clicks WHERE ProfileID = '$ProfileID'"));
// Aantal kliks echoën
echo $Select;
?>
@Peter, die codes zeggen mij echt niet veel ik ben echter niet zo goed in MySQL ik gebruik pas PDO omdat dit makkelijker is voor me.
Op het moment heb ik dit gecodeert;
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
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
<?php
require_once('db_connect.php');
if (isset($_GET['id'])){
$id = $_GET['id'];
$total = $db->query("SELECT * FROM users");
$info = $db->prepare("SELECT * FROM users WHERE nickname=?");
$info->bindParam(1, $id);
$info->execute();
if($info->rowCount() == 1) {
foreach ($info as $i){
if(isset($_SESSION['logged_in'])) {
//Update nieuwe aantal voor bezoekers
$bezoekers = $i['bezoekers'] + 1;
$teller = $db->prepare("UPDATE users SET bezoekers=? WHERE nickname=?");
$teller->bindParam(1, $bezoekers);
$teller->bindParam(2, $id);
$teller->execute();
}
echo "<p>Aantal bezoekers: " . $i['bezoekers'] . "</p>";
}
} else {
echo 'Deze account bestaat niet of is verwijderd!';
}
} else {
echo 'no id';
}
// Destroy voor om uitteloggen
session_destroy();
?>
require_once('db_connect.php');
if (isset($_GET['id'])){
$id = $_GET['id'];
$total = $db->query("SELECT * FROM users");
$info = $db->prepare("SELECT * FROM users WHERE nickname=?");
$info->bindParam(1, $id);
$info->execute();
if($info->rowCount() == 1) {
foreach ($info as $i){
if(isset($_SESSION['logged_in'])) {
//Update nieuwe aantal voor bezoekers
$bezoekers = $i['bezoekers'] + 1;
$teller = $db->prepare("UPDATE users SET bezoekers=? WHERE nickname=?");
$teller->bindParam(1, $bezoekers);
$teller->bindParam(2, $id);
$teller->execute();
}
echo "<p>Aantal bezoekers: " . $i['bezoekers'] . "</p>";
}
} else {
echo 'Deze account bestaat niet of is verwijderd!';
}
} else {
echo 'no id';
}
// Destroy voor om uitteloggen
session_destroy();
?>
Voordeel: Geen database gedoe en de functie ruimt zelf de session files op. In dit voorbeeld is er een directory onder de root genaamd phpsessions
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
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
<?php
/* Start the session */
session_save_path('phpsessions');
session_start();
$_SESSION['viewer'] = $_SERVER['REMOTE_ADDR'];
/* Define how long the maximum amount of time the session can be inactive. */
define("MAX_IDLE_TIME", 3);
function getOnlineUsers(){
/* Default directory: /var/lib/php/session */
if ( $directory_handle = opendir( session_save_path() ) )
{
$count = 0;
while ( false !== ( $file = readdir( $directory_handle ) ) )
{
if($file != "." && $file != "..")
{
if(time()- fileatime(session_save_path() . "/" . $file) < MAX_IDLE_TIME * 60)
{
$count++;
}
else //remove files with PHP - Unlink()
{
unlink(session_save_path() . "/" . $file);
}
}
}
closedir($directory_handle);
return $count;
}
else
{
return false;
}
}
?>
<html>
<head>
<style type="text/css">
<!-- BODY {background:none transparent;}-->
</style>
</head>
<body>
<b>
Website bezoekers online: <?echo getOnlineUsers(); ?>
</b>
</font>
</body>
</html>
/* Start the session */
session_save_path('phpsessions');
session_start();
$_SESSION['viewer'] = $_SERVER['REMOTE_ADDR'];
/* Define how long the maximum amount of time the session can be inactive. */
define("MAX_IDLE_TIME", 3);
function getOnlineUsers(){
/* Default directory: /var/lib/php/session */
if ( $directory_handle = opendir( session_save_path() ) )
{
$count = 0;
while ( false !== ( $file = readdir( $directory_handle ) ) )
{
if($file != "." && $file != "..")
{
if(time()- fileatime(session_save_path() . "/" . $file) < MAX_IDLE_TIME * 60)
{
$count++;
}
else //remove files with PHP - Unlink()
{
unlink(session_save_path() . "/" . $file);
}
}
}
closedir($directory_handle);
return $count;
}
else
{
return false;
}
}
?>
<html>
<head>
<style type="text/css">
<!-- BODY {background:none transparent;}-->
</style>
</head>
<body>
<b>
Website bezoekers online: <?echo getOnlineUsers(); ?>
</b>
</font>
</body>
</html>
Gewijzigd op 27/11/2014 16:12:23 door John D
Gewijzigd op 16/05/2015 14:11:45 door johan de wit