Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Widoczne dla zalogowanego i z polem admin = 1
Forum PHP.pl > Forum > Przedszkole
adek-
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?
blooregard
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_...() )
Sephirus
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

adek-
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
andrew8666
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...
adek-
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...
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.