Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Problem z sesją i uprawnieniami
chico2
post 23.11.2009, 21:01:11
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 19.11.2009
Skąd: Wolbrom

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


Po kilku intensywnych godzinach wertowania kartek i internetu udało mi się spłodzić taki skrypt logowania:
  1. <?php
  2.  
  3. if (isset($_POST['konto']) and isset($_POST['password']))
  4. {
  5. require ('db.php');
  6.  
  7. $konto = mysql_real_escape_string(trim($_POST['konto']));
  8. $password = mysql_real_escape_string(trim($_POST['password']));
  9.  
  10. if ($konto!="" and $password!="")
  11. {
  12. $password = sha1(md5($password));
  13. $request = "SELECT id FROM uzytkownicy WHERE login='$konto' and password='$password'";
  14. $temp = mysql_query($request) or die("Wyst?i?b?d");
  15. $ile = mysql_num_rows($temp);
  16. $temp = mysql_fetch_array($temp);
  17. $id = $temp['id'];
  18.  
  19.  
  20.  
  21.  
  22.  
  23. if($ile==1)
  24. {
  25. $_SESSION['user_id']=$id;
  26. $_SESSION['login']=$konto;
  27.  
  28. if($konto==admin){
  29. echo '<meta http-equiv="Refresh" content="1 url=admin.php" >';
  30. }
  31. else{
  32. {
  33. echo('zalogowany<br>za 3 sekundy zostaniesz przekierowany');
  34. /*
  35. if($wynik['uprawnienia']==1) {
  36. echo '<meta http-equiv="Refresh" content="1 url=admin.php" >';
  37.  
  38. } else {
  39. echo '<meta http-equiv="Refresh" content="1 url=index2.php" >';
  40. }
  41. */
  42. echo '<meta http-equiv="Refresh" content="1 url=index2.php" >';
  43.  
  44. }
  45. }}
  46. else echo('podales zle dane');
  47. }
  48. }
  49. ?>
  50.  


Działa całkiem przyzwoicie tylko, że zamiast if($konto=admin) chciałbym wprowadzić uprawnienia(0 dla usera 1 dla admina). Pole w tabeli już mam. Jakieś daremne próby dopisania tego są zakomentowane w powyższym kodzie. Domyślam się, że trzeba wysłać zapytanie do bazy, zapisać w tablicy i dopiero przyrównać do 1?

A teraz drugi problem. Jak się zaloguję jako jakiś user bądź admin to chciałbym aby chodząc po podstronach było zapamiętane, że jestem zalogowany(tablica $_SESSION?). Bo tak klikając na jakąś podstronę i znów wchodząc do panela usera muszę na nowo podawać dane. Jak zrobić aby być zalogowanym dopóki nie zostanie wybrana opcja "wyloguj"?

Dziś już kiepsko myślę ale mam nadzieję, że w miarę zrozumiale to napisałem. Proszę o słowa krytyki i pomocy co do moich wypocin winksmiley.jpg
Go to the top of the page
+Quote Post
Lion_87
post 23.11.2009, 21:43:14
Post #2





Grupa: Zarejestrowani
Postów: 850
Pomógł: 120
Dołączył: 15.02.2007
Skąd: Łódź

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


#1 Pobierasz z bazy dane usera >> kim jest i wtedy sprawdzasz
#2 Każda strona z session_start(), sprawdzasz czy jest.
Go to the top of the page
+Quote Post
chico2
post 23.11.2009, 22:03:57
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 19.11.2009
Skąd: Wolbrom

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


Cytat(Lion_87 @ 23.11.2009, 21:43:14 ) *
#1 Pobierasz z bazy dane usera >> kim jest i wtedy sprawdzasz


A jak by miało mniej więcej zapytanie wyglądać?

Cytat(Lion_87 @ 23.11.2009, 21:43:14 ) *
#2 Każda strona z session_start(), sprawdzasz czy jest.


Na początku każdej strony html mam:
  1. <?php
  2. ?>


