Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Problem z logowaniem dla admina, pracownika i zwykłego usera
artur2233
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 4.03.2012
Skąd: Kielce

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


Witam, jestem początkujący i uczę się PHP.
Potrzebuję zrobić logowanie dla różnych grup użytkowników. Używając szukajki znalazłem taki temat KLIK lecz nie pomógł mi za bardzo, bo wcześniej już miałem to zrobione.
W bazie mam kolumnę 'user_role' i tam nadane są numery określające grupę użytkownika. Jednak przy logowaniu jakby nie zczytuje roli użytkownika, nie potrafi tego rozdzielić. "User_role" jest typu int. Próbówałem varcharem, kombinowałem brać dane z tej kolumny w cudzysłów, apostrof. W zależności od wyboru logowało mnie gdzie indziej wciąż nie rozróżniając roli.
Mam nadzieję, że jasno opisałem swój problem.
Z góry dziękuję za wszelką pomoc i objaśnienia.

edit: 0 - dla zywkłego usera, 1 - dla pracownika, 2 - dla admina.
Jeśli ustawię wartość 0:
  1. if ($_SESSION['user_role']==0)
  2. {
  3. header('Location: userlist.php');
  4. } else { header('Location: index.php'); }

to loguje mnie do userlist.php, a każda inna wartość przenosi do index.php, niezależnie kto sięloguje. W bazie widzę, że role >0 są nadane.
Po id loguje poprawnie. Ale to wadzi, żeby zrobić logowanie dla trzech grup użytkowników.


  1. <?php
  2. include 'config.php';
  3. db_connect();
  4.  
  5. // sprawdzamy czy user nie jest przypadkiem zalogowany
  6. if(!$_SESSION['logged']) {
  7. // jeśli zostanie naciśnięty przycisk "Zaloguj"
  8. if(isset($_POST['name'])) {
  9. // filtrujemy dane...
  10. $_POST['name'] = clear($_POST['name']);
  11. $_POST['password'] = clear($_POST['password']);
  12. // i kodujemy hasło
  13. $_POST['password'] = codepass($_POST['password']);
  14.  
  15. // sprawdzamy prostym zapytaniem sql czy podane dane są prawidłowe
  16. $result = mysql_query("SELECT `user_id` FROM `users` WHERE `user_name` = '{$_POST['name']}' AND `user_password` = '{$_POST['password']}' LIMIT 1");
  17. if(mysql_num_rows($result) > 0) {
  18. // jeśli tak to ustawiamy sesje "logged" na true oraz do sesji "user_id" wstawiamy id usera
  19. $row = mysql_fetch_assoc($result);
  20. $_SESSION['logged'] = true;
  21. $_SESSION['user_id'] = $row['user_id'];
  22. $_SESSION['user_role'] = $row['user_role'];
  23.  
  24.  
  25. if ($_SESSION['user_role']==2) //admin
  26. {
  27. header('Location: userlist.php');
  28. } else { header('Location: index.php'); }
  29.  
  30. } else {
  31. echo '<p>Podany login i/lub hasło jest nieprawidłowe.</p>';
  32. header("Refresh: 5; url=login.php");
  33. }
  34. } else {
  35. $_POST['name'] = '';
  36. $_POST['password'] = '';
  37. $_POST['user_role'] = '';
  38. }
  39.  
  40. // wyświetlamy komunikat na zalogowanie się
  41.  
  42. echo '<form method="post" action="login.php">
  43. <p>
  44. Login:<br>
  45. <input type="text" value="'.$_POST['name'].'" name="name">
  46. </p>
  47. <p>
  48. Hasło:<br>
  49. <input type="password" value="'.$_POST['password'].'" name="password">
  50. </p>
  51. <p>
  52. <input type="submit" value="Zaloguj">
  53. </p>
  54. </form>';
  55.  
  56. } else {
  57. echo '<p>Jesteś już zalogowany, więc nie możesz się zalogować ponownie.</p>
  58. <p>[<a href="index.php">Powrót</a>]</p>';
  59. }
  60.  
  61.  
  62. db_close();
  63. ?>


Ten post edytował artur2233 18.12.2012, 20:25:43
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
pianta_d
post
Post #2





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

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


Witam

Standardowe zalecenia:
- na początku pliku wstaw session_start();
- sprawdź co przechowujesz w tablicy $_SESSION

Pozdrawiam
Go to the top of the page
+Quote Post
artur2233
post
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 4.03.2012
Skąd: Kielce

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


session_start(); zawarte jest w pliku config.php
Wszystko działa jak należy oprócz tego rozdzielenia użytkowników.
Go to the top of the page
+Quote Post
pianta_d
post
Post #4





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

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


Ja nie kombinowałem nigdy z umieszczaniem jednej linijki kodu w innym pliku niż ten, który aktualnie wykonuję.
Może spróbuj też tak zrobić - nic to Cię przecież nie kosztuje.

A co wyświetla tablica $_SESSION (po wstawieniu session_start do pliku ze skryptem) - wrzuć to na forum.

Dlaczego tak męczę? Wydaje mi się, że Twoim problemem są nieprawidłowe lub brak odpowiednich informacji w $_SESSION;

Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post
Post #5





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




"SELECT `user_id` FROM
w zapytaniu pobierasz tylko user_id a potem w kodzie ni stąd nie zowąd próbujesz pobrać inne pola z wiersza..... skoro chcesz pobrać coś innego, to i to coś innego też w zapytaniu masz pobrać, czyli
"SELECT `user_id`,`user_role` FROM

I włącz wyświetlanie wszystkich błędów to od razu byś zobaczył takie banały.

Cytat
Ja nie kombinowałem nigdy z umieszczaniem jednej linijki kodu w innym pliku niż ten, który aktualnie wykonuję.
To że Ty trzymasz się jakiejś dziwnej zasady nie znaczy że jak ktoś inny robi poprawnie ale inaczej niż Ty to że to jest źle


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

"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
pianta_d
post
Post #6





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

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


Cytat
To że Ty trzymasz się jakiejś dziwnej zasady nie znaczy że jak ktoś inny robi poprawnie ale inaczej niż Ty to że to jest źle

Nigdzie w moim poście nie stwierdzam, że tak jak robi @artur2233 jest źle, starałem się wykluczyć wszelkie błędy, które mogły powstać nie z winy artura.

@nospor - nie będę z tobą dyskutował, Ty tutaj jesteś guru i tyle.

Pozdrawiam i życzę Wesołych Świąt.
Go to the top of the page
+Quote Post
nospor
post
Post #7





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




Cytat
nie będę z tobą dyskutował, Ty tutaj jesteś guru i tyle.
Nie chodzi o to czy jestem guru czy nie. Chodzi o to, że karzesz użytkownikowi poprawiać jakąś rzecz tylko i wyłącznie dlatego że ty tak zawsze robisz i uważasz że może tu leżeć problem. Nie, tam problem nie leży. Sesję można startować w jednym pliku, który się potem includuje. To ci wyjaśniam i w żaden sposób nie "guruję" ci tu


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

"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
artur2233
post
Post #8





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 4.03.2012
Skąd: Kielce

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


Dzięki, działa. Brakowało w SELECTcie pobrania `user_role`.
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: 21.08.2025 - 03:54