Compteur De Membres Online

Statut
N'est pas ouverte pour d'autres réponses.

XModzBroX™

Lobbyman
Premium
Inscription
20 Mars 2013
Messages
2 637
Réactions
952
Points
3 173
RGCoins
0
Salut a tous ,

Je vous release un Compteur de membres online (ou plutôt plus exatement de visiteur car même si la personne n'est pas identifié sa la trouvera)

Download :
Virus Scan :

Comment l'activée , Ben simplement metre le PHP dans la page que j'ai fourni en bas de la votre , entré vos ID de votre SQL et ajouté la Table que je vous est fourni dans votre SQL j'pence que vous savez tous faire ceci ,

a notée que dans le scrip j'ai ajoutée le Pseudo de la personne connecter donc si vous n'avez pas de parti identification Member suprimer ceci sa servira pas a grand chosse

You must be registered for see images attach


Voila enjoy bonne journée
 
C'est useless mysql, PHP va bientôt plus le supporter : faut passer à mysqli/PDO...
 
En orange ce qui peut conduire à des failles de sécurité, et en bleu ce qui ne doit plus être utilisé et qui ne sera plus supporté dans le futur.

eZcihCE.png
 
En orange ce qui peut conduire à des failles de sécurité, et en bleu ce qui ne doit plus être utilisé et qui ne sera plus supporté dans le futur.

eZcihCE.png
Je doute quand même qu'on puisse réaliser une injection SQL avec une IP pas escapée.
 
Je doute quand même qu'on puisse réaliser une injection SQL avec une IP pas escapée.

En l'état, non, mais s'il décide de changer le moyen d'identifier les visiteurs (avec l'user agent par exemple), ça peut en devenir une.
 
Voila j'ai esseyer de tout convertir vous qui connaiser y'a t'il une erreur ?

<?php
($GLOBALS["___mysqli_ston"] = mysqli_connect("Serveur", "Username", "MotDePasse"));
((bool)mysqli_query($GLOBALS["___mysqli_ston"], "USE Database"));
$retour = mysqli_query($GLOBALS["___mysqli_ston"], 'SELECT COUNT(*) AS nbre_entrees FROM cpt_connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
$donnees = mysqli_fetch_array($retour);
if ($donnees['nbre_entrees'] == 0)
{
mysqli_query($GLOBALS["___mysqli_ston"], 'INSERT INTO cpt_connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')');
}
else
{
mysqli_query($GLOBALS["___mysqli_ston"], 'UPDATE cpt_connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
}
$timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes
mysqli_query($GLOBALS["___mysqli_ston"], 'DELETE FROM cpt_connectes WHERE timestamp < ' . $timestamp_5min);
$retour = mysqli_query($GLOBALS["___mysqli_ston"], 'SELECT COUNT(*) AS nbre_entrees FROM cpt_connectes');
$donnees = mysqli_fetch_array($retour);
echo '<center><p> Salut ' . $_SESSION['username'] . ' Il y a actuellement ' . $donnees['nbre_entrees'] . ' membres connectés !</p></center>';
?>
 
Tiens, si tu veux un vrai code:

PHP:
<?php

$host = 'localhost';
$dbname = 'dbname';
$username = 'username';
$password = 'password';
$options = array(
    PDO::ATTR_EMULATE_PREPARES => false,
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);

$db = new PDO("mysql:host=$host;dbname=$dbname", $username, $password, $options);
$ip = $_SERVER['REMOTE_ADDR'];

$db->exec('CREATE TABLE IF NOT EXISTS visitors_online (
    time BIGINT,
    ip VARCHAR
);');

$db->prepare('DELETE FROM visitors_online WHERE time < ?')->execute(array((time()-300)));

$stmt = $db->prepare('SELECT COUNT(*) AS count FROM visitors_online WHERE ip = ?');
$stmt->execute(array($ip));

if ($stmt->fetch()->count)
    $db->prepare('UPDATE visitors_online SET time = ? WHERE ip = ?')->execute(array(time(), $ip));
else
    $db->prepare('INSERT INTO visitors_online VALUES (?, ?)')->execute(array(time(), $ip));

$online = (int) $db->query('SELECT COUNT(*) AS count FROM visitors_online WHERE 1')->fetch()->count;

echo '<p style="text-align:center;">Salut '.
     htmlentities($_SESSION['username'], ENT_QUOTES, "UTF-8").
     '. Il y a actuellement '.
     $online.
     ' visiteurs en ligne.</p>';

?>
 
Tiens, si tu veux un vrai code:

Code:
<?php

$host = 'localhost';
$dbname = 'dbname';
$username = 'username';
$password = 'password';
$options = array(
    PDO::ATTR_EMULATE_PREPARES => false,
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);

$db = new PDO("mysql:host=$host;dbname=$dbname", $username, $password, $options);
$ip = $_SERVER['REMOTE_ADDR'];

$db->exec('CREATE TABLE IF NOT EXISTS visitors_online (
    time BIGINT,
    ip VARCHAR
);');

$db->prepare('DELETE FROM visitors_online WHERE time < ?')->execute(array((time()-300)));

$stmt = $db->prepare('SELECT COUNT(*) AS count FROM visitors_online WHERE ip = ?');
$stmt->execute(array($ip));

if ($stmt->fetch()->count)
    $db->prepare('UPDATE visitors_online SET time = ? WHERE ip = ?')->execute(array(time(), $ip));
else
    $db->prepare('INSERT INTO visitors_online VALUES (?, ?)')->execute(array(time(), $ip));

$online = (int) $db->query('SELECT COUNT(*) AS count FROM visitors_online WHERE 1')->fetch()->count;

echo '<p style="text-align:center;">Salut '.
     htmlentities($_SESSION['username'], ENT_QUOTES, "UTF-8").
     '. Il y a actuellement '.
     $online.
     ' visiteurs en ligne.</p>';

?>
je te demande pas un vrais code mes simplement si y'a des erreur dans ma conversion moi qui a labitude de dev en mysql qui depuis hier ses KC le cul a lire et comprendre le mysqli ;)
 
Le mieux c'est php pdo utilisé dans le code de @Jices .
C'est très facile à comprendre et mieux
 
je te demande pas un vrais code mes simplement si y'a des erreur dans ma conversion moi qui a labitude de dev en mysql qui depuis hier ses KC le cul a lire et comprendre le mysqli ;)

Ok, alors quelques remarques:
1. Evite d'utiliser $GLOBALS, c'est vraiment déconseillé.
2. Utilise PDO: c'est bien plus flexible, et ça te permet de gérer plusieurs type de base de donnée avec le même code (MySQL, SQLite, PostgreSQL..)
3. Pourquoi il y a des parenthèses autour des 2 premières lignes de codes ?
4. Tu dois utiliser des requêtes paramétrées, et pas insérer les variables PHP directement dans la requête SQL
5. Tu dois filtrer les données que t'affiche quand tu fais echo ... pour éviter les failles XSS
 
Stylé
 
Statut
N'est pas ouverte pour d'autres réponses.
Retour
Haut