Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP]Problem przy zalogowanej osobie, Odświeżanie wyrzuca mnie do formularza logowania
andrzejlechniak
post 11.08.2019, 17:09:57
Post #1





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


Cześć,
Mam trochę nietypowy problem - chociaż nie wiem do końca, co jest NIE TAK - Coś nie działa.
Więc tak: serwis na pierwszy rzut oka działa OK - loguje się przez login i hasło..., chociaż nie rozpoznaje RÓL, reszta danych zapisanych w sesji działa, wyświetlając potrzebne dane.
ALE: gdy chcę odświeżyć stronę [np. przez F5 lub Enter w pasku adresu] bądź przejść z innej strony na tą, gdzie są dane zalogowanej osoby, wywala mi Pustą stronę lub formularz logowania.

Oto mój kod - wiem, że jest jeszcze nie dopracowany, ale przedstawiam go w takim stanie w jakim go sam testuję:
  1. if(isset($_POST['Zaloguj']))
  2. {
  3. $login = $_POST['login'];
  4. $password = $_POST['password'];
  5.  
  6. $logowanie = "SELECT * FROM logowanie WHERE login='$login' and password='$password'";
  7. $result = mysqli_query($link,$logowanie);
  8. if($result)
  9. {
  10. $count = mysqli_num_rows($result);
  11. if($count==1)
  12. {
  13. $_SESSION['zalogowany'] = 'tak';
  14. $_SESSION['login'] = $login;
  15. $_SESSION['role'] = $role;
  16.  
  17. ////Rola użytkownika
  18. if($role == 0)
  19. {
  20. echo '<div>Udało się zalogować jako User | ZALOGOWANY: '.$_SESSION['login'].' <a href="logowanie.php?wyloguj='.$_SESSION['login'].'">Wyloguj</a></div>';
  21.  
  22. $results = mysqli_query($link,"SELECT * FROM logowanie");
  23. while($row = mysqli_fetch_array($results))
  24. {
  25. echo '<p>'.$row['login'].' - <a href="#">Edytuj dane</a></p>';
  26. }
  27. }
  28.  
  29. ////Rola administratora
  30. else if($role == 1)
  31. {
  32. echo '<div>Udało się zalogować jako Admin | ZALOGOWANY: '.$_SESSION['login'].' <a href="logowanie.php?wyloguj='.$_SESSION['login'].'">Wyloguj</a></div>';
  33.  
  34. $results = mysqli_query($link,"SELECT * FROM logowanie");
  35. while($row = mysqli_fetch_array($results))
  36. {
  37. echo '<p>'.$row['login'].' - <a href="#">Usuń użytkownika</a></p>';
  38. }
  39. }
  40. }
  41. else
  42. {
  43. echo '<p>Nie udało się zalogować. Wróć do <a href="index.php">STRONY GŁÓWNEJ</a> aby się zalogować.</p>';
  44. }
  45. }
  46. else
  47. {
  48. echo '<p>Błąd logowania poziom.</p>';
  49. }
  50. }


Prośba o pomoc. A

Ten post edytował andrzejlechniak 11.08.2019, 17:36:20
Go to the top of the page
+Quote Post
Tomplus
post 12.08.2019, 04:26:54
Post #2





Grupa: Zarejestrowani
Postów: 1 831
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


Druknij sobie:
  1. print_r($_SESSION);
Go to the top of the page
+Quote Post
dublinka
post 12.08.2019, 06:23:49
Post #3





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Jesli masz dwie opcje 1 i 0 to musisz je przypisac do sesji w zaleznosci kto sie loguje. Czyli pobierasz dane z bazy (rozumiem ze $role trzymasz w bazie?)
  1. if($row['role']==0)
  2. {
  3. ustaw sesje dla usera
  4. }elseif($row['role']==1)
  5. {
  6. //Ustaw sesje dla admina
  7. }else{
  8. //Tutaj mozesz dac echo ze wystapil blad badz od razu headera do ponownego zalogowania.
  9. Jesli header to mozesz przed nim ustawic jakas sesje np $_SESSION['err_role'] = 'Blad 2356';
  10. i tylko ty wiesz co to za blad a on sam ma sie wyswietlic przy formularzu jak juz przekierujesz.
  11. }
  12.  
  13. Teraz sprawdzasz warunkami co siedzi w sesji 'role' i wyswietlasz.


