Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Logowanie z podziałem na uprawnienia - pomocy
piootras82
post 21.12.2010, 16:11:57
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 8.12.2010

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


Witam,
juz pare dni siedzę i nie mogę wykombinować w jaki sposób napisać skrypt, który bedzie przenosił na odpowiednią podstronę w zależności od tego jaką rangę ma dany użytkownik.

Mam 2 tabele

USERS
user_id
user_login
user_haslo
id_ranga

RANGA
id_ranga
ranga


W pierwszej tabeli przechowuje użytkowników, w drugiej uprawnienia.

Mam skrypt który łączy się z bazą i pobiera dane haslo i login po czym poprawnie loguje na stronę index.php
W jaki sposób sprawić by po zalogowaniu konkretnego użytkownika, została sprawdzona przypisana do niego ranga z drugiej tabeli a następnie w zależności od tego jaka to ranga przekierowało go automatycznie na odpowiednią podstronę, na której będzie widział tylko te funkcje do których ma uprawnienia.

Próbowałem zrobić to stosując funkcje IF ale po jej zapisaniu wyświetla się biała strona natomiast na sesjach nie wiem w jaki sposób przypisać rangę do sesji w zależności od tego kto jest zalogowany.
Przeszukałem forum, jednak nie znalazłem odpowiedniej pomocy.

kod index.php
Kod
$this_var = "

<?php
error_reporting(E_ALL);
ini_set('display_errors','1');


session_start();
session_register("zalogowany");


if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;

mysql_connect("localhost", "root", "608693")or die("Nie można nawiązać połączenia z bazą");
mysql_select_db("zokia")or die("Wystąpił błąd podczas wybierania bazy danych");

function ShowLogin($komunikat=""){
    echo "$komunikat<br>";
    echo "<form action='index.php' method=post>";
    echo "Login: <input type=text name=login><br>";
    echo "Hasło: <input type=text name=haslo><br>";
    echo "<input type=submit value='Zaloguj!'>";
    echo "</form>";
    echo "Jeśli nie jesteś zarejestrowany, <a href='rejestruj.php'>tu znajdziesz formularz</a>";
}

?>
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
    <title>Strona główna</title>
</head>
<body>
<?php
if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;echo "Zostałeś wylogowany z serwisu";}
if($_SESSION["zalogowany"]!=1){
    if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
        if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars($_POST["haslo"])."'"))){
            echo "Zalogowano poprawnie. <a href='index.php'>Przejdź na stronę główną</a>";
            $_SESSION["zalogowany"]=1;
            }
        else echo ShowLogin("Podano złe dane!!!");
        }
    else ShowLogin();
}
else{
?>
Gratulacje! Zalogowałeś się pomyślnie! Możesz przejśc teraz do innych podstron, np. do <a href="stronka.php">tej</a>
<br><a href='index.php?wyloguj=tak'>wyloguj się</a>
<?php
}
?>

</body>
</html>
<?php mysql_close(); ?>

";



kod rejestruj.php
Kod
$this_var = "
<?php
mysql_connect("localhost", "root", "608693")or die("Nie można nawiązać połączenia z bazą"); //połączenie z bazą danych
mysql_select_db("zokia")or die("Wystąpił błąd podczas wybierania bazy danych");

function ShowForm($komunikat=""){    //funkcja wyświetlająca formularz rejestracyjny
    echo "$komunikat<br>";
    echo "<form action='rejestruj.php' method=post>";
    echo "Login: <input type=text name=login><br>";
    echo "Hasło: <input type=text name=haslo><br>";
    echo "<input type=hidden value='1' name=send>";
    echo "<input type=submit value='Zarejestruj mnie'>";
    echo "</form>";
}
?>

<head>
    <title>Formularz rejestracyjny</title>
</head>
<body>
<?php
if($_POST["send"]==1){    //sprawdzanie czy formularz został wysłany
    if(!empty($_POST["login"]) && !empty($_POST["haslo"])){    //oraz czy uzupełniono wszystkie dane
        if(mysql_num_rows(mysql_query("select * from users where user_login='".htmlspecialchars($_POST["login"]."'"))))ShowForm("Użytkownik o podanym loginie już istnieje!!!"); // sprawdzanie czy użytkownik o podanej nazwie już istnieje
        else{
            mysql_query("insert into users values(NULL, '".htmlspecialchars($_POST["login"])."', '".htmlspecialchars($_POST["haslo"])."')"); // zapisywanie rekordu do bazy
            echo "Rejestracja przebiegła pomyślnie. Możesz teraz przejść do <a href='index.php'>strony głównej</a> i się zalogować.";
            }
    }
    else ShowForm("Nie uzupełniono wszystkich pól!!!");
}
else ShowForm();
mysql_close(); //zamykanie połączenia z bazą
?>
</body>
</html>

