Compteur connectés
Résolu/Fermé
A voir également:
- Compteur connectés
- Compteur électrique - Guide
- Voir les appareils connectés facebook - Guide
- Comment ralentir un compteur linky forum - Accueil - Objets connectés
- Compteur communicant - Guide
- Compteur de contractions - Télécharger - Santé & Bien-être
1 réponse
jordane45
Messages postés
38358
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 décembre 2024
4 719
24 janv. 2017 à 23:25
24 janv. 2017 à 23:25
Bonjour,
Tu dis avoir des erreurs ... lesquelles ?? (message d'erreur exact et complet ! )
Ensuite... ce script utilise l'ancienne extension mysql .. considérée comme obsolète !
Je t'invite vivement à passer à mysqli ou pdo. (perso je préfère pdo)
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
Dernier point... ce script ne peut fonctionner que si tu as également créé la table "connectes" qui va avec.
Table qui est composée de deux colonnes : "timestamp" (au format datetime ou timestamp )
et la colonne : "ip" qui est certainement un Varchar(15)
Comme je suis sympa et que j'ai un peu de temps ...
voici le même code écrit en PDO
Déjà (et quelque soit l'extension que tu prendras (pdo ou mysqli ...)) il est préférable de placer le code
de connexion à la bdd dans un fichier à part.
Ainsi tu n'auras qu'à l'inclure dans les différentes pages de ton site sans avoir à tout réécrire à chaque fois !
Donc :
Ensuite, voici le code à proprement parlé.
Tu dis avoir des erreurs ... lesquelles ?? (message d'erreur exact et complet ! )
Ensuite... ce script utilise l'ancienne extension mysql .. considérée comme obsolète !
Je t'invite vivement à passer à mysqli ou pdo. (perso je préfère pdo)
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
Dernier point... ce script ne peut fonctionner que si tu as également créé la table "connectes" qui va avec.
Table qui est composée de deux colonnes : "timestamp" (au format datetime ou timestamp )
et la colonne : "ip" qui est certainement un Varchar(15)
Comme je suis sympa et que j'ai un peu de temps ...
voici le même code écrit en PDO
Déjà (et quelque soit l'extension que tu prendras (pdo ou mysqli ...)) il est préférable de placer le code
de connexion à la bdd dans un fichier à part.
Ainsi tu n'auras qu'à l'inclure dans les différentes pages de ton site sans avoir à tout réécrire à chaque fois !
Donc :
<?php //fichier de connexion à la bdd : cnxBdd.php try{ $bdd =new PDO('mysql:host=localhost; dbname=coursphp; charset=utf8', 'sdz', 'mot_de_passe'); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); }
Ensuite, voici le code à proprement parlé.
<?php // Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display-errors','on'); //connexion à la bdd require_once "cnxBdd.php"; //récupération des variables $ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : NULL; if($ip){ // ------- // ÉTAPE 1 : on vérifie si l'IP se trouve déjà dans la table. $sql = "SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE ip= :ip"; $datas = array(':ip'=>$ip); //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; $donnees = $requete->fetchAll(); //on stocke le resultat dans un array }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } $nb_entrees = !empty($donnees[0]['nbre_entrees']) ? $donnees[0]['nbre_entrees'] : 0; $datas2 = array(':ip'=>$ip,":time"=>time()); if ( $nb_entrees == 0) { // L'IP ne se trouve pas dans la table, on va l'ajouter. $sql = "INSERT INTO connectes VALUES(:ip,:time)"; try{ $requete = $bdd -> prepare($sql) ; $requete->execute($$datas2) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } }else { // L'IP se trouve déjà dans la table, on met juste à jour le timestamp. $sql = "UPDATE connectes SET timestamp=:time WHERE ip=:ip"; $datas = array(':ip'=>$ip,":time"=>time()); try{ $requete = $bdd -> prepare($sql) ; $requete->execute($$datas2) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } } // ------- // ÉTAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 5 minutes. // On stocke dans une variable le timestamp qu'il était il y a 5 minutes : $timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes $sql = "DELETE FROM connectes WHERE timestamp < :timestamp_5min"; $datas3 = array(":timestamp_5min"=>$timestamp_5min); try{ $requete = $bdd -> prepare($sql) ; $requete->execute($$datas3) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } // ------- // ÉTAPE 3 : on compte le nombre d'IP stockées dans la table. C'est le nombre de visiteurs connectés. $sql = "SELECT COUNT(*) AS NB_CO FROM connectes"; try{ $requete = $bdd -> prepare($sql) ; $requete->execute() ; $donnees = $requete->fetchAll(); //on stocke le resultat dans un array }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } // Ouf ! On n'a plus qu'à afficher le nombre de connectés ! $nbCo = !empty($donnees[0]['NB_CO']) ? $donnees[0]['NB_CO'] : 0; echo "<p>Il y a actuellement $nbCo visiteurs connectés sur mon site !</p>"; ?>
24 janv. 2017 à 23:45
J'ai essayé ton code, et j'ai ce message : Parse error: syntax error, unexpected end of file in /public_html/autosurf/index.php on line 185
Je ne sais pas d'où ça vient
24 janv. 2017 à 23:58
25 janv. 2017 à 00:16
Notice: Undefined variable: Array in /public_html/autosurf/compteur.php on line 37
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: no parameters were bound in /public_html/autosurf/compteur.php on line 37
Il y a actuellement 0 visiteurs connectés sur mon site !
25 janv. 2017 à 01:07
25 janv. 2017 à 01:21
J'ai corrigé le script, mais maintenant il n'écrit pas sur la bdd, il voit que j'ai ajouté 2 connecté, mais il ne m'ajoute pas, et il ne supprime pas les autres qui sont ka depuis 1h