I dalej po kliknięciu na inną podstronę i ponownie na podstronę z panelem użytkownika muszę podawać dane do logowania.. ;/ Na dziś już wystarczy będę się męczył jutro. Jakieś małe podpowiedzi do tego jak to zrobić?
Go to the top of the page
+Quote Post
Lion_87
post 23.11.2009, 22:09:12
Post #4





Grupa: Zarejestrowani
Postów: 850
Pomógł: 120
Dołączył: 15.02.2007
Skąd: Łódź

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


Cytat
Na początku każdej strony html mam:


heeee? a nie .php?

Cytat
A jak by miało mniej więcej zapytanie wyglądać?


Tak jak masz tyle że dodatkowo pobierz kim jest i zapisz do sesji czy cu...
Go to the top of the page
+Quote Post
cojack
post 24.11.2009, 00:37:34
Post #5





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

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


Jak nie wiesz do czego służy ob_start() to po co używasz? Tutaj w ogóle Ci nie jest potrzebne.

Jeżeli masz już pole w tabeli kim jest user, to w najprostrzy sposób sprawdzasz:

  1. SELECT * FROM tabela WHERE user = $_SESSION['user_id'];


i sprawdzasz jaki ma dostęp do danej strony, czy 0 czy 1 i masz autoryzację winksmiley.jpg


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
chico2
post 24.11.2009, 06:47:52
Post #6





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 19.11.2009
Skąd: Wolbrom

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


To mam pozmieniać rozszerzenia na php żeby to zadziałało?(sesje)
Go to the top of the page
+Quote Post
Blame
post 24.11.2009, 14:14:02
Post #7





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Tak. Każdemu plikowi w którym jest skrypt musisz dać .php. dodatkowo kod php musisz zawrzeć w <? i ?>.


--------------------
Go to the top of the page
+Quote Post
chico2
post 24.11.2009, 19:08:01
Post #8





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 19.11.2009
Skąd: Wolbrom

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


Z sesjami jakoś poszło. Ciągle niestety mam problem z tymi uprawnieniami. Wszystko wygląda teraz tak:

  1. <?php
  2.  
  3. if (isset($_POST['konto']) and isset($_POST['password']))
  4. {
  5. require ('db.php');
  6.  
  7. $konto = mysql_real_escape_string(trim($_POST['konto']));
  8. $password = mysql_real_escape_string(trim($_POST['password']));
  9.  
  10. if ($konto!="" and $password!="")
  11. {
  12. $password = sha1(md5($password));
  13. $request = "SELECT id FROM uzytkownicy WHERE login='$konto' and password='$password'";
  14. $temp = mysql_query($request) or die("Wyst?i?b?d");
  15. $ile = mysql_num_rows($temp);
  16. $temp = mysql_fetch_array($temp);
  17. $id = $temp['id'];
  18.  
  19. if($ile==1)
  20. {
  21. $_SESSION['user_id']=$id;
  22. $_SESSION['login']=$konto;
  23.  
  24.  
  25. $zap2="SELECT * FROM uzytkownicy WHERE uprawnienia = '$_SESSION['upr']'";
  26. $temp2 = mysql_query($request) or die("Wyst?i?b?d");
  27. $temp2 = mysql_fetch_array($temp2);
  28. $upr = $temp['upr'];
  29. if($upr==1){
  30. echo '<meta http-equiv="Refresh" content="1 url=admin.php" >';
  31. }
  32. else{
  33. echo '<meta http-equiv="Refresh" content="1 url=index2.php" >';
  34. }
  35.  
  36.  
  37.  
  38.  
  39. {
  40. echo('zalogowany<br>za 3 sekundy zostaniesz przekierowany');
  41.  
  42.  
  43. echo '<meta http-equiv="Refresh" content="1 url=index2.php" >';
  44.  
  45. }
  46. }
  47. else echo('podales zle dane');
  48. }
  49. }
  50. ?>


Czuję, że niepotrzebnie wszystko skomplikowałem. W tabeli uzytkownicy mam pole uprawnienia(int) i tam przy loginie admin - 1. W chwili obecnej mam błąd:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' w linii z moim zapytaniem(dlaczego mnie to nie dziwi..). A może zostawić to i zrobić jak było if($login=='admin') itd..
Go to the top of the page
+Quote Post
b4x
post 24.11.2009, 19:16:04
Post #9





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


  1. $request = "SELECT id FROM uzytkownicy WHERE login='$konto' and password='$password'";


