J'ai trouvé la solution de très mauvaise qualité et juste une manière rapide et sale de le faire.
Moi aussi je développais quelque chose de similaire et j'ai formulé une méthode rapide qui fonctionne sans redondance.
J'avais besoin d'un compteur pour chaque fois que quelqu'un accédait au profil d'un autre utilisateur.
Pseudo:
- Créer une table avec le nom du spectateur et le nom de viewee (daily_views de table).
- Vérifiez s'il existe le nom du spectateur avec le nom du spectateur (sur la même ligne).
- S'ils n'existent pas, mettez à jour le compteur d'utilisateurs +1 (dans la table des utilisateurs).
- Sinon, ne faites rien.
- Réinitialiser les valeurs de table entières NULL toutes les 24/12 heures via un travail cron.
Cela nier la même personne qui accède au même profil de l'utilisateur d'ajouter 1 à la contre le rafraîchissement de la journée (ou 12 heures), tandis que la solution ci-dessus par Glenn Nelson serait en effet ajouter 1 au compteur , mais refuser d'ajouter à chaque compteur de l'utilisateur en même temps.
Non seulement cela, mais si vous deviez la fermeture de session et reconnectez-vous au site Web, puis il serait tout simplement ajouter de nouveau au comptoir où survient quelques trolls des cas et haxorz wannabe exploitera ce (que la session est détruit et a recommencé).
Voici mes exemples de tableaux:
users
{
user_id INT(8) auto increment, user_name varchar(32), user_counter INT(12)
};
daily_views
{
view_id INT(8) auto increment, viewer_name VARCHAR(32), viewee_name VARCHAR(32)
};
Voici un exemple de code que j'ai écrit:
<?php
session_start();
$uname = $_SESSION['username'];
$vieweepage = $_GET['name']; //gets the name of the persons page/profile via previous page/form
$connect = mysql_connect("localhost","user","password") or die("Couldn't connect; check your mysql_connect() settings");
$database = mysql_select_db("database") or die("Could not locate database!");
$query = mysql_query("SELECT user_counter from users");
$query = mysql_fetch_row($query);
$counter = $query[0];
$viewcheck = mysql_query("SELECT viewer_name from daily_views WHERE viewee_name='$vieweepage'");
$viewrow = mysql_num_rows($viewcheck);
$newcounter = $counter + 1;
if($viewrow == 0)
{
$update = mysql_query("UPDATE users SET user_counter='$newcounter' WHERE user_name='$vieweepage'");
$insert = mysql_query("INSERT into daily_views (viewer_name, viewee_name) VALUES ('$uname', '$vieweepage')");
}
?>
J'envisagerais fortement d'utiliser autre chose qu'un fichier plat pour garder une trace du nombre de hits d'un script. La raison en est qu'une condition de concurrence peut se produire et que vous ne pouvez pas compter quelques entrées ou (pire encore) ne pas ouvrir le fichier et réinitialiser le compte à 1 (si file_get_contents() renvoie FALSE, FALSE + 1 = 1). –