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 smile.gif

  1. <?php
  2. if ($_SERVER['REMOTE_ADDR'] == '')
  3. $strIP = $_SERVER['HTTP_X_FORWARDED_FOR'];
  4. else
  5. $strIP = $_SERVER['REMOTE_ADDR'];
  6. $objDB = DBConnect();
  7. $mixDBDelete = $objDB->query("DELETE FROM `user_stats` WHERE DATE_ADD(`time`, INTERVAL 1 MINUTE) < NOW()");
  8. $mixDBInsert = $objDB->query("INSERT INTO `user_stats` VALUES('$strIP', NOW())");
  9. if ($mixDBInsert->num_rows<1)
  10. $mixDBUpdate = $objDB->query("UPDATE `user_stats` SET `time` = NOW() WHERE `ip` = '$strIP'");
  11. $mixDBGuests = $objDB->query("SELECT `ip` FROM `user_stats` where `ip` NOT IN (SELECT `ip` from `users` WHERE `ip` <> '')");
  12. $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");
  13. $mixDBAdmin = $objDB->query("SELECT users.username AS `username` FROM `users`, `admin` WHERE users.ip <> '' AND users.userid = admin.userid");
  14. $strUsers = '';
  15. if($mixDBUserName->num_rows>0){
  16. for($i=0; $i<$mixDBUserName->num_rows; $i++){
  17. $arrDBUserName = $mixDBUserName->fetch_assoc();
  18. $strUsers .= $arrDBUserName['username'];
  19. if($i < $mixDBUserName->num_rows-1)
  20. $strUsers .= ', ';
  21. }
  22. }
  23. $strAdmin = '';
  24. if($mixDBAdmin->num_rows>0){
  25. for($i=0; $i<$mixDBAdmin->num_rows; $i++){
  26. $arrDBAdmin = $mixDBAdmin->fetch_assoc();
  27. $strAdmin .= '<span class="bold">'.$arrDBAdmin['username'].'</span>';
  28. if($i < $mixDBAdmin->num_rows-1)
  29. $strAdmin .= ', ';
  30. }
  31. }
  32. if($mixDBGuests->num_rows>0)
  33. $intGuests = $mixDBGuests->num_rows;
  34. else
  35. $intGuests = 0;
  36. if($mixDBUsers->num_rows>0)
  37. $intUsers = $mixDBUsers->num_rows;
  38. else
  39. $intUsers = 0;
  40. $intAll = $intGuests + $intUsers;
  41. echo '<p>Aktualnie na stronie jest ';
  42. if ($intAll == 1)
  43. echo $intAll.' użytkownik.';
  44. else
  45. echo $intAll.' użytkowników.';
  46. echo '</p><p>';
  47. if ($intGuests == 1)
  48. echo $intGuests.' gość i ';
  49. else
  50. echo $intGuests.' gości i ';
  51. if ($intUsers == 0)
  52. echo $intUsers.' zarejestrowanych.';
  53. elseif ($intUsers == 1)
  54. echo $intUsers.' zarejestrowany: '.$strAdmin.$strUsers;
  55. else
  56. echo $intUsers.' zarejestrowanych: '.$strAdmin.$strUsers;
  57. echo '</p>';
  58. ?>