zamień na:

  1. $request = 'SELECT `id` FROM `uzytkownicy` WHERE `login` = "'.$konto.'" AND `password` = "'.$password.'"';



i

  1. $zap2="SELECT * FROM uzytkownicy WHERE uprawnienia = '$_SESSION['upr']'";


na

  1. $zap2 = 'SELECT * FROM `uzytkownicy` WHERE `uprawnienia` = "'.$_SESSION['upr'].'"';



#edit.
Ooo 500 post :-)

Ten post edytował b4x 24.11.2009, 19:18:19


--------------------
Go to the top of the page
+Quote Post
chico2
post 24.11.2009, 19:32:41
Post #10





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 19.11.2009
Skąd: Wolbrom

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


Niestety:
Notice: Undefined index: upr in C:\Program Files\EasyPHP 3.0\www\biblioteka3\logowanie3.php on line 27

Notice: Undefined index: upr in C:\Program Files\EasyPHP 3.0\www\biblioteka3\logowanie3.php on line 31

Po czym i tak przekierowuje na index2.php(plik usera) a nie na admin.php

Tak wygląda końcówka:
  1. $zap2 = 'SELECT * FROM `uzytkownicy` WHERE `uprawnienia` = "'.$_SESSION['upr'].'"';
  2. //$zap2="SELECT * FROM uzytkownicy WHERE uprawnienia = '$_SESSION['upr']'";
  3. $temp2 = mysql_query($zap2) or die("Wyst?i?b?d");
  4. $temp2 = mysql_fetch_array($temp2);
  5. $upr = $temp['upr'];
  6. if($upr==1){
  7. echo '<meta http-equiv="Refresh" content="6 url=admin.php" >';
  8. }
  9. else{
  10. echo '<meta http-equiv="Refresh" content="6 url=index2.php" >';
  11. }
  12.  
  13.  
  14.  
  15. /*
  16. {
  17. echo('zalogowany<br>za 3 sekundy zostaniesz przekierowany');
  18.  
  19.  
  20.  echo '<meta http-equiv="Refresh" content="4 url=index2.php" >';
  21.  
  22. }*/
  23. }
  24. else echo('podales zle dane');
  25. }
  26. }
  27. ?>


Ten post edytował chico2 24.11.2009, 19:35:32
Go to the top of the page
+Quote Post
b4x
post 24.11.2009, 20:01:15
Post #11





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Czyli nie ustawiasz $_SESSION['upr'] - nigdzie, tzn. nie jest zdefiniowane.


--------------------
Go to the top of the page
+Quote Post
chico2
post 24.11.2009, 20:31:01
Post #12





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 19.11.2009
Skąd: Wolbrom

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


  1. <?php
  2.  
  3. if (isset($_POST['konto']) and isset($_POST['password']))
  4. {
  5. require ('db.php');
  6.  
  7. $konto = mysql_real_escape_string(trim($_POST['konto']));
  8. $password = mysql_real_escape_string(trim($_POST['password']));
  9.  
  10. if ($konto!="" and $password!="")
  11. {
  12. $password = sha1(md5($password));
  13. //$request = "SELECT id FROM uzytkownicy WHERE login='$konto' and password='$password'";
  14. $request = 'SELECT `id` FROM `uzytkownicy` WHERE `login` = "'.$konto.'" AND `password` = "'.$password.'"';
  15. $temp = mysql_query($request) or die("Wyst?i?b?d");
  16. $ile = mysql_num_rows($temp);
  17. $temp = mysql_fetch_array($temp);
  18. $id = $temp['id'];
  19.  
  20. if($ile==1)
  21. {
  22. $_SESSION['user_id']=$id;
  23. $_SESSION['login']=$konto;
  24. $_SESSION['upr']='';
  25.  
  26.  
  27.  
  28. $zap2 = 'SELECT * FROM `uzytkownicy` WHERE `uprawnienia` = "'.$_SESSION['upr'].'"';
  29. //$zap2="SELECT * FROM uzytkownicy WHERE uprawnienia = '$_SESSION['upr']'";
  30. $temp2 = mysql_query($zap2) or die("Wyst?i?b?d");
  31. $temp2 = mysql_fetch_array($temp2);
  32. //$upr = $temp['upr'];
  33. if($_SESSION['upr']=='1'){
  34. echo '<meta http-equiv="Refresh" content="6 url=admin.php" >';
  35. echo ('user admin');
  36. }
  37. else{
  38. echo '<meta http-equiv="Refresh" content="6 url=index2.php" >';
  39. echo ('user user');
  40. }
  41. }
  42. else echo('podales zle dane');
  43. }
  44. }
  45. ?>


