Ik ben bezig met een profielen site om PHP/HTML/PDO/jQuery onder de knie te krijgen.

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.
Zodra een gebruiker inlogt, zijn er x + 1 gebruikers online.
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.
Gewoon een hit voor een minuut of 10 blokkeren.
Ward, sorry ik snap het even niet, het is een count voor hoeveel aantal mensen, totaal een profiel hebben bezocht.

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.
Sorry, ik vatte de topictitel "Bezoekers teller" op als ... een bezoekersteller. ;-)

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.
Zoiets bedoel je, Ronald?


<?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;
?>
@Ward, hoe het nu werkt telt deze ongeacht de tijd een nieuwe count bij elke aanvraag. Maar is dit wel slim, omdat nu als iemand hele tijd vernieuwen indrukt dan verhoogt de ID bezoekers count telkens omhoog terwijl er geen echte nieuwe bezoekers zijn gekomen. Hoe zou ik dit anders kunnen oplossen ?

@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;


<?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();

?>
Deze werkt ook wel leuk, wel zelf nog integreren in bijvoorbeeld de index pagina
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

<?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>
-sorry, verkeerde topic-

Reageren