Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skrypt użytkownicy online
parox
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 8.12.2009

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


Witam.

Napisałem owy skrypt mający na celu sprawdzanie użytkowników online.

  1. <?php
  2.  
  3. include ('engine/config.php');
  4. include ('lang/en/bloks.php');
  5.  
  6.  
  7. $time_now_uo = time();
  8. echo $time_now_uo . '<br />';
  9. $old_time_uo = time()-540;
  10.  
  11. if (isset ($_SESSION['user_id'])) {
  12. $uidc = $_SESSION['user_id'];
  13. $sql_un = "SELECT username FROM " . $db_prefix . "users WHERE id='$uidc'";
  14. $un = mysqli_query($dbc, $sql_un);
  15. $username = mysqli_fetch_array($un);
  16. $unl = $username['username'];
  17.  
  18. if($unl != false) {
  19. $sql_uo_u = "UPDATE " . $db_prefix . "users_online SET time='$time_now_uo' WHERE username='$unl'";
  20. mysqli_query($dbc, $sql_uo_u);
  21. } else {
  22. $sql_uo_a = "INSERT INTO " . $db_prefix . "users_online ('username' ,'time') VALUES ('$unl', '$time_now_uo')";
  23. mysqli_query($dbc, $sql_uo_a);
  24. }
  25. }
  26.  
  27. $sql_uo_d = "DELETE FROM " . $db_prefix . "users_online WHERE time < '$old_time_uo'";
  28. mysqli_query($dbc, $sql_uo_d);
  29.  
  30. $sql_sun = "SELECT username FROM " . $db_prefix."users_online ORDER BY username";
  31. $sun = mysqli_query($dbc, $sql_sun);
  32. if (mysqli_num_rows($sun) != 0) {
  33. echo $lang_bloks_bstats_uo . ': ';
  34. while($user_name = mysqli_fetch_array($sun)) {
  35. echo $user_name['username'] . ', ';
  36. }
  37. } else {
  38. echo $lang_bloks_bstats_nuo;
  39. }
  40.  
  41. ?>


Niestety nie zupełnie działa i nie wiem dlaczego... Czy ktoś mógłby zdefiniować co zrobiłem źle?

Baza:
  1. CREATE TABLE `frycms`.`fry_users_online` (
  2. `username` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
  3. `time` INT NOT NULL ,
  4. PRIMARY KEY ( `username` )
  5. ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;


Dzięki za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 19)
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Nie działa - co to znaczy? Jakiś błąd? Sprawdzałeś czy mysql_error coś wyrzuca? A może błąd w samym kodzie?


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
parox
post
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 8.12.2009

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


Hmm. Błędu nie wywala. Po prostu nie wysyła do bazy żadnych zapytań, i nic w bazie się nie dzieje.
mysqli_error także nic nie wybija.

// Edit

A na stronie wyświetla
Cytat
1265655100
No users online


Czyli
echo $time_now_uo . '<br />'; Linia 9
echo $lang_bloks_bstats_nuo; Linia 39

Ten post edytował parox 8.02.2010, 19:55:58
Go to the top of the page
+Quote Post
Fifi209
post
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Muszę zapytać, masz w ogóle połączenie z bazą? Masz włączone wyświetlanie błędów?


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
parox
post
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 8.12.2009

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


Połączenie z bazą mam. Pierwsze linijki wczytują konfigurację bazy i reszta skryptu jest na tym oparta (Rejestracja, Logowanie etc.) i działa. Domyślnie czy mam, chyba tak. localhost zainstalowany z XAMPP pod Ubuntu. I po dodaniu owej linijki na początek skryptu także nic.

^ Aktualizacja mojego posta wyżej.
Go to the top of the page
+Quote Post
Fifi209
post
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Wiesz... dałeś tylko część kodu, dlatego pytam o głupie rzeczy. Trudno, aby mysql_error coś zwracał skoro powinieneś użyć mysqli_error - takie moje niedopatrzenie.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
parox
post
Post #7





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 8.12.2009

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


Użyłem mysqli a nie mysql. Nie jestem aż tak głupi i wiem czego używałem i co sprawdzać ;]
Połączenie z bazą (config.php)
  1. <?php
  2.  
  3. $system_installation = true;
  4. $db_host = 'localhost';
  5. $db_name = 'frycms';
  6. $db_user = 'root';
  7. $db_pass = '';
  8. $db_prefix = 'fry_';
  9.  
  10. $dbc = @mysqli_connect ($db_host, $db_user, $db_pass, $db_name)
  11. OR die ('Cannot connect to the database, reason:<br /> ' .mysqli_connect_error() );
  12.  
  13.  
  14. ?>


A w include nr. 2 są tylko zmienne w których są zdania które właśnie są wyświetlane na stronie. Działają zmienne, SQL connection też bo jak dam
echo $uidc;
Powiedzmy w 14 linii to wyświetla mi jako kto jestem zalogowany.
Go to the top of the page
+Quote Post
altruista2
post
Post #8





Grupa: Zarejestrowani
Postów: 127
Pomógł: 32
Dołączył: 8.02.2010

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