";


kod check.php
Kod
$this_var = "
<?php
session_start();
?>

<head>
    <title>podstrona</title>
</head>
<body>
<?php
if($_SESSION["zalogowany"]==0){echo "nie masz dostępu do tej części witryny. <a href='index.php'>Zaloguj się</a></body></html>;"; exit();}
?>
";




probowałem z taką funkcją IF

Kod
$this_var = "
if($ranga = 1)
    {
    <meta http-equiv="Refresh" content="3; url=admin.php" />
    }
    elseif ($ranga = 2)
    {
    <meta http-equiv="Refresh" content="3; url=owner.php" />
    }
    elseif ($ranga = 3)
    {
    <meta http-equiv="Refresh" content="3; url=user.php" />
    }
    elseif ($ranga = 4)
    {
    <meta http-equiv="Refresh" content="3; url=control.php" />
    }
    else
    {
    print("skontaktuj sie z administratorem");
    }
";
Go to the top of the page
+Quote Post
modern-web
post 21.12.2010, 16:21:15
Post #2





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Twój projekt jest prosty pomimo, że wydaje się skomplikowany i trudny do zaprogramowania.
Wskazówki:
1. rangi nie muszą być w oddzielnej tabeli - wystarczy, że znasz ich nazwy, wtedy relacje nie będą potrzebne. Tzn: rangi np. 1-5... Wtedy wystarczy każdemu z userów przypisać w kolumnie `ranga` wartość odpowiadająca danej randze...
2. wykorzystaj instrukcje warunkowe if i elseif - widzę, że już to zrobiłeś ale szczerze... nie mam dziś ochoty na wnikliwe przeglądanie wszystkich tych fragmentów kodu ;d
3. `RÓWNA SIĘ` W INSTRUKCJACH WARUNKOWYCH TO == A NIE = .
W związku z pkt. 3 fragment powinien wyglądać mniej więcej tak:

  1. if($ranga == "1") {
  2. <meta http-equiv="Refresh" content="3; url=admin.php" />
  3. } else if ($ranga == "2") {
  4. <meta http-equiv="Refresh" content="3; url=owner.php" />
  5. } else if ($ranga == "3") {
  6. <meta http-equiv="Refresh" content="3; url=user.php" />
  7. } else if ($ranga == "4") {
  8. <meta http-equiv="Refresh" content="3; url=control.php" />
  9. } else {
  10. echo "skontaktuj sie z administratorem";
  11. }


Pozdrawiam!

P.S.
Powiedz, czego teraz nie rozumiesz to wyjaśnię smile.gif

Ten post edytował modern-web 21.12.2010, 23:35:56


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
lord2105
post 21.12.2010, 17:01:48
Post #3





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


a moze razniej switch?

  1. <?php
  2. switch ($ranga) {
  3. case 1;
  4. //admin
  5. break;
  6. case 2;
  7. //super admin
  8. break;
  9. default;
  10. //user
  11. break;
  12. }


Ten post edytował lord2105 21.12.2010, 17:02:28


--------------------
40% rozwiązań znajduje się tutaj.
59,9% tutaj.

Jeśli pomogłem rozwiązać Twój problem wciśnij
Go to the top of the page
+Quote Post
modern-web
post 21.12.2010, 17:11:04
Post #4





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Jak komu wygodniej. Obie instrukcje stosować można na przemian.
Osobiście wybrałbym switch, ale jak już kolega poruszył ten problem z if i elseif to tego się trzymajmy smile.gif


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
piootras82
post 21.12.2010, 22:36:14
Post #5





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 8.12.2010

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


Super, wielkie dzięki winksmiley.jpg

Jednak będę potrzebowałl dalej pomocy :/

Przerobiłem tabelę i teraz w jednej tabeli USERS mam pole ranga.
Zanim wstawię pętę IF muszę wyciągnąć z bazy odpowiednią rangę.

