Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z sesją w PHP - Nie mogę się odnieść do id użytkownika
Baku12345
post
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 23.04.2011

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


Witam
Działanie mojego skryptu ma być proste, ma polegać na tym, że po zalogowaniu się danego użytkownika wyświetli mu się lista kursów ze statusami do których ma dostęp a do których nie.

Mam w bazie między innymi takie tabele jak:
- users (id, name, login, password) - tabela przechowuje dane użytkownika
- courses (id, lp, name, url, category_id) - tabela przechowuje kursy, linki do nich i id kategorii do jakiej należy dany kurs
- access_courses (id, id_user, id_course, status) - tabela przechowuje informacje który użytkownik ma dostęp do którego kursu i wyświetla odpowiedni status

To mi działa w połączeniu z kodem, który sobie napisałem, ale problem jest w linii 75. Dokładnie w zapytaniu
  1. SELECT * FROM courses c, access_courses ac WHERE ac.id_user = $_SESSION['id'] && ac.id_course = c.id ORDER BY lp ASC

Jeżeli to wstawię to jest problem, natomiast jeżeli wstawię na sztywno id użytkownika np. tak
  1. SELECT * FROM courses c, access_courses ac WHERE ac.id_user = 1 && ac.id_course = c.id ORDER BY lp ASC

to wszystko jest idealnie. Jednak tak jak wspomniałem będzie więcej użytkowników i id chcę pobierać z sesji.

Poniżej umieszczam swój fragment kodu. Proszę o przeanalizowanie go i podpowiedź jak to naprawić.


  1. <?php
  2. .
  3. . // tu nieistotny fragment kodu
  4. .
  5. if (isset($_POST['login']) && isset($_POST['password']))
  6. {
  7. if (!empty($_POST['login']) && !empty($_POST['password']))
  8. {
  9. $login = addslashes(strip_tags($_POST['login']));
  10. $password = addslashes(strip_tags(md5($_POST['password'])));
  11.  
  12. $stmt = $pdo->prepare("SELECT * FROM users where login = '".$login."' && password = '".$password."';");
  13. $stmt->execute();
  14.  
  15. if ($row = $stmt->fetchAll(PDO::FETCH_ASSOC))
  16. {
  17. $_SESSION['id'] = $row['id'];
  18. $_SESSION['online'] = 1;
  19. $_SESSION['time'] = time();
  20. $_SESSION['user'] = $login;
  21. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  22. }
  23. else
  24. {
  25. $logon = new cTemplate;
  26.  
  27. $logon->assign['msg'] = "podałeś błędny login lub hasło!<br>spróbuj ponownie";
  28. $page->assign['container'] = $logon->parse("templates/logon.html");
  29. $page->assign['title'] = "Logowanie";
  30. $main->assign['page'] = $page->parse("templates/page.html");
  31. echo $main->parse("templates/index.html");
  32. }
  33. }
  34. else
  35. {
  36. $logon = new cTemplate;
  37.  
  38. $logon->assign['msg'] = "nie wprowadziłeś wszystkich danych<br>spróbuj ponownie";
  39. $page->assign['container'] = $logon->parse("templates/logon.html");
  40. $page->assign['title'] = "Logowanie";
  41. $main->assign['page'] = $page->parse("templates/page.html");
  42. echo $main->parse("templates/index.html");
  43. }
  44. }
  45.  
  46. if (isset($_SESSION['online']) && isset($_SESSION['time']) && $_SESSION['user'] && ($_SESSION['online']===1))
  47. {
  48. if (time()-$_SESSION['time'] < 900)
  49. {
  50. $_SESSION['time'] = time();
  51.  
  52. if (!isset($_GET['action']))
  53. {
  54. $_GET['action'] = "";
  55. }
  56.  
  57. .
  58. . // tu nieistotny fragment kodu
  59. .
  60.  
  61. switch ($_GET['action'])
  62. {
  63. default:
  64. if (isset($_GET['cat_id']))
  65. {
  66. $cat_id = $_GET['cat_id'];
  67.  
  68. $stmt = $pdo->prepare("SELECT * FROM courses c, access_courses ac WHERE ac.id_user = 1 && ac.id_course = c.id && c.category_id = $cat_id ORDER BY lp ASC");
  69. $stmt->execute();
  70. }
  71. else
  72. {
  73. $stmt = $pdo->prepare("SELECT * FROM courses c, access_courses ac WHERE ac.id_user = $_SESSION['id'] && ac.id_course = c.id ORDER BY lp ASC");
  74. $stmt->execute();
  75. }
  76.  
  77. .
  78. . // tu fragment wyświetlający listę kursów dostępnych dla danego użytkownika
  79. .
  80. }
  81.  
  82. $page->assign['container'] = $panel->parse("templates/panel.html");
  83. }
  84. else
  85. {
  86. $logon = new cTemplate;
  87.  
  88. $logon->assign['msg'] = "przekroczono czas bezczynności<br>zaloguj się ponownie";
  89. $page->assign['container'] = $logon->parse("templates/logon.html");
  90. $page->assign['title'] = "Logowanie";
  91. }
  92. }
  93. else
  94. {
  95. $logon = new cTemplate;
  96.  
  97. $logon->assign['msg'] = "<br>podaj login i hasło<br>";
  98. $page->assign['container'] = $logon->parse("templates/logon.html");
  99. $page->assign['title'] = "Witaj na portalu";
  100. }
  101.  
  102. $main->assign['page'] = $page->parse("templates/page.html");
  103.  
  104. echo $main->parse("templates/index.html");
  105. ?>