Błąd tkwi tu:
  1. $unl = $username['username'];
  2.  
  3. if($unl != false) {
  4. $sql_uo_u = "UPDATE " . $db_prefix . "users_online SET time='$time_now_uo' WHERE username='$unl'";
  5. mysqli_query($dbc, $sql_uo_u);
  6. } else {
  7. $sql_uo_a = "INSERT INTO " . $db_prefix . "users_online ('username' ,'time') VALUES ('$unl', '$time_now_uo')";
  8. mysqli_query($dbc, $sql_uo_a);
  9. }


jeśli $unl to fałsz wywolujesz INSERT username=$unl, czyli username=''

jeśli nazwa użytkownika zapisana jest w sesji podmień kod na:
  1. $sql_uo_a = "INSERT INTO " . $db_prefix . "users_online ('username' ,'time') VALUES ('".$_SESSION['username']."', '$time_now_uo')";


Ten post edytował altruista2 8.02.2010, 22:13:03


--------------------
Jeśli Ci pomogłem kliknij pomógł. W ten sposób temat zaświeci się na żółto i użytkownicy którzy pomagają nie będą musieli niepotrzebnie klikać. Dziękuję.

"Pomaganie"
Go to the top of the page
+Quote Post
parox
post
Post #9





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 8.12.2009

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


Zmodyfikowałem trochę kod. Wygląda on teraz tak:
  1. <?php
  2.  
  3. include ('engine/config.php');
  4. include ('lang/en/bloks.php');
  5.  
  6.  
  7. $time_now_uo = time();
  8. echo $time_now_uo . '<br />';
  9. $old_time_uo = time()-540;
  10.  
  11. if (isset ($_SESSION['user_id'])) {
  12.  
  13. $sql_check_un = "SELECT username FROM " . $db_prefix . "users_online WHERE username='" . $_SESSION['username'] . "'";
  14. $cun = mysqli_query($dbc, $sql_check_un);
  15. $check_un = mysqli_fetch_array($cun);
  16.  
  17. echo $_SESSION['username'] . '<br />';
  18.  
  19. if($check_un['username'] == $_SESSION['username']) {
  20. $sql_uo_u = "UPDATE " . $db_prefix . "users_online SET time='$time_now_uo' WHERE username='" . $_SESSION['username'] . "'";
  21. mysqli_query($dbc, $sql_uo_u);
  22. } else {
  23. $sql_uo_a = "INSERT INTO " . $db_prefix . "users_online ('username' ,'time') VALUES ('" . $_SESSION['username'] . "', '$time_now_uo')";
  24. mysqli_query($dbc, $sql_uo_a);
  25. }
  26. }
  27.  
  28. $sql_uo_d = "DELETE FROM " . $db_prefix . "users_online WHERE time < '$old_time_uo'";
  29. mysqli_query($dbc, $sql_uo_d);
  30.  
  31. $sql_sun = "SELECT username FROM " . $db_prefix."users_online ORDER BY username";
  32. $sun = mysqli_query($dbc, $sql_sun);
  33. if (mysqli_num_rows($sun) != 0) {
  34. echo $lang_bloks_bstats_uo . ': ';
  35. while($user_name = mysqli_fetch_array($sun)) {
  36. echo $user_name['username'] . ', ';
  37. }
  38. } else {
  39. echo $lang_bloks_bstats_nuo;
  40. }
  41.  
  42. ?>


Ale jednak nic to nie dało.
Go to the top of the page
+Quote Post
altruista2
post
Post #10





Grupa: Zarejestrowani
Postów: 127
Pomógł: 32
Dołączył: 8.02.2010

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


dopisz ta końcu skryptu
  1. echo '<pre>'; print_r($_SESSION); echo '</pre>';


i "pochwal" się name co PHP wypluł, bo z tym $_SESSION['username'] to strzelałem że taka zmienna może być zapisywana w sesji.


--------------------
Jeśli Ci pomogłem kliknij pomógł. W ten sposób temat zaświeci się na żółto i użytkownicy którzy pomagają nie będą musieli niepotrzebnie klikać. Dziękuję.

"Pomaganie"
Go to the top of the page
+Quote Post
parox
post
Post #11





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 8.12.2009

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


Taką tworzyłem więc taka jest.
Kod
Array
(
    [user_id] => 1
    [username] => parox
    [wba] => 0e2a9165b883b8145bfe5b9abba498c8
)

wba - web browser agent.

Więc nikt nie zna przyczyny braku funkcjonalności?

Jakieś rozwiązanie?

Ten post edytował parox 9.02.2010, 11:07:08
Go to the top of the page
+Quote Post
altruista2
post
Post #12





Grupa: Zarejestrowani
Postów: 127
Pomógł: 32
Dołączył: 8.02.2010

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


Sprawdź może w phpmyadminie czy użytkownicy faktycznie się dodają do tabeli users_online?


--------------------
Jeśli Ci pomogłem kliknij pomógł. W ten sposób temat zaświeci się na żółto i użytkownicy którzy pomagają nie będą musieli niepotrzebnie klikać. Dziękuję.

