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: 231
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 447
Pomógł: 170
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: 200
Pomógł: 23
Dołączył: 22.02.2008

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: 231
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: 200
Pomógł: 23
Dołączył: 22.02.2008

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: 231
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: 200
Pomógł: 23
Dołączył: 22.02.2008

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: 231
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: 5 279
Pomógł: 889
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: 200
Pomógł: 23
Dołączył: 22.02.2008

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: 6
Pomógł: 2
Dołączył: 5.08.2019

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


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

--------------------
Znaczenie tatuaży

Ten post edytował dwadolary 12.08.2019, 08:00:50
Go to the top of the page
+Quote Post
dublinka
post 12.08.2019, 08:09:26
Post #12





Grupa: Zarejestrowani
Postów: 200
Pomógł: 23
Dołączył: 22.02.2008

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: 231
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: 200
Pomógł: 23
Dołączył: 22.02.2008

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: 5 279
Pomógł: 889
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: 231
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: 200
Pomógł: 23
Dołączył: 22.02.2008

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: 5 279
Pomógł: 889
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: 231
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: 200
Pomógł: 23
Dołączył: 22.02.2008

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: 20.08.2019 - 02:29