Problème compteur de connectés

Résolu
corentin.bc Messages postés 385 Date d'inscription   Statut Membre Dernière intervention   -  
corentin.bc Messages postés 385 Date d'inscription   Statut Membre Dernière intervention   -
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. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    Petit rappel, l'extension mysql est obsolète
    0
  2. corentin.bc Messages postés 385 Date d'inscription   Statut Membre Dernière intervention   8
     
    Alors tu conseilles de mettre quoi?
    0
    1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      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
  3. corentin.bc Messages postés 385 Date d'inscription   Statut Membre Dernière intervention   8
     
    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. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      Si tu as fais :
      mysqli_connect
      Il faut aussi mettre à jour le reste du code ...
      mysql_query & co ne sont plus valide.
      0
  4. corentin.bc Messages postés 385 Date d'inscription   Statut Membre Dernière intervention   8
     
    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. mouloud11 Messages postés 560 Statut Membre 125
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. corentin.bc Messages postés 385 Date d'inscription   Statut Membre Dernière intervention   8
     
    Merci beaucoup, ça fonctionne !!!!!!!!
    0