"Pomaganie"
Go to the top of the page
+Quote Post
parox
post
Post #13





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 8.12.2009

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


No właśnie w tym rzecz że nie... Wyświetlać by się wyświetlały bo sprawdzałem dodając INSERTem.
Go to the top of the page
+Quote Post
altruista2
post
Post #14





Grupa: Zarejestrowani
Postów: 127
Pomógł: 32
Dołączył: 8.02.2010

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


To chyba musisz troszke podebugować smile.gif
  1. if($check_un['username'] == $_SESSION['username']) {
  2. $sql_uo_u = "UPDATE " . $db_prefix . "users_online SET time='$time_now_uo' WHERE username='" . $_SESSION['username'] . "'";
  3. echo $sql_uo_u;
  4. mysqli_query($dbc, $sql_uo_u);
  5. } else {
  6. $sql_uo_a = "INSERT INTO " . $db_prefix . "users_online ('username' ,'time') VALUES ('" . $_SESSION['username'] . "', '$time_now_uo')";
  7. echo $sql_uo_a;
  8. mysqli_query($dbc, $sql_uo_a);
  9. }


Będziesz wiedział gdzie jest błąd smile.gif

Ten post edytował altruista2 9.02.2010, 19:27:38


--------------------
Jeśli Ci pomogłem kliknij pomógł. W ten sposób temat zaświeci się na żółto i użytkownicy którzy pomagają nie będą musieli niepotrzebnie klikać. Dziękuję.

"Pomaganie"
Go to the top of the page
+Quote Post
parox
post
Post #15





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 8.12.2009

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


Kod
1265748780
parox
INSERT INTO fry_users_online ('username' ,'time') VALUES ('parox', '1265748780')No users online

Array
(
    [user_id] => 1
    [username] => parox
    [wba] => 0e2a9165b883b8145bfe5b9abba498c8
)


A kiedy dodaję wpis poprzez phpMyAdmin zapytanie jest takie:
  1. INSERT INTO `frycms`.`fry_users_online` (`username`, `time`) VALUES ('parox', '1265749209');

Próbowałem i tak z tym że zamieniłem to co trzeba na zmienne. Dalej nic. A kiedy już dodałem do bazy danych owy wpis, na stronie wygląda tak:
Kod
1265749533
parox
UPDATE fry_users_online SET time='1265749533' WHERE username='parox'
Users online: parox,

Array
(
    [user_id] => 1
    [username] => parox
    [wba] => 0e2a9165b883b8145bfe5b9abba498c8
)


W dodatku wpis w bazie aktualizuje się.
Go to the top of the page
+Quote Post
altruista2
post
Post #16





Grupa: Zarejestrowani
Postów: 127
Pomógł: 32
Dołączył: 8.02.2010

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


Wszystko jasne, niby z pozoru banalny błąd - ale trudny do wychwycenia biggrin.gif

zamień
  1. $sql_uo_a = "INSERT INTO " . $db_prefix . "users_online ('username' ,'time') VALUES ('" . $_SESSION['username'] . "', '$time_now_uo')";

na to:
  1. $sql_uo_a = "INSERT INTO " . $db_prefix . "users_online (`username` ,`time`) VALUES ('" . $_SESSION['username'] . "', '$time_now_uo')";


i będzie działać smile.gif

Ten post edytował altruista2 9.02.2010, 22:30:31


--------------------
Jeśli Ci pomogłem kliknij pomógł. W ten sposób temat zaświeci się na żółto i użytkownicy którzy pomagają nie będą musieli niepotrzebnie klikać. Dziękuję.

"Pomaganie"
Go to the top of the page
+Quote Post
parox
post
Post #17





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 8.12.2009

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


E, nie za bardzo wiem Co zmieniłeś poza tylko 4-ema ' na `.

Działa. Dzięki.
Go to the top of the page
+Quote Post
Fifi209
post
Post #18





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Tylko to zmienił, bo tylko to było problemem. Swoją drogą jeżeli nie dajesz nigdzie nazw pól w `` to konsekwentnie rób to do końca skryptu, jeżeli chcesz dawać to rób to wszędzie.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
parox
post
Post #19





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 8.12.2009

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


A jak ominę i dam np. (username, time) to zaszkodzi?
Go to the top of the page
+Quote Post
altruista2
post
Post #20





Grupa: Zarejestrowani
Postów: 127
Pomógł: 32
Dołączył: 8.02.2010

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


Nie. O ile nie masz spacji albo innych specjalnych znaków w nazwie kolumn/tabeli.

Jeśli mogę mieć prośbę do twórców tego forum to bardzo bym prosił zmienić czcionkę kodu php/sql itd. na monospace np. Courier Sans itp. Dziękuję smile.gif

Ten post edytował altruista2 10.02.2010, 00:24:18


--------------------
Jeśli Ci pomogłem kliknij pomógł. W ten sposób temat zaświeci się na żółto i użytkownicy którzy pomagają nie będą musieli niepotrzebnie klikać. Dziękuję.

"Pomaganie"
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 Aktualny czas: 22.08.2025 - 00:50