Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Funkcja się nie wykonuje
Dominator
post
Post #1





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

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


Witam
Dlaczego funkcja setOnline(false); nie chce się wykonać?

  1. window.onbeforeunload = function() {
  2. setOnline(false);
  3. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
com
post
Post #2





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


a jak wygląda magiczna funkcja setOnline(false); (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
Dominator
post
Post #3





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

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


  1. function setOnline(instance)
  2. {
  3. if(instance == true)
  4. {
  5. var jqxhrT = $.post("service.php?action=setTrue");
  6. }
  7. else
  8. if(instance == false)
  9. {
  10. var jqxhrF = $.post("service.php?action=setFalse");
  11. }
  12. }


Chciałbym, aby skrypt po wykryciu zamknięcia przeglądanej strony ustalał w bazie, że ktoś jest offline.
Go to the top of the page
+Quote Post
com
post
Post #4





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


[JAVASCRIPT] pobierz, plaintext
  1. function setOnline(instance)
  2. {
  3. if(instance == true)
  4. {
  5. var jqxhrT = $.post("service.php?action=setTrue");
  6. alert('xx');
  7. }
  8. else
  9. if(instance == false)
  10. {
  11. var jqxhrF = $.post("service.php?action=setFalse", function() {
  12. alert( "success" );
  13. })
  14. .done(function() {
  15. alert( "second success" );
  16. })
  17. .fail(function() {
  18. alert( "error" );
  19. })
  20. .always(function() {
  21. alert( "finished" );
  22. });
  23. }
  24. }
  25. window.onbeforeunload = function() {
  26. setOnline(false);
  27. }
[JAVASCRIPT] pobierz, plaintext


to Ci wszytko powie, bo prawdopodobnie problem leży przy przesyłaniu (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Dominator
post
Post #5





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

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


Po wyjściu ze strony nadal w bazie mam info, że użytkownik jest online (IMG:style_emoticons/default/sad.gif)

  1. var instance;
  2. $(document).ready(function()
  3. {
  4. setOnline("yes");
  5. checkMode();
  6. });
  7. function setOnline(mode)
  8. {
  9. if(mode == "yes")
  10. {
  11. instance == true;
  12. }
  13. if(mode == "no")
  14. {
  15. instance == false;
  16. }
  17. }
  18.  
  19. function checkMode()
  20. {
  21. if(instance == true)
  22. {
  23. var jqxhrT = $.post("service.php?action=setTrue");
  24. alert('xx');
  25. }
  26. else if(instance == false)
  27. {
  28. var jqxhrF = $.post("service.php?action=setFalse", function()
  29. {
  30. alert( "success" );
  31. })
  32. .done(function()
  33. {
  34. alert( "second success" );
  35. })
  36. .fail(function()
  37. {
  38. alert( "error" );
  39. })
  40. .always(function()
  41. {
  42. alert( "finished" );
  43. });
  44. }
  45. }
  46. window.onbeforeunload = function()
  47. {
  48. setOnline("false");
  49. checkMode();
  50. }
Go to the top of the page
+Quote Post
freemp3
post
Post #6





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

Ostrzeżenie: (0%)
-----


Tutaj:
Kod
setOnline("false");

Chyba powinno być:
Kod
setOnline("no");
Go to the top of the page
+Quote Post
Dominator
post
Post #7





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

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


No faktycznie (IMG:style_emoticons/default/facepalmxd.gif)
Ale w dalszym ciągu użytkownik jest online, choć nie powinien...
Go to the top of the page
+Quote Post
freemp3
post
Post #8





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

Ostrzeżenie: (0%)
-----


Może funkcja zmieniająca status w bazie nie działa prawidłowo. Spróbuj zasymulować wyłączenie przeglądarki i sprawdź w konsoli co zostanie zwrócone.
Go to the top of the page
+Quote Post
Dominator
post
Post #9





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

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


W dalszym ciągu nie działa...

plik service.php

  1. <?php
  2.  
  3. include 'online.php';
  4.  
  5.  
  6. @$akcja = $_GET["action"];
  7.  
  8. if(isset($akcja) && $akcja == "getOnline")
  9. {
  10. $nowy = new Baza();
  11. $data = $nowy->getData();
  12. echo $data;
  13. }
  14. if(isset($akcja) && $akcja == "setTrue")
  15. {
  16. $nowy = new Baza();
  17. $nowy->setRow("online");
  18. }
  19. if(isset($akcja) && $akcja == "setFalse")
  20. {
  21. $nowy = new Baza();
  22. $nowy->setRow("offline");
  23. }
  24.  
  25.  
  26. ?>


online.php

  1. <?php
  2. Class Baza
  3. {
  4. public function __construct()
  5. {
  6. $this->Connect();
  7. }
  8. public function Connect()
  9. {
  10. try
  11. {
  12. $pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', '', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
  13. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  14. if($pdo)
  15. {
  16. $this->conn = $pdo;
  17. return true;
  18. }
  19. }
  20. catch(PDOException $e)
  21. {
  22. echo "Błąd " . $e->getMessage();
  23. }
  24. }
  25. public function setRow($text)
  26. {
  27. if($this->conn)
  28. {
  29. $dodaj = $this->conn->prepare("UPDATE `is_online` SET `online`=:online");
  30. $dodaj-> bindValue(":online", $text, PDO::PARAM_STR);
  31. $dodaj->execute();
  32. $dodaj->closeCursor();
  33. }
  34. }
  35. public function getData()
  36. {
  37. if($this->conn)
  38. {
  39. $_check = $this->conn->prepare("SELECT `online` FROM `is_online`");
  40. $_check-> execute();
  41. if($dane = $_check -> fetch())
  42. {
  43. echo $dane["online"];
  44. }
  45. }
  46. }
  47. }



Nie mam pojęcia dlaczego to nie chce działać.
Go to the top of the page
+Quote Post
sowiq
post
Post #10





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Dominator @ 14.10.2013, 11:48:09 ) *
Nie mam pojęcia dlaczego to nie chce działać.

A jaką masz pewność, że request jest wysyłany na serwer? Może zapytanie nie zdąży być wysłane przed zamknięciem przeglądarki, hmm?
Go to the top of the page
+Quote Post
freemp3
post
Post #11





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

Ostrzeżenie: (0%)
-----


Od sprawdzenia na pewno nie zadziała. Co sie wyświetla w konsoli? Masz pewność, że skrypt jest odpalany? Wyświetl w nim coś i sprawdź konsole.
Go to the top of the page
+Quote Post
Dominator
post
Post #12





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

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


Cytat(sowiq @ 14.10.2013, 11:53:40 ) *
A jaką masz pewność, że request jest wysyłany na serwer? Może zapytanie nie zdąży być wysłane przed zamknięciem przeglądarki, hmm?


Nawet o tym nie pomyślałem...
Także więc ta metoda odpada. W takim razie w jaki inny sposób sprawdzić czy użytkownik jest online/offline?
Go to the top of the page
+Quote Post
flashdev
post
Post #13





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

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


Cytat(Dominator @ 14.10.2013, 11:58:21 ) *
Nawet o tym nie pomyślałem...
Także więc ta metoda odpada. W takim razie w jaki inny sposób sprawdzić czy użytkownik jest online/offline?


Jeśli chcesz mieć tak precyzyjną informacją to nawiąż socket connection z serwerem.

Jesli może być mniej dokąłdnie, załóż, że np. po 5 min. od ostatniej aktywnosci user jest offline.
Go to the top of the page
+Quote Post
com
post
Post #14





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


w normalnym przypadku czyli użytkownik zalogował się i wylogował to oczywiście ustawiaj przy logowaniu na online i przy wylogowaniu na offline, a jak zamknie okno to po prostu spr status po czasie życia sesji, jeśli wygasła to ustawiasz automatycznie na offline i wylogowujesz (IMG:style_emoticons/default/wink.gif)

Ten post edytował com 14.10.2013, 17:39:24
Go to the top of the page
+Quote Post
sowiq
post
Post #15





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@com, autorowi chyba raczej chodziło o zliczanie użytkowników, którzy obecnie są online, a nie o wylogowywanie.

@Dominator, o ile pomysł z nawiązywaniem socketowego połączenia wydaje mi się trochę przerostem formy nad treścią, o tyle możesz wykonywać na serwer zapytania AJAX w określonym interwale, np. co 30 sekund i odświeżać rekord danego użytkownika w bazie. A skrypt wyświetlający ilość userów online zliczałby tylko te rekordy, które są młodsze niż 30 sekund. Proste i w miarę dokładne (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
com
post
Post #16





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


Cytat(Dominator @ 26.09.2013, 20:52:20 ) *
Chciałbym, aby skrypt po wykryciu zamknięcia przeglądanej strony ustalał w bazie, że ktoś jest offline.


sowiq Chyba jednak nie, chyba że od tamtego czasu coś sie zmieniło (IMG:style_emoticons/default/wink.gif)

Ten post edytował com 14.10.2013, 20:52:04
Go to the top of the page
+Quote Post
sowiq
post
Post #17





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@com, ogólnie rzecz biorąc sprowadza się to do jednego.

Cytat(com @ 14.10.2013, 18:38:51 ) *
a jak zamknie okno to po prostu spr status po czasie życia sesji

Jeśli sesje nie są zaimplementowane np. na bazie danych to nie będzie to takie łatwe. Bo niby jak dobierzesz się do danych sesyjnych innego użytkownika z poziomu PHP? Będziesz iterował po wszystkich możliwych (tzn. istniejących na dysku) ID sesji?
Go to the top of the page
+Quote Post
Sephirus
post
Post #18





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Jeśli robisz coś w taki sposób że wysyłasz po zmianie strony to request ajaxowy może zostać przerwany - przede wszystkim dodaj w service.php na początku:



Po drugie:

Użyj zwykłego .ajax w trybie synchronicznym - powinno to wymusić zakończenie tej operacji przed zamknięciem strony - choć nie należy na tym polegać :/

Ten post edytował Sephirus 15.10.2013, 07:58:28
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.12.2025 - 00:39