par
Nixou19 » 19 mai 2012, 10:37
Bonjour à tous.
Je suis en train de coder un compteur de vue à l'aide d'un tableau et d'une requête MySQL pour pouvoir afficher un top 10 des nombre vues ultérieurement.
Voici mon code :
Code : Tout sélectionner
<?php
/*
* Si le fichier où l'on stock,
* les données n'existe pas encore
* on le crée.
*/
$fichier = 'htcompteur';
if( !file_exists($fichier) ) {
$fp = fopen($fichier, "w");
fwrite($fp, serialize(array()));
fclose($fp);
}
/*
* Définition de variables
* nécessaire au compteur :
* - deux termes constants,
* - l'ip du visiteur,
* - la date et l'heure.
*/
$argument_visites = 'visites';
$argument_requêtes = 'requêtes';
$ip = $_SERVER['REMOTE_ADDR'];
$time = date('YmdGis');
/*
* Récupération des données du
* compteur précédemment stockées.
*/
$lignes = file($fichier);
$donnees = unserialize($lignes[0]);
/*
* Pour chaque clés du tableau de données
* qui ne soit pas attribuée aux visite et aux requêtes
* si la valeur correspond à une date antérieur
* au même jour, on supprime l'ip du visiteur.
*/
foreach( $donnees as $cle => $valeur )
{
if( substr($valeur, 0, 8) != substr($time, 0, 8) &&
$cle != $argument_visites &&
$cle != $argument_requêtes ) {
unset($donnees[$cle]);
}
}
/*
* On incrémente ( ajoute +1 ) la valeur
* du nombre de requêtes.
* Si l'ip n'est pas encore enregistrée,
* on incrémente la valeur du nombre de visites
* et on ajoute l'ip dans le tableau accompagné
* de la date et de l'heure de l'exécution.
*/
$donnees[$argument_requêtes]++;
if( !$donnees[$ip] ) {
$donnees[$argument_visites]++;
$donnees[$ip] = $time;
}
/*
* On effectue un petit report de variable
* pour une utilisation ultérieur plus aisée.
*/
$nb_visiteurs = $donnees[$argument_visites];
$nb_aujourdhui = count($donnees)-2;
$nb_requetes = $donnees[$argument_requêtes];
/*
* On stock le tableau dans le fichier de données
* en écrasant sa valeur précédente.
*/
$fp = fopen($fichier,"w");
fwrite($fp, serialize($donnees));
fclose($fp);
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=categories', 'root', 'root', $pdo_options);
//Nouvelle entrée dans la base de donnée
$req = $bdd->exec('UPDATE nbview SET nbview = $nb_requetes WHERE url = \'<a href=animaux/chien.php>Chien</a>\'');
echo 'Ca a bien été ajouté à la base de donnée.';
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
/*
* On affiche les résultats du compteur.
*/
?>
<div id=compteur>
<?php
echo $nb_visiteurs." visiteurs dont ";
echo $nb_aujourdhui." aujourd'hui, ";
echo $nb_requetes." pages affichées ";
?></div>
et voici l'erreur que cela me retourne : Erreur : SQLSTATE[42S22]: Column not found: 1054 Unknown column '$nb_requetes' in 'field list'
Si vous pouviez trouver solution à mon problème, je vous en serais fort reconnaissant.
Merci d'avance.
Nixou19
Bonjour à tous.
Je suis en train de coder un compteur de vue à l'aide d'un tableau et d'une requête MySQL pour pouvoir afficher un top 10 des nombre vues ultérieurement.
Voici mon code :
[code]<?php
/*
* Si le fichier où l'on stock,
* les données n'existe pas encore
* on le crée.
*/
$fichier = 'htcompteur';
if( !file_exists($fichier) ) {
$fp = fopen($fichier, "w");
fwrite($fp, serialize(array()));
fclose($fp);
}
/*
* Définition de variables
* nécessaire au compteur :
* - deux termes constants,
* - l'ip du visiteur,
* - la date et l'heure.
*/
$argument_visites = 'visites';
$argument_requêtes = 'requêtes';
$ip = $_SERVER['REMOTE_ADDR'];
$time = date('YmdGis');
/*
* Récupération des données du
* compteur précédemment stockées.
*/
$lignes = file($fichier);
$donnees = unserialize($lignes[0]);
/*
* Pour chaque clés du tableau de données
* qui ne soit pas attribuée aux visite et aux requêtes
* si la valeur correspond à une date antérieur
* au même jour, on supprime l'ip du visiteur.
*/
foreach( $donnees as $cle => $valeur )
{
if( substr($valeur, 0, 8) != substr($time, 0, 8) &&
$cle != $argument_visites &&
$cle != $argument_requêtes ) {
unset($donnees[$cle]);
}
}
/*
* On incrémente ( ajoute +1 ) la valeur
* du nombre de requêtes.
* Si l'ip n'est pas encore enregistrée,
* on incrémente la valeur du nombre de visites
* et on ajoute l'ip dans le tableau accompagné
* de la date et de l'heure de l'exécution.
*/
$donnees[$argument_requêtes]++;
if( !$donnees[$ip] ) {
$donnees[$argument_visites]++;
$donnees[$ip] = $time;
}
/*
* On effectue un petit report de variable
* pour une utilisation ultérieur plus aisée.
*/
$nb_visiteurs = $donnees[$argument_visites];
$nb_aujourdhui = count($donnees)-2;
$nb_requetes = $donnees[$argument_requêtes];
/*
* On stock le tableau dans le fichier de données
* en écrasant sa valeur précédente.
*/
$fp = fopen($fichier,"w");
fwrite($fp, serialize($donnees));
fclose($fp);
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=categories', 'root', 'root', $pdo_options);
//Nouvelle entrée dans la base de donnée
$req = $bdd->exec('UPDATE nbview SET nbview = $nb_requetes WHERE url = \'<a href=animaux/chien.php>Chien</a>\'');
echo 'Ca a bien été ajouté à la base de donnée.';
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
/*
* On affiche les résultats du compteur.
*/
?>
<div id=compteur>
<?php
echo $nb_visiteurs." visiteurs dont ";
echo $nb_aujourdhui." aujourd'hui, ";
echo $nb_requetes." pages affichées ";
?></div>[/code]
et voici l'erreur que cela me retourne : Erreur : SQLSTATE[42S22]: Column not found: 1054 Unknown column '$nb_requetes' in 'field list'
Si vous pouviez trouver solution à mon problème, je vous en serais fort reconnaissant.
Merci d'avance.
Nixou19