Teraz wygląda to tak. Nie ma żadnych błędów ale przekierowuje niezależnie od podanych danych na index2.php

Ten post edytował chico2 24.11.2009, 20:31:45
Go to the top of the page
+Quote Post
Blame
post 24.11.2009, 20:39:02
Post #13





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Tu masz błąd.
  1. $_SESSION['upr']='';


  1. if($_SESSION['upr']=='1'){


Ten post edytował Blame 24.11.2009, 20:39:26


--------------------
Go to the top of the page
+Quote Post
chico2
post 24.11.2009, 21:52:36
Post #14





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 19.11.2009
Skąd: Wolbrom

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


Cytat(Blame @ 24.11.2009, 20:39:02 ) *
Tu masz błąd.
  1. $_SESSION['upr']='';


A to to już sam nie wiem ; /

Cytat(Blame @ 24.11.2009, 20:39:02 ) *
  1. if($_SESSION['upr']=='1'){


Ma być:
  1. if($_SESSION['upr']==1){
?
Go to the top of the page
+Quote Post
b4x
post 24.11.2009, 23:48:24
Post #15





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Spróbowałem być "jasnowidzem", z tego co zrozumiałem - w bazie masz użytkowników, adminowi w bazie w tabeli uprawnienia dajesz 1.
Więc jeśli tak jest, poprawiłem trochę Twój skrypt.

Zobacz to :-)

  1. <?php
  2.  
  3. if (isset($_POST['konto']) and isset($_POST['password']))
  4. {
  5. require ('db.php');
  6.  
  7. $konto = mysql_real_escape_string(trim($_POST['konto']));
  8. $password = mysql_real_escape_string(trim($_POST['password']));
  9.  
  10. if ($konto !="" AND $password!="")
  11. {
  12. $password = sha1(md5($password));
  13. $request = 'SELECT `id`, `uprawnienia` FROM `uzytkownicy` WHERE `login` = "'.$konto.'" AND `password` = "'.$password.'"';
  14. $temp = mysql_query($request) or die("Wystąpił błąd");
  15.  
  16. $ile = mysql_num_rows($temp);
  17. $temp = mysql_fetch_array($temp);
  18.  
  19. $id = $temp['id'];
  20. $uprawnienia = $temp['uprawnienia'];
  21.  
  22. if($ile==1)
  23. {
  24. $_SESSION['user_id'] = $id;
  25. $_SESSION['login'] = $konto;
  26. $_SESSION['upr'] = $uprawnienia;
  27.  
  28. if($_SESSION['upr'] == '1')
  29. {
  30. echo '<meta http-equiv="Refresh" content="6 url=admin.php" >';
  31. echo ('user admin');
  32. }
  33. else
  34. {
  35. echo '<meta http-equiv="Refresh" content="6 url=index2.php" >';
  36. echo ('user user');
  37. }
  38. }
  39.  
  40. else echo('podales zle dane');
  41.  
  42. }
  43. }
  44. ?>


--------------------
Go to the top of the page
+Quote Post
chico2
post 25.11.2009, 06:41:27
Post #16





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 19.11.2009
Skąd: Wolbrom

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


Dokładnie tak mam. Dzięki za naniesione poprawki. Teraz przetestowałem skrypt i działa jak należy.

Pozdrawiam.
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:21