Wydaje mi się że problem może być z tym że sesja nie jest globalna, ale może się mylę. Proszę o pomoc.
Z góry bardzo dziękuję.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Baku12345
post
Post #2





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 23.04.2011

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


Dziękuję Wam wszystkim za odpowiedzi, wcześniej nie miałem czasu odpisać. Udało mi się wreszcie poprawić ten kod, głównie dzięki zmianom wprowadzonym na podstawie skryptu daro0. Nie była to wina średnika na końcu zapytania, jak sugerował Star, choć faktycznie był zbędny (IMG:style_emoticons/default/smile.gif)

Co do tego co zwracał var_dump($row) to zwracał wszystko co trzeba było czyli

  1. Notice: Undefined index: id in C:\Xampp\htdocs\www\test\index.php on line 23
  2.  
  3. Notice: Undefined index: name in C:\Xampp\htdocs\www\test\index.php on line 25
  4. array(1) { [0]=> array(4) { ["id"]=> string(1) "1" ["name"]=> string(12) "Użytkownik1" ["login"]=> string(7) "Testowy" ["password"]=> string(32) "f86bdb19deb2c5ab632734b8d884ce06" } }


no może bez tego notice tego nie trzeba było (IMG:style_emoticons/default/smile.gif) Dlatego się dziwiłem, bo w tablicy id i name było a warunek nie był spełniony co skutkowało tym, że nie można się było zalogować i żeby zobaczyć co wyświetla var_dump to musiałem zmienić
  1. isset($_SESSION['id'])
na
  1. !isset($_SESSION['id'])
i się okazywało, że jednak id przyszło (IMG:style_emoticons/default/smile.gif)

Ogólnie to mógłbym już dać wszystkim pomógł i można by zamknąć temat, ale dalej nie wiem co było przyczyną tych problemów w tamtej wersji mojego uproszczonego kodu. Czy mógłby mi ktoś wyjaśnić?

Stara wersja zawierała
  1. if ($row = $stmt->fetchAll(PDO::FETCH_ASSOC))
  2. {
  3. $_SESSION['id'] = $row['id'];
  4. $_SESSION['time'] = time();
  5. $_SESSION['user'] = $row['name'];
  6. }

oraz
  1. if (isset($_SESSION['id']) && isset($_SESSION['time']) && isset($_SESSION['name']))
  2. {
  3. if (time()-$_SESSION['time'] < 900)
  4. {
  5. $_SESSION['time'] = time();
  6. var_dump($row);
  7. }
  8. }


Nowa wersja zawiera
  1. $sessionauth = "";

oraz
  1.  
  2. if ($row = $stmt->fetch(PDO::FETCH_ASSOC))
  3. {
  4. $x = array('id' => $row['id'], 'time' => time(), 'user' => $row['name']);
  5.  
  6. $_SESSION[$sessionauth] = $x;
  7. }

i to
  1. if (isset($_SESSION[$sessionauth]) && !empty($_SESSION[$sessionauth]))
  2. {
  3. if (time()-$_SESSION[$sessionauth]['time'] < 900)
  4. {
  5. $_SESSION[$sessionauth]['time'] = time();
  6. var_dump($row);
  7. }
  8. else
  9. {
  10. echo "Przekroczono czas bezczynności";
  11. }
  12. }


I to działa. W czym więc był problem??

Ten post edytował Baku12345 22.09.2016, 06:58:18
Go to the top of the page
+Quote Post

Posty w temacie
- Baku12345   Problem z sesją w PHP - Nie mogę się odnieść do id użytkownika   20.09.2016, 06:12:41
- - viking   Twój kod w tym miejscu: [PHP] pobierz, plaintext ...   20.09.2016, 06:28:54
- - Baku12345   Dzięki za sugestię dotyczącą tego logowania, poczy...   20.09.2016, 20:20:07
- - viking   var_dump($_SESSION['id']);   20.09.2016, 20:28:49
- - kpt_lucek   Głupie pytanie... A dajesz: [PHP] pobierz, plaint...   20.09.2016, 20:56:02
- - Baku12345   Tak session_start daję Skróciłem jeszcze bardzie...   20.09.2016, 23:25:41
- - kpt_lucek   Zrób print_r/var_dump z $row = $stmt-...   20.09.2016, 23:47:03
- - Baku12345   Wprowadziłem chwilowo taki kod pomiędzy default a ...   21.09.2016, 04:10:24
- - Star   W jakim celu dajesz tutaj średnik? Nie mam na myśl...   21.09.2016, 05:29:27
- - viking   To teraz jeszcze var_dump($row). fetchAll zwr...   21.09.2016, 07:05:03
- - daro0   No rozpacz [PHP] pobierz, plaintext <?p...   21.09.2016, 09:20:32
- - kpt_lucek   Cytat(viking @ 21.09.2016, 08:05:03 )...   21.09.2016, 13:00:06
- - Baku12345   Dziękuję Wam wszystkim za odpowiedzi, wcześniej ni...   22.09.2016, 06:52:05
- - viking   Chyba czytasz co się do ciebie pisze? Cytatarray(...   22.09.2016, 07:09:18
- - Baku12345   A no faktycznie głupi błąd, powinienem był pobrać ...   22.09.2016, 21:50:17
- - daro0   No to sobie sprawdź co Ci wypluje hash_hmac, bez w...   23.09.2016, 06:55:09
- - Baku12345   To wiem, że zawsze po obrobieniu hasła, zmianie so...   23.09.2016, 20:37:53
- - daro0   No cóż, z tego co widać to nie takie proste... htt...   24.09.2016, 06:16:49


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: 15.10.2025 - 01:31