Zrobiłem zapytanie do bazy aby wyciągnąć z niej rangę dla zalogowanego użytkownika.
I coś nie trybi. Chcę wyświetlić daną, którą ma wyciągnąć z bazy i nic sie nie wyświetla.
Nawet formularz logowania :/
Nie ma żadnych komunikatów o błędach - tylko biała strona.
Co robię nie tak?
Zakręciłem się też w tych petlach i nie za bardzo wiem gdzie wstawić te odpowiadające za przekierowanie na odpowiednie strony w zależności od pobranej rangi.
Coś chyba źle kombinuję :/

kod indeks.php


Kod
$this_var = "
<?php
error_reporting(E_ALL);
ini_set('display_errors','1');


session_start();
session_register("zalogowany");


if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;

mysql_connect("localhost", "root", "608693")or die("Nie można nawiązać połączenia z bazą");
mysql_select_db("zokia")or die("Wystąpił błąd podczas wybierania bazy danych");

function ShowLogin($komunikat=""){
    echo "$komunikat<br>";
    echo "<form action='index.php' method=post>";
    echo "Login: <input type=text name=login><br>";
    echo "Hasło: <input type=text name=haslo><br>";
    echo "<input type=submit value='Zaloguj!'>";
    echo "</form>";
    echo "Jeśli nie jesteś zarejestrowany, <a href='rejestruj.php'>tu znajdziesz formularz</a>";
}

?>
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
    <title>Strona główna</title>
</head>
<body>
<?php
if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;echo "Zostałeś wylogowany z serwisu";}
if($_SESSION["zalogowany"]!=1){
    if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
        if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars($_POST["haslo"])."'"))){
            $ranga = mysql_query("SELECT ranga FROM users WHERE where user_login = $_POST["login"]) AND user_haslo = $_POST["haslo"]");
            or die("Błąd w zapytaniu!");
            echo $ranga;
            }
        else echo ShowLogin("Podano złe dane!!!");
        }
    else ShowLogin();
}
else{
?>
Gratulacje! Zalogowałeś się pomyślnie! Możesz przejśc teraz do innych podstron, np. do <a href="stronka.php">tej</a>
<br><a href='index.php?wyloguj=tak'>wyloguj się</a>
<?php
}
?>

</body>
</html>
<?php mysql_close(); ?>




";
Go to the top of the page
+Quote Post
modern-web
post 22.12.2010, 00:04:12
Post #6





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Nie dziwi mnie to - zła konstrukcja zapytania.
Zrób tak i zobacz jakie błędy popelniles:

  1. $ranga = mysql_query("SELECT ranga FROM users WHERE user_login = '$_POST["login"]' AND user_haslo = '$_POST["haslo"]'");


Teraz kolejna sprawa; wyprowadz $_POST['login'] i $_POST['haslo'] do zmiennych. Zooptymalizuje to trochę Twój skrypt.
Potem zmienne te wykorzystaj zamiast dotychczasowych POST-ów.

Ten post edytował modern-web 22.12.2010, 00:05:24


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
piootras82
post 22.12.2010, 11:05:22
Post #7





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 8.12.2010

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


yyyyy nie rozumiem :/

1. poprawiłem zapytanie do bazy i w dalszym ciągu wyświetla mi sie tylko biała strona. Nie ma nawet formularza logowania (jak je wykasuje to strona wyświetla się poprawnie z tym, że nie mam możliwości przekierowania konkretnego uzytkownika na daną podstronę)
2. czy w dobrym miejscu wpisuje to zapytanie?
3. w ktorym miejscu dodać IF zeby w zależności od rangi przekierować na podstronę ?
4. nie rozumiem po co $_POST['login'] i $_POST['haslo'] wprowadzać do zmiennych skoro po nich robie zapytanie do bazy?


Go to the top of the page
+Quote Post
modern-web
post 22.12.2010, 12:13:47
Post #8





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


