Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Problem z sesją i uprawnieniami
Forum PHP.pl > Forum > Przedszkole
chico2
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
Lion_87
#1 Pobierasz z bazy dane usera >> kim jest i wtedy sprawdzasz
#2 Każda strona z session_start(), sprawdzasz czy jest.
chico2
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ć?
Lion_87
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...
cojack
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
chico2
To mam pozmieniać rozszerzenia na php żeby to zadziałało?(sesje)
Blame
Tak. Każdemu plikowi w którym jest skrypt musisz dać .php. dodatkowo kod php musisz zawrzeć w <? i ?>.
chico2
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..
b4x
  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 :-)
chico2
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. ?>
b4x
Czyli nie ustawiasz $_SESSION['upr'] - nigdzie, tzn. nie jest zdefiniowane.
chico2
  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
Blame
Tu masz błąd.
  1. $_SESSION['upr']='';


  1. if($_SESSION['upr']=='1'){
chico2
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){
?
b4x
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. ?>
chico2
Dokładnie tak mam. Dzięki za naniesione poprawki. Teraz przetestowałem skrypt i działa jak należy.

Pozdrawiam.
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.