Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Widoczne dla zalogowanego i z polem admin = 1
adek-
post
Post #1





Grupa: Zarejestrowani
Postów: 124
Pomógł: 2
Dołączył: 19.04.2007
Skąd: Częstochowa

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


Witam, mam system logowania, gdzie w bazie dorobiłem sobie pole admin = tinyint 1/0 i teraz robię sobie wyświetlanie pewnych elementów menu dla zalogowanych użytkowników z admin = 1 i mam takie coś

Na początku includuję bazę i pobieram wartość mnie interesującą czyli admin
  1. include('inc/config.inc.php'); //dane $rej_tabela i inne wazne opcje
  2. include 'inc/db.php'; // połączenie się z bazą danych
  3. $tabela = $rej_tabela; // zdefiniowanie tabeli MySQL z której ma pobierać
  4.  
  5. $wynik = mysql_query("SELECT * FROM $tabela WHERE admin=1");
  6. // pobieram wszystkie pola z polem admin ustawionym na 1

i teraz kod odpowiedzialny za weryfikację gdzie korzystam z "czy zalogowany" i "czy admin=1"
  1. <?php if (!isset($_SESSION['login']) && (mysql_num_rows($wynik) == 1)) { echo ''; } else {?>
  2. <li><a href="admin.php">ADMIN</a></li>
  3. <?php } ?>

nie wiem, czy dokładnie dobrze sobie to obmyśliłem. Bo inni użytkownicy bez admin=1 widzą to pole w menu ;/
Przypuszczalnie źle sobie warunek wypisałem, czy też pole "admin" w mysql może być zarezerwowane i nie widzi?

Ten post edytował adek- 24.10.2011, 14:07:32
Go to the top of the page
+Quote Post
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Nie sprawdzasz wartości w polu 'admin', tylko ilość zwróconych wyników.

Dlatego, jeśli w bazie masz jeden wiersz z polem 'admin' ustawionym na 1, ten warunek będzie zawsze spełniony.

Proponuję ci doczytać o obsłudze zapytań i zwracanych wynikach (ogólnie o f-cjach z rodziny mysql_...() )
Powód edycji: [blooregard]:


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
Sephirus
post
Post #3





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Dopowiem jedynie, że takie rzeczy w prostych aplikacjach najlepiej przerzucić do sesji.

Na przykład najprostrzym możliwym sposobem zalogowania użytkownika jest podpisanie do sesji ID zalogowanego użytkownika. Tak samo można dorzucić jeszcze po zalogowaniu czy dany user jest adminem czy nie (to i tak jedno zapytanie). Następnie wszędzie na stronie masz dostep do sesji i nie musisz już czytać z bazy czy dany uzytkownik jest adminem czy nie smile.gif

Minus: zmiana typu konta user/admin wpłynie na użytkownika dopiero po jego przelogowaniu (choć da się to obejść) wink.gif



--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
adek-
post
Post #4





Grupa: Zarejestrowani
Postów: 124
Pomógł: 2
Dołączył: 19.04.2007
Skąd: Częstochowa

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


blooregard faktycznie, skopiowałem po prostu część kodu i wkleiłem bezmyślnie. Tak szukałem nawet informacji odnośnie sprawdzania czy user jest adminem itp i dałem sobie warunek który i tak mi nie działał, ale dla własnej ciekawości muszę to ogarnąć więc będę szukał jeszcze informacji na ten temat, bo przez brak wiedzy nic konkretnego nie potrafiłem znaleźć

