Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Logowanie z podziałem na uprawnienia - pomocy
Forum PHP.pl > Forum > Przedszkole
piootras82
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");
    }
";
modern-web
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
lord2105
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. }
modern-web
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
piootras82
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(); ?>




";
modern-web
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.
piootras82
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?


modern-web
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 ^^
piootras82
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?
modern-web
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.
piootras82
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(); ?>
modern-web
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
Szadow
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
piootras82
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
modern-web
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
piootras82
Działa elegancko smile.gif

Dziękuje za pomoc smile.gif
shaolin33
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
b4rt3kk
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).
shaolin33
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:)


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