Le nombre de visiteurs
Résolu/Fermé
americanbichon
Messages postés
20
Date d'inscription
samedi 8 août 2015
Statut
Membre
Dernière intervention
2 mars 2017
-
Modifié par americanbichon le 2/03/2017 à 07:58
americanbichon - 3 mars 2017 à 14:31
americanbichon - 3 mars 2017 à 14:31
A voir également:
- Le nombre de visiteurs
- Comment voir les visiteurs sur facebook - Guide
- Nombre facile - Télécharger - Outils professionnels
- Le nombre de tentatives de déverrouillage incorrectes est trop élevé samsung - Forum LG
- Nombre de combinaison possible avec 4 chiffres - Forum Programmation
- Nombre de secteurs réalloués - Forum Matériel & Système
18 réponses
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
Ambassadeur
1 551
2 mars 2017 à 11:01
2 mars 2017 à 11:01
bonjour, ta page ne t'affiche strictement rien?
je te suggère d'ajouter des
je te suggère d'ajouter des
echopour t'assurer qu'elle est bien exécutée.
elle affiche : 0 visiteur connectés, 0 aujourd'hui 0 total
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
1 551
2 mars 2017 à 11:41
2 mars 2017 à 11:41
que contient ta table "connectes"?
cela te permettra de déterminer si tu as un problème avec INSERT ou pas.
en passant, je suggère de mettre la liste des champs dans INSERT, genre
il me semble que tu ne fais rien avec $aujourd_hui
et tu ne nous montres pas le code pour obtenir le nombre total de visiteurs
cela te permettra de déterminer si tu as un problème avec INSERT ou pas.
en passant, je suggère de mettre la liste des champs dans INSERT, genre
INSERT into connectes(ip, timestamp) VALUES ...
il me semble que tu ne fais rien avec $aujourd_hui
et tu ne nous montres pas le code pour obtenir le nombre total de visiteurs
Merci de m'aider.
Ma table connecte
Ma table connecte
s :
CREATE TABLE IF NOT EXISTS `connectes` (
`ip` varchar(15) NOT NULL,
`timestamp` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
1 551
2 mars 2017 à 12:19
2 mars 2017 à 12:19
quels sont les enregistrements présents dans ta table?
en passant, je suggère de mettre la liste des champs dans INSERT, genre
il me semble que tu ne fais rien avec
et tu ne nous montres pas le code pour obtenir le nombre total de visiteurs
en passant, je suggère de mettre la liste des champs dans INSERT, genre
INSERT into connectes(ip, timestamp) VALUES ...
il me semble que tu ne fais rien avec
$aujourd_hui
et tu ne nous montres pas le code pour obtenir le nombre total de visiteurs
Voilà mon nouveau code en tenant compte de tes instructions
$retour = $bdd->query('SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
$retour->execute;
$donnees = $retour->fetch();
$retour->closeCursor();
if($donnees['nbre_entrees'] == 0)//ON AJOUTE LE NOUVEAU VISITEUR
{
$retour = $bdd->prepare ('INSERT into connectes ip, timestamp) VALUES(:ip, :timestamp)');
$retour->execute;
$donnees = $retour->fetch();
}
else // L'ip se trouve déjà dans la table, on met juste à jour le timestamp
{
$retour = $bdd->prepare ('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
$retour->execute;
$donnees = $retour->fetch();
$retour->closeCursor();//a voir
}
$timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes
$retour = $bdd->query ('SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE timestamp>\'' . $timestamp_5min . ' ' . $aujourd_hui . '\'');
$retour->execute;
$donnees = $retour->fetch();
$retour->closeCursor();
if($donnees['nbre_entrees'] == 1)
{
echo '<strong>' . $donnees['nbre_entrees'] . '</strong> visiteurs connectés<br />';
}
else
{
echo '<strong>' . $donnees['nbre_entrees'] . '</strong> visiteurs connectés<br />';
}
$jour = date('d');
$mois = date('m');
$annee = date('Y');
$aujourd_hui = mktime(0, 0, 0, $mois, $jour, $annee);
$donnees = $retour->fetch();
if ($donnees['nbre_entrees'] == 1)
{
echo '<strong>' . $donnees['nbre_entrees'] . '</strong> visiteurs aujourd\'hui<br />';
}
else
{
echo '<strong>' . $donnees['nbre_entrees'] . '</strong> visiteurs aujourd\'hui<br />';
}
$retour = $bdd->query('SELECT COUNT(*) AS nbre_entrees FROM connectes');
$retour->execute;
$donnees = $retour->fetch();//
echo '<strong>' . $donnees['nbre_entrees'] . '</strong> visites au total<br />';
?>
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
1 551
2 mars 2017 à 12:43
2 mars 2017 à 12:43
quels sont les enregistrements présents dans ta table? je pense que tu as un outil qui te permet de voir le contenu de tes tables.
tu as changé ton INSERT, il est maintenant incorrect.
il me semble que tu ne fais toujours rien avec $aujourd_hui
je suggère d'ajouter deux echo avant ton INSERT et avant ton UPDATE, cela te permettra de vérifier par où le code passe.
tu as changé ton INSERT, il est maintenant incorrect.
il me semble que tu ne fais toujours rien avec $aujourd_hui
je suggère d'ajouter deux echo avant ton INSERT et avant ton UPDATE, cela te permettra de vérifier par où le code passe.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
2 mars 2017 à 12:50
2 mars 2017 à 12:50
Bonjour,
Si tu ne mets pas les parenthèses dans tes $retour->execute;, la fonction ne sera pas appelée. Ne les oublie pas !
$retour->execute();
Xavier
Si tu ne mets pas les parenthèses dans tes $retour->execute;, la fonction ne sera pas appelée. Ne les oublie pas !
$retour->execute();
Xavier
J'ai rajouté les () après execute, voilà ce que j'obtiens
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error in /homepages/22/d291654198/htdocs/test/index.php:165 Stack trace: #0 /homepages/22/d291654198/htdocs/test/index.php(165): PDOStatement->fetch() #1 {main} thrown in /homepages/22/d291654198/htdocs/test/index.php on line 165
ligne 165 la requête après insert
je vais corriger la fonction insert et rajouter des écho
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error in /homepages/22/d291654198/htdocs/test/index.php:165 Stack trace: #0 /homepages/22/d291654198/htdocs/test/index.php(165): PDOStatement->fetch() #1 {main} thrown in /homepages/22/d291654198/htdocs/test/index.php on line 165
ligne 165 la requête après insert
je vais corriger la fonction insert et rajouter des écho
Grâce à tous les deux, j'ai du nouveau :
1 visiteur connecté : moi
1 visiteur au total : normal
par contre, visiteurs aujourd'hui rien mais j'ai mis un écho qui es renvoyé
"pi" mon echo : visiteurs aujourd'hui
presque fini
1 visiteur connecté : moi
1 visiteur au total : normal
par contre, visiteurs aujourd'hui rien mais j'ai mis un écho qui es renvoyé
"pi" mon echo : visiteurs aujourd'hui
presque fini
Je viens de faire ma requête pour $aujourdhui il semble que cela fonctionne.
Je laisse passer un peu de temps et je reviens vers vous.
Merci à tous deux pour le moment
Je laisse passer un peu de temps et je reviens vers vous.
Merci à tous deux pour le moment
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
Modifié par jordane45 le 2/03/2017 à 15:07
Modifié par jordane45 le 2/03/2017 à 15:07
Bonjour,
Histoire d'améliorer un peu ton code.. je te propose de le découper en fonctions.
Voici ce que ça pourrait donner :
Au passage, pense, si ce n'est pas déjà fait, à activer la gestion des erreurs PDO :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Cordialement,
Jordane
Histoire d'améliorer un peu ton code.. je te propose de le découper en fonctions.
Voici ce que ça pourrait donner :
<?php //------------- FONCTIONS --------------------// /* Fonction pour réaliser des requêtes en PDO */ function queryExec($sql,$array_datas=NULL){ global $bdd; //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($array_datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($array_datas); } return $requete; } function add_visiteur($ip){ $sql = "INSERT into connectes ip, timestamp) VALUES(:ip, now())"; $a_datas = array(':ip'=>$ip); return queryExec($sql,$a_datas); } function update_visiteur($ip){ $sql = "UPDATE connectes SET timestamp= now() WHERE ip=:ip "; $a_datas = array(':ip'=>$ip); return queryExec($sql,$a_datas); } function get_nbVisite($ip){ $sql = "SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE ip= :ip"; $a_datas = array(':ip'=>$ip); $retour = queryExec($sql,$a_datas); $donnees = $retour->fetch(); return $donnees['nbre_entrees']; } function get_nbConnectes(){ $sql = "SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE timestamp > NOW() - INTERVAL 5 MINUTEp"; $retour = queryExec($sql); $donnees = $retour->fetch(); return $donnees['nbre_entrees']; } function get_nbVisiteurs(){ $sql = "SELECT COUNT(*) AS nbre_entrees FROM connectes "; $retour = queryExec($sql); $donnees = $retour->fetch(); return $donnees['nbre_entrees']; } function get_nouveauxInscrits($date = NULL){ $date = $date ? $date : date('Y-m-d'); // requête à adapter pour avoir le nombre de nouveaux "inscrits" ou "connectés".. je ne sais pas ce que tu veux exactement... $sql = "SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE timestamp > = :date "; $a_datas = array(':date'=>$date); $retour = queryExec($sql,$a_datas); $donnees = $retour->fetch(); return $donnees['nbre_entrees']; } //-------------- FIN DES FONCTIONS ----------------------// $ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : NULL; $nb_visite = get_nbVisite($ip); if($nb_visite == 0){ //ON AJOUTE LE NOUVEAU VISITEUR $result = add_visiteur($ip); }else{ // L'ip se trouve déjà dans la table, on met juste à jour le timestamp $result = update_visiteur($ip); } $nb_co = get_nbConnectes(); $visiteurs = $nb_co <= 1 ? "" : "s"; echo "<strong>$nb_co</strong>visiteurs connectés".$visiteurs."<br />"; $nb_nouveaux = get_nouveauxInscrits(); $nouveaux = $nb_nouveaux <= 1 ? "" : "s"; echo "<strong>$nb_nouveaux</strong> visiteur ".$nouveaux ." aujourd'hui<br />"; $nb_visiteurs = get_nbVisiteurs(); echo "<strong>$nb_visiteurs</strong> visites au total<br />"; ?>
Au passage, pense, si ce n'est pas déjà fait, à activer la gestion des erreurs PDO :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Cordialement,
Jordane
@J'avais déjà géré les erreurs PDO juste après la connexion.
Merci pour le code, j'essaie de le comprendre et à demain tous
Merci pour le moment
Merci pour le code, j'essaie de le comprendre et à demain tous
Merci pour le moment
Je ne comprends pas bien où tu mets tes identifiants avant le try ?
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
2 mars 2017 à 19:49
2 mars 2017 à 19:49
Quels identifiants ?
Me connecter à ma base...
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
2 mars 2017 à 20:37
2 mars 2017 à 20:37
Ben tu mets ton code ....
Comme tu l'as fait avant de poser ta question...
Comme tu l'as fait avant de poser ta question...
Plus c....e que moi, c'est difficile
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
2 mars 2017 à 21:00
2 mars 2017 à 21:00
J'ai pas pensé à le remettre. .. C'est de ma faute.
:-)
:-)
Pas du tout, il faut du travail personnel, je vais l'étudier de près demain.
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
2 mars 2017 à 21:08
2 mars 2017 à 21:08
au passage ... pense à le mettre dans un fichier à part que tu n'auras qu'à INCLURE ( via un REQUIRE_ONCE ) dans les pages de ton site où tu en as besoin.
ça t'évitera de le recopier 500 fois .... et de devoir le modifier (500 fois également....) si jamais tu devais changer des infos comme le user / password ..le port.....
ça t'évitera de le recopier 500 fois .... et de devoir le modifier (500 fois également....) si jamais tu devais changer des infos comme le user / password ..le port.....
àjordane 45
J'ai 2 petites erreurs, question de quotes ?
Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MINUTEp' at line 3 Les datas : visiteurs connectés
Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= '2017-03-03'' at line 3 Les datas : Array ( [:date] => 2017-03-03 ) visiteur aujourd'hui
J'ai 2 petites erreurs, question de quotes ?
Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MINUTEp' at line 3 Les datas : visiteurs connectés
Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= '2017-03-03'' at line 3 Les datas : Array ( [:date] => 2017-03-03 ) visiteur aujourd'hui
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
1 551
Modifié par yg_be le 3/03/2017 à 12:54
Modifié par yg_be le 3/03/2017 à 12:54
bonjour, suggestions:
1) supprime le p à la fin de MINUTEp
2) supprime l'espace entre > et = dans WHERE timestamp > = :date ";
3) ajoute
4) remplace
par
1) supprime le p à la fin de MINUTEp
2) supprime l'espace entre > et = dans WHERE timestamp > = :date ";
3) ajoute
echo " La requete : ".$sql ;avant
echo " Les datas : " ;
4) remplace
$sql = "INSERT into connectes ip, timestamp) VALUES(:ip, now())";
par
$sql = "INSERT into connectes (ip, timestamp) VALUES(:ip, now())";
Merci à toi yg_be
plus d'erreurs par contre le retour fait cela et à mon avis....
0visiteurs connectés
644 visiteur s aujourd'hui
644 visites au total
plus d'erreurs par contre le retour fait cela et à mon avis....
0visiteurs connectés
644 visiteur s aujourd'hui
644 visites au total
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
1 551
Modifié par yg_be le 3/03/2017 à 12:52
Modifié par yg_be le 3/03/2017 à 12:52
en effet, tu dois:
1) remplacer
par
2) supprimer l'espace après visiteur dans
1) remplacer
echo "<strong>$nb_co</strong>visiteurs connectés".$visiteurs."<br />";
par
echo "<strong>$nb_co</strong> visiteur".$visiteurs." connecté".$visiteurs."<br />";
2) supprimer l'espace après visiteur dans
echo "<strong>$nb_nouveaux</strong> visiteur "
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
1 551
3 mars 2017 à 12:50
3 mars 2017 à 12:50
As-tu une clé unique sur le champ ip dans la table connectes? Sinon, je pense que c'est le moment de l'ajouter.
Je pense que c'est le moment aussi d'aller voir le contenu de ta table connectes. je suppose que tu as un outil qui te permet de faire cela?
Je pense que c'est le moment aussi d'aller voir le contenu de ta table connectes. je suppose que tu as un outil qui te permet de faire cela?
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
1 551
3 mars 2017 à 13:01
3 mars 2017 à 13:01
je pense aussi que tu dois changer le type de ton champ timestamp, en TIMESTAMP au lieu de int(11)
Même pas eu besoin d'ajouter une clé dans ma BDD, la modification du champ int en TIMESTAMP a suffi.
De plus mes deux codes fonctionnent, le mien auquel j'ai rajouté un select count pour $aujourd'hui que tu m'avais conseillé et celui de jordane 45.
Un gros merci à tous deux sans oublier Reivax 962
avec mes "execute".
J'avais une jolie table qui fonctionnait avec les os, les browsers, les sites référents mais en mysql_query : fini.
Cordiales sympathies à tous.
De plus mes deux codes fonctionnent, le mien auquel j'ai rajouté un select count pour $aujourd'hui que tu m'avais conseillé et celui de jordane 45.
Un gros merci à tous deux sans oublier Reivax 962
avec mes "execute".
J'avais une jolie table qui fonctionnait avec les os, les browsers, les sites référents mais en mysql_query : fini.
Cordiales sympathies à tous.
Où est le bouton résolu SVP
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
3 mars 2017 à 14:22
3 mars 2017 à 14:22
en dessous du titre de ta question.
je le fait pour toi.
je le fait pour toi.
americanbichon
>
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
3 mars 2017 à 14:31
3 mars 2017 à 14:31
Merci