--------------------
Go to the top of the page
+Quote Post
andrzejlechniak
post 12.08.2019, 07:17:54
Post #4





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


Zrobiłem jak poradziliście mi.
Nadal myli mi role - rzeczy dla admina wyświetla jak dla usera. Dla usera też jak dla usera.

  1. print_r($_SESSION);
  2. $count = mysqli_num_rows($result);
  3. if($count==1)
  4. {
  5. $_SESSION['zalogowany'] = 'tak';
  6. $_SESSION['login'] = $login;
  7.  
  8. //<div>Udało się zalogować jako User | ZALOGOWANY: '.$_SESSION['login'].' <a href="logowanie.php?wyloguj='.$_SESSION['login'].'">Wyloguj</a></div>
  9.  
  10. if($row['role']==0)
  11. {
  12. echo 'Sesja dla usera';
  13. echo 'Edycja';
  14. echo '<br /><br />ZALOGOWANY: '.$_SESSION['login'].' <a href="logowanie.php?wyloguj='.$_SESSION['login'].'">Wyloguj</a><br />';
  15. }
  16. else if($row['role']==1)
  17. {
  18. echo 'Sesja dla admina';
  19. echo 'Usuń';
  20. echo '<br /><br />ZALOGOWANY: '.$_SESSION['login'].' <a href="logowanie.php?wyloguj='.$_SESSION['login'].'">Wyloguj</a><br />';
  21. }
  22. else
  23. {
  24. echo 'Błąd';
  25. }
  26.  
  27. }


W mojej bazie danych mam ustawione 0 dla usera i 1 dla admina. I wciąż mi w skrypcie myli.
Go to the top of the page
+Quote Post
dublinka
post 12.08.2019, 07:23:44
Post #5





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Jaka nazwe w bazie ma kolumna na role


--------------------
Go to the top of the page
+Quote Post
andrzejlechniak
post 12.08.2019, 07:30:36
Post #6





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


mam tabele logowanie, w niej tabela role (tinyINT).
Go to the top of the page
+Quote Post
dublinka
post 12.08.2019, 07:33:17
Post #7





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Cytat(andrzejlechniak @ 12.08.2019, 07:30:36 ) *
mam tabele logowanie, w niej tabela role (tinyINT).

Chodzi mi o nazwe kolumny gdzie sa 1 lub 0.
Nie nazwa tabeli
Edit
Ok rozumiem ze to jest nazwa 'role'

Ten post edytował dublinka 12.08.2019, 07:34:19


--------------------
Go to the top of the page
+Quote Post
andrzejlechniak
post 12.08.2019, 07:43:24
Post #8





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


TAK
Go to the top of the page
+Quote Post
viking
post 12.08.2019, 07:49:10
Post #9





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Podajesz coś takiego:
  1. $_SESSION['role'] = $role;

Skąd w tym kodzie bierze się zmienna $role?


--------------------
Go to the top of the page
+Quote Post
dublinka
post 12.08.2019, 07:49:52
Post #10





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Rejestrowac sesje masz w konkretnych warunkach.
If($row['role']==0)
{
$_SESSSION['rola'] = $row['role'];
}
elseif(...)
)else{
...
}
Teraz warunek do odczytu
If($_SESSSION['rola'] == 0)
{
echo 'zalogowany jako: admin';
}
If($_SESSSION['rola'] == 1)
{
echo 'zalogowany jako: USER';
}

pisze z tel nie mam dostepu do kompa teraz jsk cos to potem dpowiem


