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
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
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
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);
?>
<?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