Potrzebuje skrypt wyświetlający ilość osób online oraz ile jest gości, a ile zarejestrowanych. Zaczynając od gotowego skryptu wyświetlającego jedynie ilość wszystkich online, napisałem poniższy kod. Problem jest taki, że kiedy jakaś osoba bądź osoby zarejestrowane korzystają z tego samego IP co gość lub goście, skrypt wyświetla dziwne dane. Wiem, że dzieje się tak dlatego, że gości licze w ten sposób, że pobieram ilość wierszy z tabeli user_stats odrzucając te numery IP, które znajdują się w tabeli users. Nie mam pojęcia jak to rozwiąząć, więc licze na pomoc
<?php
if ($_SERVER['REMOTE_ADDR'] == '')
$strIP = $_SERVER['HTTP_X_FORWARDED_FOR'];
else
$strIP = $_SERVER['REMOTE_ADDR'];
$objDB = DBConnect();
$mixDBDelete = $objDB->query("DELETE FROM `user_stats` WHERE DATE_ADD(`time`, INTERVAL 1 MINUTE) < NOW()");
$mixDBInsert = $objDB->query("INSERT INTO `user_stats` VALUES('$strIP', NOW())");
if ($mixDBInsert->num_rows<1)
$mixDBUpdate = $objDB->query("UPDATE `user_stats` SET `time` = NOW() WHERE `ip` = '$strIP'");
$mixDBGuests = $objDB->query("SELECT `ip` FROM `user_stats` where `ip` NOT IN (SELECT `ip` from `users` WHERE `ip` <> '')");
$mixDBUsers = $objDB->query("SELECT users.ip FROM `user_stats`, `users` where user_stats.ip = users.ip"); $mixDBUserName = $objDB->query("SELECT users.username AS `username` FROM `users`, `admin` WHERE users.ip <> '' AND users.userid <> admin.userid");
$mixDBAdmin = $objDB->query("SELECT users.username AS `username` FROM `users`, `admin` WHERE users.ip <> '' AND users.userid = admin.userid");
$strUsers = '';
if($mixDBUserName->num_rows>0){
for($i=0; $i<$mixDBUserName->num_rows; $i++){
$arrDBUserName = $mixDBUserName->fetch_assoc();
$strUsers .= $arrDBUserName['username'];
if($i < $mixDBUserName->num_rows-1)
$strUsers .= ', ';
}
}
$strAdmin = '';
if($mixDBAdmin->num_rows>0){
for($i=0; $i<$mixDBAdmin->num_rows; $i++){
$arrDBAdmin = $mixDBAdmin->fetch_assoc();
$strAdmin .= '<span class="bold">'.$arrDBAdmin['username'].'</span>';
if($i < $mixDBAdmin->num_rows-1)
$strAdmin .= ', ';
}
}
if($mixDBGuests->num_rows>0)
$intGuests = $mixDBGuests->num_rows;
else
$intGuests = 0;
if($mixDBUsers->num_rows>0)
$intUsers = $mixDBUsers->num_rows;
else
$intUsers = 0;
$intAll = $intGuests + $intUsers;
echo '<p>Aktualnie na stronie jest '; if ($intAll == 1)
echo $intAll.' użytkownik.'; else
echo $intAll.' użytkowników.'; if ($intGuests == 1)
echo $intGuests.' gość i '; else
echo $intGuests.' gości i '; if ($intUsers == 0)
echo $intUsers.' zarejestrowanych.'; elseif ($intUsers == 1)
echo $intUsers.' zarejestrowany: '.$strAdmin.$strUsers; else
echo $intUsers.' zarejestrowanych: '.$strAdmin.$strUsers; ?>