--------------------
Go to the top of the page
+Quote Post
dwadolary
post 12.08.2019, 07:55:31
Post #11





Grupa: Zarejestrowani
Postów: 7
Pomógł: 2
Dołączył: 5.08.2019

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


Brak deklaracji $role. Natomiast $row['role'] możesz użyć dopiero w pętli while



Ten post edytował nospor 3.01.2024, 16:06:39
Go to the top of the page
+Quote Post
dublinka
post 12.08.2019, 08:09:26
Post #12





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Cytat(dwadolary @ 12.08.2019, 07:55:31 ) *
Brak deklaracji $role. Natomiast $row['role']

$role z kosmosu sie wzielo ale jiz to pomijam.
Jesli chodzi o tablice $row to domyslam sie ze autor o tym wie. Mam nadzieje.


--------------------
Go to the top of the page
+Quote Post
andrzejlechniak
post 12.08.2019, 08:29:12
Post #13





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


Czy zatem zmienna $role powinna być zadeklarowana w sesji [w strefie zastrzeżonej] czy przy przekazywaniu przez formularz logowania?
Go to the top of the page
+Quote Post
dublinka
post 12.08.2019, 08:34:24
Post #14





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Cytat(andrzejlechniak @ 12.08.2019, 08:29:12 ) *
Czy zatem zmienna $role powinna być zadeklarowana w sesji [w strefie zastrzeżonej] czy przy przekazywaniu przez formularz logowania?

Najpierw trzeba sobie zadac pytnaie czym jest ta zmienna bo Ty ja tam przypisujesz ale brak jest deklaracji (nie ma wartosci)


--------------------
Go to the top of the page
+Quote Post
viking
post 12.08.2019, 08:36:27
Post #15





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Rola powinna być odczytana z bazy i po poprawnym potwierdzeniu użytkownika dopisana do sesji. Dobrze jest stosowac enumeratory do takich rzeczy wtedy się nie zastanawiasz czy 0 to gość czy coś innego. Kolejna rzecz to dlaczego trzymasz hasło jako tekst? password_hash i password_verify.


--------------------
Go to the top of the page
+Quote Post
andrzejlechniak
post 12.08.2019, 08:54:16
Post #16





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


Dobra.
1. Przesyłam przez formularz dane: login i hasło.
2. Odbieram dane --> jeśli są wpisane i zgodne, przechodzę do strefy dla zalogowanych. Tutaj w sesji przekazuję login i hasło. Jeśli przekazywane dane są złe, dostaję błąd.
3. Wszystkie dane są zapisane w bazie danych. Przy logowaniu pobieram dane: login i hasło. I gdzieś tu się gubię, bo nie wiem jak wyciągnąć role z bazy danych, tak aby JUŻ logując się użytkownik miał dostęp TYLKO do części portalu: dla Usera - np. edytuj dane; dla Admina - np. usunięcie Usera. Role mają dwie wartości: 0 [dla Usera] i 1 [dla Admina].
4. Gdzie przypisać dane - czy w formularzu przy logowaniu czy w miejscu, gdzie w sesji przekazuję dane z bazy -->
  1. if($count==1)
  2. {
  3. $_SESSION['zalogowany'] = 'tak';
  4. $_SESSION['login'] = $login;
  5.  
  6. //<div>Udało się zalogować jako User | ZALOGOWANY: '.$_SESSION['login'].' <a href="logowanie.php?wyloguj='.$_SESSION['login'].'">Wyloguj</a></div>
  7. }
Go to the top of the page
+Quote Post
dublinka
post 12.08.2019, 09:45:47
Post #17





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Przeciez juz napisalem wczesniej.

Odczytujesz dane i w konkretnych miejscach rejestrujesz sesje

Na razie jestem poza domem. Wroce to cos napisze. Bede za okolo 2-3h


--------------------
Go to the top of the page
+Quote Post
viking
post 12.08.2019, 10:09:47
Post #18





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


