Problème compteur de connectés

Résolu
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.

5 réponses

  1. Modérateur
    Petit rappel, l'extension mysql est obsolète
    0
    1. Alors tu conseilles de mettre quoi?
      0
      1. Modérateur
        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
    2. 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
      1. Modérateur
        Si tu as fais :
        mysqli_connect
        Il faut aussi mettre à jour le reste du code ...
        mysql_query & co ne sont plus valide.
        0
    3. 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
      1. 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
    4. Merci beaucoup, ça fonctionne !!!!!!!!
      0