Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML][HTML][PHP]Licznik zalogowanych użytkowników plik .txt
Forum PHP.pl > Forum > Przedszkole
18Pawel18
Mam problem z licznikiem użytkowników zalogowanych. Zrobiłem jak poniżej ale nic nie wyświetla. Jak usunę isset($_POST['login']) i isset($_POST['wyloguj']) to liczy każde kliknięcie gdy jest zalogowany lub odejmuje gdy jest wylogowany. Ma ktoś pomysł jak to zmienić lub inną metodą zrobić?

Jak widać chodziło mi tu o to że jak ktoś kliknie zaloguj i będzie zalogowany to dodaje 1, a jak kliknie wyloguj i poprawnie go wyloguje to odejmie 1. A może lepiej zrobić to na bazie danych? Bo później chciałbym też zrobić wyświetlenie zalogowanego użytkownika.

  1. <?php
  2.  
  3. $file = "licznik.txt";
  4.  
  5. // Pobranie zawartości pliku
  6. $file_get = file_get_contents($file);
  7.  
  8. // Jeśli jesteś zalogowany
  9. // to dodaje do pliku (n+1)
  10. if(isset($_SESSION['id']) && isset($_POST['login'])){
  11. $online = $file_get + 1;
  12. file_put_contents($file, $online);
  13. }
  14.  
  15. // Jeśli właśnie się wylogowujesz
  16. // to odejmuje z pliku (n-1)
  17. if(!isset($_SESSION['id']) && isset($_POST['wyloguj'])){
  18. $online = ($file_get>0?--$file_get:0);
  19. file_put_contents($file, $online);
  20. }
  21.  
  22. // Wyświetlenie użytkowników online
  23. echo $online;
  24.  
  25. ?>
nospor
Czemu wy nie patrzycie na warunki jakie dajecie??
Skoro robisz dopiero loguj to jeszcze nie ma ID w sesji.

Skoro robisz wyloguj, to ID w sesji juz jest wiec nie mozesz dawac warunki na nie bycie...

Cytat
Jak usunę isset($_POST['login']) i isset($_POST['wyloguj']) to liczy każde kliknięcie gdy jest zalogowany lub odejmuje gdy jest wylogowany.

Znaczy, ze ty ten kod odpalasz nie podczas odpalania akcji loguj/wyloguj. Skoro dajesz warunki na post, to form ma byc wyslany
18Pawel18
No ok, masz rację, ale jak tak zrobię to każde kliknięcie zaloguj będzie liczone. A co jeśli użytkownik poda złe dane i nie zostanie zalogowany? Wtedy też policzy, że jest online.
nospor
No to zliczaj tylko wtedy gdy poda poprawne dane. Przeciez na etapie logowania wiesz czy podal poprawne dane czy nie.
18Pawel18
Próbowałem z tego coś zrobić ale nie dałem rady.

Wymyśliłem rozwiązanie takie:

Jeśli uzytkownik zaloguje się to zmieni rekord 'zalogowani' na 1, a jeśli niezalogowany to na 0. Pobierze cyfry wtedy i doda je. Oddzielny skrypt będzie obsługiwał automatyczne wylogowanie uzytkownika przez Cron-a.

W bazie mam taką tabelę:
  1. CREATE TABLE IF NOT EXISTS `uzytkownicy` (
  2. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `imie` varchar(20) NOT NULL,
  4. `nazwisko` varchar(20) NOT NULL,
  5. `login` varchar(20) NOT NULL,
  6. `haslo` varchar(32) NOT NULL,
  7. `email` varchar(70) NOT NULL,
  8. `aktywny` tinyint(1) NOT NULL,
  9. `zalogowany` tinyint(1) NOT NULL,
  10. `admin` tinyint(1) NOT NULL DEFAULT '0',
  11. `utworzone` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  12. PRIMARY KEY (`id`)
  13. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;
  14.  


Do logowania uzywam takiej funkcji:

  1.  
  2. function zaloguj($login, $haslo){
  3.  
  4.  
  5. include('config.php');
  6.  
  7. //nawiązanie połączenia z bazą danych
  8. $baza = new PDO('mysql:host='.$host.';dbname='.$baza,$dbUzytkownik, $dbHaslo);
  9. $baza -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  10. $baza->query('set names utf8');
  11.  
  12. $sql = "select id, login, admin, imie, nazwisko from uzytkownicy where (login like :uzytkownik or email like :mail) and haslo like :haslo and aktywny = 1";
  13.  
  14. $logowanieStmt = $baza->prepare($sql);
  15.  
  16. $logowanieStmt -> bindValue(':uzytkownik', $login, PDO::PARAM_STR);
  17. $logowanieStmt -> bindValue(':mail', $login, PDO::PARAM_STR);
  18. $logowanieStmt -> bindValue(':haslo', md5($haslo), PDO::PARAM_STR);
  19.  
  20. $logowanieStmt->execute();
  21.  
  22. $uzytkownik = $logowanieStmt->fetch();
  23.  
  24.  
  25. if($logowanieStmt->rowCount() > 0){
  26. $_SESSION['uzytkownik'] = $uzytkownik['login'];
  27. $_SESSION['id'] = $uzytkownik['id'];
  28. $_SESSION['imie'] = $uzytkownik['imie'];
  29. $_SESSION['nazwisko'] = $uzytkownik['nazwisko'];
  30. if($uzytkownik['admin']) $_SESSION['admin'] = 1;
  31. return 'ok';
  32. }
  33.  
  34. else{
  35. //sprawdzenie czy uzytkownik aktywował swoje konto
  36. $count = $baza->query('select aktywny from uzytkownicy where login like \''.$login.'\'');
  37. if($count->rowCount() > 0){
  38. $count = $count->fetchAll(PDO::FETCH_ASSOC);
  39. if($count[0]['aktywny'] == 0) {
  40. $_SESSION['bladLog'] = "Twoje konto nie jest jeszcze aktywne, aktywuj konto aby móc się zalogować";
  41. return 'rejestracja';
  42. }
  43. else{
  44. $_SESSION['bladLog'] = 'Nieprawidłowa nazwa użytkownika bądź hasło';
  45. return 'err';
  46. }
  47. }
  48. else {
  49. $_SESSION['bladLog'] = 'Nieprawidłowa nazwa użytkownika bądź hasło';
  50. return 'err';
  51. }
  52.  
  53. }
  54. }
  55.  


Plik główny z logowaniem

  1. <?php if(!isset($_SESSION['id'])) : ?>
  2.  
  3. // Panel logowania
  4.  
  5. <?php else: ?>
  6.  
  7. // Jeśli poprawnie zalogowany
  8.  
  9. <?php endif; ?>


Pomoże mi to ktoś napisać?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.