Problème compteur de connectés

Résolu/Fermé
corentin.bc Messages postés 389 Date d'inscription dimanche 8 février 2015 Statut Membre Dernière intervention 4 novembre 2022 - Modifié par Judge_DT le 1/11/2016 à 21:14
corentin.bc Messages postés 389 Date d'inscription dimanche 8 février 2015 Statut Membre Dernière intervention 4 novembre 2022 - 2 nov. 2016 à 20:03
Bonsoir,
j'avais jusqu'à aujourd'hui un compteur de connectés en temps réel.
Il fonctionnait parfaitement bien donc jusqu'à aujourd'hui.
Tout à l'heure j'ai réclamé une migration de PHP à mon hébergeur.
Je suis donc passé de la 5.5.9 à la 7.0.12.
Mais là, le compteur ne fonctionne plus et je ne sais pas quoi faire.
Voici le code :
<?php
// Connexion à MySQL
mysql_connect("localhost:3306", "miklhcos", "pecheur430");
mysql_select_db("oignon");
// -------
// ÉTAPE 1 : on vérifie si l'IP se trouve déjà dans la table.
// Pour faire ça, on n'a qu'à compter le nombre d'entrées dont le champ "ip" est l'adresse IP du visiteur.
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
$donnees = mysql_fetch_array($retour);
if ($donnees['nbre_entrees'] == 0) // L'IP ne se trouve pas dans la table, on va l'ajouter.
{
mysql_query('INSERT INTO connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')');
}
else // L'IP se trouve déjà dans la table, on met juste à jour le timestamp.
{
mysql_query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
}
// -------
// É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
mysql_query('DELETE FROM connectes WHERE timestamp < ' . $timestamp_5min);
// -------
// ÉTAPE 3 : on compte le nombre d'IP stockées dans la table. C'est le nombre de visiteurs connectés.
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes');
$donnees = mysql_fetch_array($retour);
// Ouf ! On n'a plus qu'à afficher le nombre de connectés !
echo ("Il y a actuellement " . $donnees["nbre_entrees"] . " visiteurs connectés sur " . "$nomdusite" . " !");
?>

que dois-je faire pour qu'il refonctionne sous PHP7 ?

Merci.

Édit de la modération: Merci d'utiliser le langage approprié dans les balises de code afin d'obtenir la coloration syntaxique correspondante.

Amicalement! Corentin.
A voir également:

5 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 330
1 nov. 2016 à 21:24
Petit rappel, l'extension mysql est obsolète
0
corentin.bc Messages postés 389 Date d'inscription dimanche 8 février 2015 Statut Membre Dernière intervention 4 novembre 2022 8
1 nov. 2016 à 21:34
Alors tu conseilles de mettre quoi?
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 330
1 nov. 2016 à 21:43
Tout est expliqué dans le lien, mysqli a une syntaxe très proche de mysql, si tu ne veux pas tout changer, ça peut fonctionner.
0
corentin.bc Messages postés 389 Date d'inscription dimanche 8 février 2015 Statut Membre Dernière intervention 4 novembre 2022 8
Modifié par NHenry le 2/11/2016 à 18:42
Salut,
je crois que j'ai pas tout bien fais :)
Voici mon nouveau code :
<?php
if($bdd = mysqli_connect('localhost', 'miklhcos', 'pecheur430', 'oignon'))
{
}
else
{
echo 'Erreur';
}
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
$donnees = mysql_fetch_array($retour);
if ($donnees['nbre_entrees'] == 0) // L'IP ne se trouve pas dans la table, on va l'ajouter.
{
mysql_query('INSERT INTO connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')');
}
else // L'IP se trouve déjà dans la table, on met juste à jour le timestamp.
{
mysql_query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
}
// -------
// É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
mysql_query('DELETE FROM connectes WHERE timestamp < ' . $timestamp_5min);
// -------
// ÉTAPE 3 : on compte le nombre d'IP stockées dans la table. C'est le nombre de visiteurs connectés.
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes');
$donnees = mysql_fetch_array($retour);
// Ouf ! On n'a plus qu'à afficher le nombre de connectés !
echo ("Il y a actuellement " . $donnees["nbre_entrees"] . " visiteurs connectés sur " . "$nomdusite" . " !");
?>

mais, ça n'affiche rien.
Où me suis-je replanté ?
Merci.

Amicalement! Corentin.
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 330
2 nov. 2016 à 18:44
Si tu as fais :
mysqli_connect
Il faut aussi mettre à jour le reste du code ...
mysql_query & co ne sont plus valide.
0
corentin.bc Messages postés 389 Date d'inscription dimanche 8 février 2015 Statut Membre Dernière intervention 4 novembre 2022 8
2 nov. 2016 à 19:40
Re,
bon, j'ai essayé de suivre ce tuto :
https://www.linuxtricks.fr/wiki/php-passer-de-mysql-a-mysqli-requetes-de-base#paragraph_connexion-a-la-base
mais j'y comprends rien.
Je dois remplacer quoi par quoi, ajouter/supprimer quoi, bref faire quelles modifs ?
Merci.
0
mouloud11 Messages postés 518 Date d'inscription mardi 22 septembre 2009 Statut Membre Dernière intervention 10 novembre 2019 125
Modifié par NHenry le 2/11/2016 à 21:42
Je connais rien a php, mais essaye sa. J'ai pas tester
<?php
if($bdd = mysqli_connect('localhost', 'miklhcos', 'pecheur430', 'oignon'))
{
}
else
{
    echo 'Erreur';
}
$donnees = $bdd->query('SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'')->fetch_array();
if ($donnees['nbre_entrees'] == 0) // L'IP ne se trouve pas dans la table, on va l'ajouter.
{
    $bdd->query('INSERT INTO connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')');
}
else // L'IP se trouve déjà dans la table, on met juste à jour le timestamp.
{
    $bdd->query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
}
// -------
// É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
$bdd->query('DELETE FROM connectes WHERE timestamp < ' . $timestamp_5min);
// -------
// ÉTAPE 3 : on compte le nombre d'IP stockées dans la table. C'est le nombre de visiteurs connectés.
$donnees = $bdd->query('SELECT COUNT(*) AS nbre_entrees FROM connectes')->fetch_array();
// Ouf ! On n'a plus qu'à afficher le nombre de connectés !
echo ("Il y a actuellement " . $donnees["nbre_entrees"] . " visiteurs connectés sur " . "$nomdusite" . " !");
?>


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
corentin.bc Messages postés 389 Date d'inscription dimanche 8 février 2015 Statut Membre Dernière intervention 4 novembre 2022 8
2 nov. 2016 à 20:03
Merci beaucoup, ça fonctionne !!!!!!!!
0