Uutiset:

Join the Facebook Fan Page.

Main Menu
Advertisement:

Liste ip user online

Aloittaja masterz, kesäkuu 15, 2009, 05:24:07 AP

« edellinen - seuraava »

masterz

Bonjour à tous,

Debutant sur SMF, je cherche une facon de recuperer la liste d'adresse IP des membres connectés.
En fait, mon but et de recuperer la liste d'adresse ip des membres en ligne, pour les autoriser a acceder a une application  sur un serveur.

Schéma:

1-l'utilisateur est online sur SMF
2-son ip est ajouter dans une liste
3-cette liste est ajoutée dans le firewall
4-l'utilisateur peut acceder au serveur.

J'ai vu que dans user online today on pouvait recuperer l'ip , donc est il possible de recuperer directement la liste des IP online .

Merci de votre aide

MasTerZ

PS: j'uitlise SMF 1.1.9

DeathSign

Bonjour,

Une fois connecté à la base SQL tu peux utiliser :

$request = mysql_query("
SELECT
lo.ID_MEMBER, lo.url, INET_NTOA(lo.ip) AS ip, mem.realName, lo.session,
IFNULL(mem.showOnline, 1) AS showOnline, mem.ID_GROUP
FROM {$db_prefix}log_online AS lo
LEFT JOIN {$db_prefix}members AS mem ON (lo.ID_MEMBER = mem.ID_MEMBER)");
$online = array();

while ($row = mysql_fetch_assoc($request))
{
$actions = @unserialize($row['url']);
if ($actions === false || $row['ID_MEMBER'] == 0) // On retire aussi les invités (ID_MEMBER = 0)
continue;

$online[$row['session']] = array(
'id' => $row['ID_MEMBER'],
'realName' => $row['realName'], // Pseudo
'ip' => $row['ip'],
'showOnline' => $row['showOnline'], // Visible ?
'idgroup' => $row['ID_GROUP'], // Groupe principal
);
}
mysql_free_result($request);


Tout est contenu dans $online, à toi de l'arranger j'ai mis quelques infos qui pourraient t'être utile en retirant tous ceux qui n'étaient pas identifiés.

Amicalement,
DeathSign

masterz

Bonjour et merci pour ta reponse,

J'ai essayé d'integrer ton code dans une page pour tester mais j'ai un message d'erreur:

Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/tmp/mysqld.sock' (2) in /homepages/22/d140699363/htdocs/goalserver/kk.php on line 22

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /homepages/22/d140699363/htdocs/goalserver/kk.php on line 22

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /homepages/22/d140699363/htdocs/goalserver/kk.php on line 25

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /homepages/22/d140699363/htdocs/goalserver/kk.php on line 39



Voici ma page:

<?php

$host_db 
"xxxxxxx"// nom de votre serveur
$user_db "xxxxxxx"// nom d'utilisateur de connexion à votre bdd
$password_db "xxxxx"// mot de passe de connexion à votre bdd
$bdd_db "xxxxxxx"// nom de votre bdd

function connect()
{
global 
$host_db,$user_db,$password_db,$bdd_db;
$connect_db mysql_connect($host_db,$user_db,$password_db);
mysql_select_db($bdd_db,$connect_db);
return 
$connect_db;
};
?>

<?php
$request 
mysql_query("
SELECT
lo.ID_MEMBER, lo.url, INET_NTOA(lo.ip) AS ip, mem.realName, lo.session,
IFNULL(mem.showOnline, 1) AS showOnline, mem.ID_GROUP
FROM 
{$db_prefix}log_online AS lo
LEFT JOIN 
{$db_prefix}members AS mem ON (lo.ID_MEMBER = mem.ID_MEMBER)");
$online = array();

while (
$row mysql_fetch_assoc($request))
{
$actions = @unserialize($row['url']);
if ($actions === false || $row['ID_MEMBER'] == 0// On retire aussi les invités (ID_MEMBER = 0)
continue;

$online[$row['session']] = array(
'id' => $row['ID_MEMBER'],
'realName' => $row['realName'], // Pseudo
'ip' => $row['ip'],
'showOnline' => $row['showOnline'], // Visible ?
'idgroup' => $row['ID_GROUP'], // Groupe principal
);
}
mysql_free_result($request);
?>

<?php
function close()
{
global 
$connect_db;
mysql_close($connect_db);
}

?>


J'ai remplacé les identifiant/pass par xxxxx pour des questions de securité bien sur.

MasTerZ

DeathSign

#3
C'est normal tu définies tes fonctions mais tu ne les appelles pas.

Tu peux inclure Settings.php aussi pour éviter de recopier la configuration mais c'est toi qui voit.

DeathSign

EDIT: Voilà mon script de test :
<?php

if (!file_exists('Settings.php'))
die('Fichier de configuration SMF introuvable');

require_once(
'Settings.php');

$link mysql_connect($db_server$db_user$db_passwd) or die('Could not connect: ' mysql_error());
mysql_select_db($db_name) or die('Could not select database');

$request mysql_query("
SELECT
lo.ID_MEMBER, lo.url, INET_NTOA(lo.ip) AS ip, mem.realName, lo.session,
IFNULL(mem.showOnline, 1) AS showOnline, mem.ID_GROUP
FROM 
{$db_prefix}log_online AS lo
LEFT JOIN 
{$db_prefix}members AS mem ON (lo.ID_MEMBER = mem.ID_MEMBER)");
$online = array();

while (
$row mysql_fetch_assoc($request))
{
$actions = @unserialize($row['url']);
if ($actions === false || $row['ID_MEMBER'] == 0// On retire aussi les invités (ID_MEMBER = 0)
continue;

$online[$row['session']] = array(
'id' => $row['ID_MEMBER'],
'realName' => $row['realName'], // Pseudo
'ip' => $row['ip'],
'showOnline' => $row['showOnline'], // Visible ?
'idgroup' => $row['ID_GROUP'], // Groupe principal
);
}
mysql_free_result($request);

// ... Traitement
print_r($online);

mysql_close($link);
?>

masterz

<?php
mysql_connect
("khkljlhlkhj"",n!ljnjlmkjlm""kmuhmkkjl"); // Connexion à MySQL
mysql_select_db("djklljlkjlkj"); // Sélection de la base coursphp
$db_prefix smf_ ;
$request mysql_query("
SELECT
lo.ID_MEMBER, lo.url, INET_NTOA(lo.ip) AS ip, mem.realName, lo.session,
IFNULL(mem.showOnline, 1) AS showOnline, mem.ID_GROUP
FROM 
{$db_prefix}log_online AS lo
LEFT JOIN 
{$db_prefix}members AS mem ON (lo.ID_MEMBER = mem.ID_MEMBER)");



while (
$row mysql_fetch_array($request))
{
$actions = @unserialize($row['url']);
if ($actions === false || $row['ID_MEMBER'] == 0// On retire aussi les invités (ID_MEMBER = 0)
continue;

$online[$row['session']] = array(
//'realName' => $row['realName'], // Pseudo
'ip' => $row['ip'],
);
foreach(
$online[$row['session']] as $cle => $element)
{
    echo 
'[' $cle '] ' $element ' [/ip]<br />';

}

}
mysql_free_result($request);

?>

<?php
mysql_close
(); // Déconnexion de MySQL
?>

Merci de tes réponses j'ai reussi hier soir à "bricoler" ça, en fait c'est pour alimenter une liste d'ip authorisées à acceder à une application sur un serveur dédier différent de l'hebergement.

Encore merci pour ton aide.

Ca me donne presque envide de plancher sur un mod "iponline", mais c'est une autre histoire.

MasTerZ

Advertisement: