Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Problem z logowaniem dla admina, pracownika i zwykłego usera
Forum PHP.pl > Forum > Przedszkole
artur2233
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. ?>
pianta_d
Witam

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

Pozdrawiam
artur2233
session_start(); zawarte jest w pliku config.php
Wszystko działa jak należy oprócz tego rozdzielenia użytkowników.
pianta_d
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
nospor
"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
pianta_d
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.
nospor
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
artur2233
Dzięki, działa. Brakowało w SELECTcie pobrania `user_role`.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.