2. Tutaj w sesji przekazuję login i hasło. - Po co chcesz zapisywać hasło w sesji? Nie jest do niczego potrzebne po zalogowaniu.
3. W jakiej postaci masz te role? relacja do innej tabeli czy samo pole roli?

  1. if(isset($_POST['Zaloguj']))
  2. {
  3. $login = mysqli_real_escape_string($link, $_POST['login']);
  4. $password = $_POST['password'];
  5.  
  6. $logowanie = "SELECT * FROM logowanie WHERE login='$login' LIMIT 1"; //pole login unikalne
  7. $result = mysqli_query($link,$logowanie);
  8. if($result)
  9. {
  10. $row = mysqli_fetch_assoc($result);
  11. if($row && password_verify($password, $row['password']))
  12. {
  13. $_SESSION['zalogowany'] = true;
  14. $_SESSION['login'] = $row['login'];
  15. $_SESSION['role'] = $row['role'];
  16. $_SESSION['id'] = $row['id']; //dodatkowo id żeby np łatwiej wybierać później z bazy
  17.  
  18. echo '<div>Udało się zalogować jako '. ($_SESSION['role'] == 1) ? 'Admin' : 'User') .'| ZALOGOWANY: '.$_SESSION['login'].' <a href="logowanie.php?wyloguj='.$_SESSION['login'].'">Wyloguj</a></div>'; //po co przekazujesz login do wyloguj? Wyloguj powinien zniszczysz bieżącą sesję.
  19.  
  20. $results = mysqli_query($link,"SELECT * FROM logowanie");
  21. while($row = mysqli_fetch_array($results))
  22. {
  23. echo '<p>'.$row['login'].' - <a href="#">Edytuj dane</a></p>';
  24. if ($_SESSION['role'] == 1 && ($row['id'] != $_SESSION['id'])) { // nie chcemy skasować własnego konta admina
  25. echo '<p>'.$row['login'].' - <a href="#">Usuń użytkownika</a></p>';
  26. }
  27.  
  28. }
  29. }
  30. else
  31. {
  32. echo '<p>Nie udało się zalogować. Wróć do <a href="index.php">STRONY GŁÓWNEJ</a> aby się zalogować.</p>';
  33. }
  34. }
  35. else
  36. {
  37. echo '<p>Błąd logowania poziom.</p>';
  38. }
  39. }
  40.  


Jakoś tak.

Ten post edytował viking 12.08.2019, 10:22:14


--------------------
Go to the top of the page
+Quote Post
andrzejlechniak
post 12.08.2019, 12:00:40
Post #19





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


Sprawdzam, sprawdzam i niestety nie działa. To znaczy - przekierowuj mnie od razu na błąd logowania.
I jest błąd w literówce:

  1. ($_SESSION['role'] == 1) ? 'Admin' : 'User')
--> brakuje nawiasu domykającego.

Sprawdzam jeszcze, więc może sam tu czegoś nie wychwytuję...

----------------------
Posprawdzałem jeszcze raz, pozmieniałem parę drobnostek i działa.

Pozostaje to, o czym de facto pisałem na początku - odświeżanie strony. Czy można ten skrypt jakoś zabezpieczyć, aby odświeżając stronę trafiać na zablokowaną część?

Ten post edytował andrzejlechniak 12.08.2019, 12:50:54
Go to the top of the page
+Quote Post
dublinka
post 12.08.2019, 14:42:01
Post #20





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Cytat(andrzejlechniak @ 12.08.2019, 12:00:40 ) *
Pozostaje to, o czym de facto pisałem na początku - odświeżanie strony. Czy można ten skrypt jakoś zabezpieczyć, aby odświeżając stronę trafiać na zablokowaną część?

Warunek.
Odpowiedni warunek w odpowiednim miejscu.

Ten post edytował dublinka 12.08.2019, 14:44:01


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 16.04.2024 - 18:15