a co do wypowiedzi Sephirus to faktycznie, zacząłem się bawić i przy tworzeniu sesji użytkownika $_SESION['login']
  1. $wynik=mysql_query("SELECT * FROM $tabela WHERE
  2. login='$login' and haslo='$haslo' and status=1");
  3.  
  4. if (mysql_num_rows($wynik) == 1) {
  5. $informacja = mysql_fetch_array($wynik);
  6. $_SESSION["login"] = $informacja["login"];
  7. header('Location: index.php ');
  8. } else {
  9. echo '<span class="blad">Zostały wprowadzone nieprawidłowe dane!</span>';
  10. }

dorobiłem sobie jeszcze raz takie coś tylko dodałem w mysql_query warunek and admin=1 i stworzyłem
  1. $_SESSION["admin"] = $informacja["admin"];

i kod który ma być widoczny dla admina podaję tak
  1. <?php if (!isset($_SESSION['admin'])) { echo ''; } else {?>
  2. <li><a href="admin.php">ADMIN</a></li>
  3. <?php } ?>

tylko jest jeden motyw, muszę zrobić buttona wylogowania osobno dla session admin i dla session login
bo jeśli zrobię
  1. <?php if (!isset($_SESSION['login']) || !isset($_SESSION['admin'])) { echo ''; } else {?>
  2. <li><a href="logowanie.php?wylogowanie=tak">Wyloguj się</a></li>
  3. <?php } ?>

to albo nie widzi go user, jeśli drugi isset bez ! to nie widzi go admin, nie rozwarstwiam się na razie nad tym bo muszę uciekać, postaram się znaleźć odpowiedni warunek jak wrócę z pracy

Ten post edytował adek- 24.10.2011, 17:34:29
Go to the top of the page
+Quote Post
andrew8666
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 1
Dołączył: 24.10.2011

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


Troche to zagmatwane 0.o

Przecież możesz sobie zrobić wiele zmiennych sesyjnych... W miejscu gdzie user się loguje poprostu:

  1. $_SESSION["login"] = $informacja["login"];
  2. if($informacja["admin"]==1) $_SESSION["admin"]=1;


Tyle... Przecież admin jest też userem, nie?

Pozatym, pozycje w bazie powinny mieć przydzielony ID, lepiej sobie pobierać te ID, niż lecieć po loginie usera...
Go to the top of the page
+Quote Post
adek-
post
Post #6





Grupa: Zarejestrowani
Postów: 124
Pomógł: 2
Dołączył: 19.04.2007
Skąd: Częstochowa

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


W zasadzie fakt admin też jest userem smile.gif Mam id każdego użytkownika jako autoincrement jeśli o to Ci chodzi, tylko nie wiem jak miał bym identyfikować go po ID? wyciągać dane usera i jego id i jako zmienną dawać samo id zamaist jego nazwy, czy loginu? I jeszcze mam pytanie bo nie wiem, czy dobrze Cię zrozumiałem. I chyba nie wiem dokładnie co masz na myśli mówiąc o wielu zmiennych sesyjnych.
Ja sobie zrobiłem tak:
  1. $login = $_POST["login"];
  2. $haslo = $_POST["haslo"];
  3. $haslo = md5($haslo); // szyfrowanie podanego hasła
  4.  
  5. // logowanie usera - jeżeli wszystko jest dobrze, użytkownik się loguje
  6. $wynik=mysql_query("SELECT * FROM $tabela WHERE
  7. login='$login' and haslo='$haslo' and status=1");
  8.  
  9. if (mysql_num_rows($wynik) == 1) {
  10. $informacja = mysql_fetch_array($wynik);
  11. $_SESSION["login"] = $informacja["login"];
  12. header('Location: index.php ');
  13. } else {
  14. echo '<span class="blad">Zostały wprowadzone nieprawidłowe dane!</span>';
  15. }
  16.  
  17. // logowanie admina
  18. $wynik=mysql_query("SELECT * FROM $tabela WHERE
  19. login='$login' and haslo='$haslo' and status=1 and admin=1"); //## tutaj dodałem atrybut admin 1 więc loguje jako admin
  20.  
  21. if (mysql_num_rows($wynik) == 1) {
  22. $informacja = mysql_fetch_array($wynik);
  23. $_SESSION["admin"] = $informacja["admin"];
  24. header('Location: index.php ');
  25. } else {
  26. echo '<span class="blad">Zostały wprowadzone nieprawidłowe dane!</span>';
  27. }
  28.  
  29. mysql_close($polaczenie);

CHodzi Ci dokładnie o to, że można to zrobić w jednym zapytaniu, zamiast rozbijać na dwa? Czyli najpierw bym musiał jeszcze zrobić if mysql query addmin-1 i admin-0 ?
Bo w zasadzie chyba teraz jak loguję się jako sesja "admin" to też mi się loguje jako wywołanie sesji "login", tak? Bo mi wyświetla 2 przyciski wyloguj dla admin i dla login...

Ten post edytował adek- 25.10.2011, 20:39:02
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 Aktualny czas: 21.08.2025 - 08:42