Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [XML][HTML][PHP]Licznik zalogowanych użytkowników plik .txt
18Pawel18
post 27.08.2013, 15:53:52
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 1.02.2010

Ostrzeżenie: (10%)
X----


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. ?>


Ten post edytował 18Pawel18 27.08.2013, 16:10:21
Go to the top of the page
+Quote Post
nospor
post 27.08.2013, 16:47:49
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Powód edycji: [nospor]:


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
18Pawel18
post 27.08.2013, 17:33:21
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 1.02.2010

Ostrzeżenie: (10%)
X----


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.

Ten post edytował 18Pawel18 27.08.2013, 17:34:39
Go to the top of the page
+Quote Post
nospor
post 27.08.2013, 17:49:41
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to zliczaj tylko wtedy gdy poda poprawne dane. Przeciez na etapie logowania wiesz czy podal poprawne dane czy nie.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
18Pawel18
post 29.08.2013, 22:26:51
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 1.02.2010

Ostrzeżenie: (10%)
X----


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ć?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.05.2025 - 08:37