1. Bo dałeś ; od razu po zapytaniu, a przecież dalej masz `or die...`. Jak widzisz masz 2 nowe zmienne na początku. Podmień ten fragment na taki:
  1.  
  2. if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;echo "Zostałeś wylogowany z serwisu";}
  3. if($_SESSION["zalogowany"]!=1)
  4. {
  5. if(!empty($log) && !empty($pas))
  6. {
  7. if(mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE `user_login` = '$log' AND `user_haslo` = '$pas'")))
  8. {
  9. $ranga = mysql_query("SELECT `ranga` FROM `users` WHERE `user_login` = $log AND `user_haslo` = $pas") or die("Błąd w zapytaniu!");
  10. echo $ranga;
  11. }
  12. else echo ShowLogin("Podano złe dane!!!");
  13. }
  14. else ShowLogin();
  15. }
  16. else{


2. To gdzie umieścisz zapytanie nie robi znaczenia. Wynik zapytania zostanie przekazany do zmiennej, która obowiązuje w całym dokumencie. Jeśli chcesz wyświetlić rezultaty tego zapytania to po prostu umieść echo $ranga; w odpowiednim miejscu smile.gif

3. Sprawdź ten warunek od razu po tym zapytaniu - w tym samym if-ie smile.gif

4. Po to byś mógł `ładnie` korzystać z tych danych. Poza tym, skrypt staje się czytelniejszy. Po co 2x powtarzać te same operacje (w twoim wypadku 2x stosujesz htmlspecialchars())

P.S.
Dodałem Ci jeszcze trim i mysql_real_escape_string.
Poczytaj o tym ^^

Ten post edytował modern-web 22.12.2010, 12:17:09


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
piootras82
post 22.12.2010, 14:30:22
Post #9





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 8.12.2010

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


ałymi kroczkami do przodu winksmiley.jpg

Udało mi się winksmiley.jpg

Najpierw mialem błąd w zapytaniu brakowało ' winksmiley.jpg
Walczyłem troche z IF-em
Aż w końcu zrobiłem to na switch-u

Tylko pojawił się problem - za każdym razem przenosi mnie na tą samą stronę.
Chyba chodzi o identyfikator wyniku questionmark.gif?


Ten post edytował piootras82 22.12.2010, 15:21:00
Go to the top of the page
+Quote Post
modern-web
post 22.12.2010, 14:52:37
Post #10





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


1. Mam prośbę... kod PHP wstawiaj w odpowiedni znacznik BBcode - czyli [*PHP] (bez gwiazdki) - 1 z 5 przycisków w ostatniej linijce panelu edycji czcionki ;]
2. Tak, miejsce dobre, ale w `quote` nie widać błędów w składni, dodatkowo skrypt jest nieczytelny. Wklej w odpowiedni znacznik (patrz pkt. 1) i wtedy zobaczymy.


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
piootras82
post 22.12.2010, 15:28:32
Post #11





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 8.12.2010

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


O - właśnie zastanawiałem sie jak to wklejacie - hehe

Wracając do tematu.
mysql_query() zwraca identyfikator wyniku
i z tego co wyczytałem trzeba go obrobić
mysql_fetch_array()questionmark.gif

  1. <?php
  2. ini_set('display_errors','1');
  3.  
  4.  
  5. session_register("zalogowany");
  6.  
  7.  
  8. if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  9.  
  10. mysql_connect("localhost", "root", "608693")or die("Nie można nawiązać połączenia z bazą");
  11. mysql_select_db("zokia")or die("Wystąpił błąd podczas wybierania bazy danych");
  12.  
  13. function ShowLogin($komunikat=""){
  14. echo "$komunikat<br>";
  15. echo "<form action='index.php' method=post>";
  16. echo "Login: <input type=text name=login><br>";
  17. echo "Hasło: <input type=text name=haslo><br>";
  18. echo "<input type=submit value='Zaloguj!'>";
  19. echo "</form>";
  20. echo "Jeśli nie jesteś zarejestrowany, <a href='rejestruj.php'>tu znajdziesz formularz</a>";
  21. }
  22.  
  23. ?>
  24. <!DOCTYPE html
  25. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  26. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  27. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  28. <head>
  29. <title>Strona główna</title>
  30. </head>
  31. <body>
  32. <?php
  33.  
  34.  
  35. if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;echo "Zostałe&para; wylogowany z serwisu";}
  36. if($_SESSION["zalogowany"]!=1)
  37. {
  38. if(!empty($log) && !empty($pas))
  39. {
  40. if(mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE `user_login` = '$log' AND `user_haslo` = '$pas'")))
  41. {
  42. $ranga = mysql_query("SELECT `ranga` FROM `users` WHERE `user_login` = '$log' AND `user_haslo` = '$pas'") or die("Błąd w zapytaniu!");
  43.  
  44. switch ($ranga) {
  45. case '10';
  46. header("Location: admin.php");
  47. break;
  48. case '2';
  49. header("Location: owner.php");
  50. break;
  51. case '3';
  52. header("Location: user.php");
  53. break;
  54. case '4';
  55. header("Location: control.php");
  56. break;
  57. default;
  58. print("skontaktuj sie z administratorem");
  59. break;
  60. }
  61.  
  62. }
  63. else echo ShowLogin("Podano złe dane!!!");
  64. }
  65. else ShowLogin();
  66. }
  67. else{
  68.  
  69.  
  70. ?>
  71.  
  72. <br><a href='index.php?wyloguj=tak'>wyloguj się</a>
  73. <?php
  74. }
  75. ?>
  76.  
  77. </body>
  78. </html>
  79. <?php mysql_close(); ?>
Go to the top of the page
+Quote Post
modern-web
post 22.12.2010, 15:34:47
Post #12





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Po zapytaniu o zmiennej $ranga dodaj:
  1. $ranga_result = mysql_result($ranga,"ranga");

i w switch zmień $ranga na $ranga_result
Powinno zadziałać smile.gif

Ten post edytował modern-web 22.12.2010, 15:35:48


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
Szadow
post 22.12.2010, 15:41:02
Post #13





Grupa: Zarejestrowani
Postów: 47
Pomógł: 6
Dołączył: 21.11.2010

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


O matko!
  1. if(mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE `user_login` = '$log' AND `user_haslo` = '$pas'")))
  2. {
  3. $ranga = mysql_query("SELECT `ranga` FROM `users` WHERE `user_login` = '$log' AND `user_haslo` = '$pas'") or die("Błąd w zapytaniu!");

-Czy nie są one identyczne, po co wysyłać 2 razy to samo zapytanie?
Daj to do jednej zmiennej i operuj na niej.

-Po co tyle if'ów w sobie.
Nie lepiej zrobić np. zmienną error i w każdym "if'ie" będziesz ustawiał error a pod koniec sprawdzisz czy error jest puste, jeśli tak to ok jeśli nie to nie ok.

@Up byłeś szybszy

Ten post edytował Szadow 22.12.2010, 15:41:43


--------------------
Pomogłem? Kliknij przycisk Pomógł. ;)
Go to the top of the page
+Quote Post
piootras82
post 22.12.2010, 15:42:19
Post #14





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 8.12.2010

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


SUPER

Działa pięknie winksmiley.jpg

Jeszcze jedno mam pytanie.
W jaki sposób zabezpieczyć zeby np po zalogowaniu się usera i przekierowaniu go na stronę user.php
po zmienie z palca w ścieżce w przeglądarce na admin.php sprawdzalo czy ma uprawnienia.

Na pewno na sesjach tylko szukałem już wcześniej i nie znalazłem odpowiedzi.
Wiesz może jakk to ugryźć?

A może sprawdzać na poczatku w każdym pliku rangę zalogowanego użytkownika?
Tylko czy ranga bedzie przekazana do kolejnej strony?
Pewnie się da to zrobic smile.gif

EDIT:
A moze na każdej z podstron na sztyno dać, że jeśli ranga zalogowanego jest inna niż odpowiadająca uprawnieniom,
wywalało odpowiedni komunikat i wygolowało takiego użytkownika.
Tylko numer rangi trzeba by przekazać sesji i na podstronie sprawdzać numer sesji z rangą przypisaną do podstrony.
Dobrze kombinuje?? winksmiley.jpg

Ten post edytował piootras82 22.12.2010, 15:48:30
Go to the top of the page
+Quote Post
modern-web
post 22.12.2010, 15:58:19
Post #15





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Najkorzystniej za pomocą sesji... proponuję byś zrobił tak:

Przed każdym header("Location: ___"); utwórz sesję - np. w ten sposób:
  1. $start_sesji_ranga = $_SESSION['nazwa_sesji'] = $ranga_result;

Potem na początku każdej podstrony sprawdzaj tę sesję... np. w ten sposób:
  1. if(!isset($_SESSION['nazwa_sesji']) || $_SESSION['nazwa_sesji'] != '10')
  2. {
  3. header("Location: strona_glowna");
  4. } else {
  5.  
  6. //treść reszty strony - zablokowana jeśli warunek jest `false`
  7.  
  8. }


Tam gdzie masz 10 to wpisujesz na każdej podstronie numer rangi... 10 to admin więc ten przypadek pasuje do podstrony admin....
Pamiętaj o zmianie nazwa_sesji, strona_glowna no i poczytaj ogólnie o sesjach w PHP winksmiley.jpg

Pisałem z głowy więc mogłem się gdzieś rąbnąć haha.gif

Ten post edytował modern-web 22.12.2010, 16:43:22


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
piootras82
post 23.12.2010, 14:55:25
Post #16





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 8.12.2010

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


Działa elegancko smile.gif

Dziękuje za pomoc smile.gif
Go to the top of the page
+Quote Post
shaolin33
post 26.06.2013, 07:25:24
Post #17





Grupa: Zarejestrowani
Postów: 136
Pomógł: 0
Dołączył: 5.10.2012

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


witam, jesli to mozliwe to przedstawie swój propblem aby nie klonowac tematów :

prosze o pomoc przy uprawnienaich do formularza po zalogowaniu, potrzebuje aby po zalogowaniu zwykly uzytkownik mogl wypelnic np. 3 pola a po zalogowaniu admina t, ten z kolei wypełnia pozostale pola ktorych nie wypelnim zwykly user


main.php

  1. <?
  2.  
  3. session_start(); // Na samej górze zadeklaruj sesję.
  4. if(!session_is_registered("uzytkownik")){ // Sprawdza zmienną sesji.
  5. header("location:index.php"); // Przekierowanie do index.php
  6. }
  7. ?>
  8.  
  9. <head>
  10.  
  11. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  12.  
  13. <title>Dokument</title>
  14. </head>
  15.  
  16. <form action="index2.php" method="post">
  17.  
  18. <body>
  19.  
  20. <p>Witaj <? echo $_SESSION['uzytkownik']; ?>! Jestes zalogowany.</p>
  21.  
  22. <p><a href="index.php">Wyloguj</a></p>
  23. <p><a href="index2.php">pokaz rejestr</a></p>
  24.  
  25. <br>
  26. <b>REJESTR ZDARZEŃ</b>
  27.  
  28. <br>
  29.  
  30. <br>
  31. <br>
  32. Opis zdarzenia: <input name="opis_zdarzenia_3"size="80" />
  33. <br>
  34. <br>
  35. Data wystąpienia: <input name="data_wyst_5" size="10" />
  36. Data ujawnienia: <input name="data_ujaw_6" size="10" />
  37. Czas trwania(minuty): <input name="czas_trwania_8" size="20" />
  38. <br>
  39. <br>
  40. Ilość zdarzeń: <input name="ilosc_zdarz_9" size="10" />
  41. Wycena: <input name="wycena_10"size="10" />
  42. <br>
  43. <br>
  44.  
  45. <br>
  46.  
  47.  
  48.  
  49. </body>
  50.  
  51.  
  52. <input type="submit" value="Zapisz" />
  53. </form>
  54.  
  55.  
  56. </html>
  57.  


index.php

  1. <?
  2.  
  3. // Na samej górze zadeklaruj sesję.
  4. // Sekcja wylogowywania, kasuje wszystkie zmienne sesyjne
  5. $message=""; // Wiadomość po wylogowaniu
  6.  
  7. // Sekcja logowania
  8. $login=$_POST['login'];
  9. if($login) {
  10. // W momencie kliknięcia w przycisk formularza
  11. $uzytkownik=$_POST['uzytkownik'];
  12. $md5_haslo=md5($_POST['haslo']);
  13. // Koduje hasło funkcją md5().
  14.  
  15.  
  16. // Połączenie z bazą. (@mysql_num_rows($rezultat))
  17. $host="localhost"; // Nazwa hosta.
  18. $db_user="root"; // Nazwa użytkownika - MySQL.
  19. $db_password="admin"; // Hasło do bazy.
  20. $database="rejestr"; // Nazwa bazy.
  21. mysql_connect($host,$db_user,$db_password);
  22. mysql_select_db($database);
  23. // Sprawdzenie nazwy użytkownika i hasła.
  24. $rezultat=mysql_query("select * FROM uzytkownicy WHERE uzytkownik='$uzytkownik' AND haslo='$md5_haslo'") ;
  25. if (mysql_num_rows($rezultat)==1) {
  26. session_register("uzytkownik"); // Zapamiętuje zmienną sesji
  27. header("location:main.php"); // Przekierowanie do strony main.php
  28. }else {
  29. $message="Nieprawidłowa nazwa użytkownika lub hasło";
  30. }
  31. } // Koniec sprawdzania autoryzacji.
  32. ?>
  33. <head>
  34.  
  35. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  36.  
  37. <title>Dokument</title>
  38. </head>
  39. <body>
  40. <? echo $message; ?>
  41. <form id="form1" name="form1" method="post" action="<? echo $PHP_SELF; ?>">
  42. <table>
  43. <tr>
  44. <td>Uzytkownik: </td>
  45. <td><input name="uzytkownik" type="text" id="uzytkownik" /></td>
  46. </tr>
  47. <tr>
  48. <td>Hasło: </td>
  49. <td><input name="haslo" type="password" id="haslo" /></td>
  50. </tr>
  51. </table>
  52. <input name="login" type="submit" id="login" value="login" />
  53. </form>
  54. <? //echo '<pre>';
  55. //print_r($GLOBALS);
  56. //echo '</pre>'; ?>
  57. </body>
  58. </html>



mam stworzoną baze z uzytkownikami + uprawnienia
- uzytkownik
-administrator
Go to the top of the page
+Quote Post
b4rt3kk
post 26.06.2013, 09:49:08
Post #18





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Pobierz uprawnienia użytkownika z bazy, a następnie przypisz do zmiennej sesyjnej:

  1. while ($row) {
  2. $_SESSION['ranga'] = $row['ranga']; // nie wiem jaką masz nazwę w tabeli
  3. }


Teraz w zależności od tego wyświetlasz (bądź nie) pola dla poszczególnych użytkowników:

  1. if ($_SESSION['ranga'] == 'admin') {
  2. echo 'To zobaczy tylko admin';
  3. }
  4.  
  5. if ($_SESSION['ranga'] == 'admin' OR $_SESSION['ranga'] == 'user') {
  6. echo 'To zobaczy admin i user';
  7. }


Lepiej by było przypisać flagi, zamiast trzymać rangi zapisane słownie. Raz, że np. gdy dodasz więcej poziomów uprawnień, to będziesz mógł je stopniować, np:

  1. if ($_SESSION['ranga'] >= 3) {
  2. echo 'To zobacza uzytkownicy z ranga powyzej 3';
  3. }


A dwa, że zajmie to mniej miejsca w bazie. Możesz ew. kolejną tabelkę do bazy o nazwie rangi, gdzie będziesz trzymał ich opisy (jakbyś miał kiedyś zapomnieć co dana ranga może).


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
shaolin33
post 26.06.2013, 10:02:25
Post #19





Grupa: Zarejestrowani
Postów: 136
Pomógł: 0
Dołączył: 5.10.2012

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


Cytat(b4rt3kk @ 26.06.2013, 10:49:08 ) *
Pobierz uprawnienia użytkownika z bazy, a następnie przypisz do zmiennej sesyjnej:

  1. while ($row) {
  2. $_SESSION['ranga'] = $row['ranga']; // nie wiem jaką masz nazwę w tabeli
  3. }


Teraz w zależności od tego wyświetlasz (bądź nie) pola dla poszczególnych użytkowników:

  1. if ($_SESSION['ranga'] == 'admin') {
  2. echo 'To zobaczy tylko admin';
  3. }
  4.  
  5. if ($_SESSION['ranga'] == 'admin' OR $_SESSION['ranga'] == 'user') {
  6. echo 'To zobaczy admin i user';
  7. }


Lepiej by było przypisać flagi, zamiast trzymać rangi zapisane słownie. Raz, że np. gdy dodasz więcej poziomów uprawnień, to będziesz mógł je stopniować, np:

  1. if ($_SESSION['ranga'] >= 3) {
  2. echo 'To zobacza uzytkownicy z ranga powyzej 3';
  3. }


A dwa, że zajmie to mniej miejsca w bazie. Możesz ew. kolejną tabelkę do bazy o nazwie rangi, gdzie będziesz trzymał ich opisy (jakbyś miał kiedyś zapomnieć co dana ranga może).


w sql mam osobne pole o nazwie 'prawa' i znajdują się tam tylkodwa rodzaje i więcej nie bedzie :0
-uzytkownik
-administrator

cel jest taki że uzytkownik wypełnia 3 pola a admin po zalogowaniu pozostałe i tylko tyle:)


Go to the top of the page
+Quote Post
matijenko
post 1.11.2017, 22:22:29
Post #20





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 31.10.2017

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


Mój problem wygląda trochę inaczej. Chcę aby zalogowani użytkownicy po wejściu na daną podstronę w moim przypadku moli.html mieli możliwość skorzystania z 2 funkcji. Przekierowanie do skorzystania z funkcji jest za pośrednictwem kafelka(tile), zrobionego na sposób przycisku.
Mam stworzoną tabele w bazie danych

id|user|imie|nazwisko|email|pesel|pass|ranga

Ranga u każdego użytkownika wynosi 1

System logowania i rejestracji jest gotowy. Próbowałem zrobić to na wiele sposobów, lecz niestety efekt mnie nie usatysfakcjonował. Ktoś byłby w stanie pomóc?
Poniżej pozostawiam kody:


ZALOGUJ.PHP

  1.  
  2. if((!isset($_POST['login']))||(!isset($_POST['haslo'])))
  3. {
  4. header('Location:logo.php');
  5. exit();
  6. }
  7.  
  8. require_once "connect.php";
  9.  
  10. $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
  11.  
  12. if($polaczenie->connect_errno!=0)
  13. {
  14. echo "Error: ".$polaczenie->connect_errno;
  15. }
  16. else
  17. {
  18. $login = $_POST['login'];
  19. $haslo = $_POST['haslo'];
  20.  
  21. $login = htmlentities($login,ENT_QUOTES, "UTF-8");
  22. $haslo = htmlentities($haslo,ENT_QUOTES, "UTF-8");
  23.  
  24.  
  25. if($rezultat = @$polaczenie->query(
  26. sprintf("SELECT * FROM uzytkownicy WHERE user='%s' AND pass='%s'",
  27. mysqli_real_escape_string($polaczenie,$login),
  28. mysqli_real_escape_string($polaczenie,$haslo))))
  29. {
  30. $ilu_userow = $rezultat->num_rows;
  31. if($ilu_userow>0)
  32. {
  33. $_SESSION['zalogowany'] = true;
  34.  
  35. $wiersz = $rezultat->fetch_assoc();
  36. $_SESSION['id'] = $wiersz['id'];
  37. $_SESSION['user'] = $wiersz['user'];
  38.  
  39. unset($_SESSION['blad']);
  40. $rezultat->free_result;
  41. header('Location:index.php');
  42. }
  43. else
  44. {
  45. $_SESSION['blad'] = '<span style="color:red"> Nieprawidlowy login lub hasło!</span>';
  46. header('Location:logo.php');
  47. }
  48. }
  49.  
  50. $polaczenie->close();
  51. }


MOLI.PHP

  1.  
  2. session_start();
  3. session_register("zalogowany");
  4.  
  5.  
  6. if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  7.  
  8. require_once "connect.php";
  9. mysqli_report(MYSQLI_REPORT_STRICT);
  10. try
  11. {
  12. $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
  13. if($polaczenie->connect_errno!=0)
  14. {
  15. throw new Exception(mysqli_connect_errno());
  16. }
  17. }
  18. catch(Exception $e)
  19. {
  20. echo'<span style="color:red;">Błąd serwera! Przepraszam za niedogodności. Prosimy o rejestrację w innym terminie!</span>';
  21. echo '<br /> Informacja developerska: '.$e;
  22. }
  23.  
  24. ?>
  25. <!DOCTYPE HTML>
  26. <html lang="pl">
  27. <head>
  28. <meta charset="utf-8" />
  29. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
  30.  
  31. <title>CIEKAWE </title>
  32.  
  33. </head>
  34. <body>
  35. <main>
  36. <article>
  37.  
  38. <div class="container">
  39. <div class="square">
  40. <div class="tile1">
  41. <?php
  42.  
  43. $log = mysql_real_escape_string(htmlspecialchars(trim($_POST['login'])));
  44. $pas = mysql_real_escape_string(htmlspecialchars(trim($_POST['haslo'])));
  45.  
  46. if($_SESSION["zalogowany"]!=1)
  47. {
  48. if(!empty($log) && !empty($pas))
  49. {
  50. if(mysql_num_rows(mysql_query("SELECT * FROM `uzytkownicy` WHERE `user` = '$log' AND `pass` = '$pas'")))
  51. {
  52. $ranga = mysql_query("SELECT `ranga` FROM `uzytkownicy`` WHERE `user` = '$log' AND `pass` = '$pas'") or die("Błąd w zapytaniu!");
  53.  
  54. switch ($ranga) {
  55. case '1';
  56. header("Location: witamy.php");
  57. break;
  58. default;
  59. print("skontaktuj sie z administratorem");
  60. break;
  61. }
  62. }
  63. }
  64. }
  65. else{}
  66. ?>
  67. <a href="witamy.php" class="tilelink"></a>
  68. </div>
  69. <div class="tile2">
  70. <a href="#" class="tilelink"></a>
  71. </div>
  72. </div>
  73. </div>
  74. </article>
  75.  
  76. </main>
  77. </body>
  78. </html>


Ten post edytował matijenko 1.11.2017, 22:24:37
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: 25.05.2025 - 11:29