![]() |
![]() ![]() |
![]() |
![]()
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"); } "; |
|
|
![]()
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:
Pozdrawiam! P.S. Powiedz, czego teraz nie rozumiesz to wyjaśnię ![]() Ten post edytował modern-web 21.12.2010, 23:35:56 -------------------- Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
|
|
|
![]()
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?
Ten post edytował lord2105 21.12.2010, 17:02:28 -------------------- |
|
|
![]()
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 ![]() -------------------- Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 8.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Super, wielkie dzięki
![]() 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(); ?> "; |
|
|
![]()
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:
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! ;)
|
|
|
![]()
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? |
|
|
![]()
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:
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 ![]() 3. Sprawdź ten warunek od razu po tym zapytaniu - w tym samym if-ie ![]() 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! ;)
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 8.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
ałymi kroczkami do przodu
![]() Udało mi się ![]() Najpierw mialem błąd w zapytaniu brakowało ' ![]() 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 ![]() Ten post edytował piootras82 22.12.2010, 15:21:00 |
|
|
![]()
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! ;)
|
|
|
![]()
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() ![]()
|
|
|
![]()
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:
i w switch zmień $ranga na $ranga_result Powinno zadziałać ![]() Ten post edytował modern-web 22.12.2010, 15:35:48 -------------------- Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 47 Pomógł: 6 Dołączył: 21.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
O matko!
-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ł. ;)
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 8.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
SUPER
Działa pięknie ![]() 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 ![]() 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?? ![]() Ten post edytował piootras82 22.12.2010, 15:48:30 |
|
|
![]()
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:
Potem na początku każdej podstrony sprawdzaj tę sesję... np. w ten sposób:
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 ![]() Pisałem z głowy więc mogłem się gdzieś rąbnąć ![]() Ten post edytował modern-web 22.12.2010, 16:43:22 -------------------- Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 8.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Działa elegancko
![]() Dziękuje za pomoc ![]() |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 136 Pomógł: 0 Dołączył: 5.10.2012 Ostrzeżenie: (10%) ![]() ![]() |
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
index.php
mam stworzoną baze z uzytkownikami + uprawnienia - uzytkownik -administrator |
|
|
![]()
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:
Teraz w zależności od tego wyświetlasz (bądź nie) pola dla poszczególnych użytkowników:
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:
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.
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 136 Pomógł: 0 Dołączył: 5.10.2012 Ostrzeżenie: (10%) ![]() ![]() |
Pobierz uprawnienia użytkownika z bazy, a następnie przypisz do zmiennej sesyjnej:
Teraz w zależności od tego wyświetlasz (bądź nie) pola dla poszczególnych użytkowników:
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:
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:) |
|
|
![]()
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
MOLI.PHP
Ten post edytował matijenko 1.11.2017, 22:24:37 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.05.2025 - 11:29 |