Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] hierarchia elementów
Forum PHP.pl > Forum > Przedszkole
Chemiq
mam niewielki problemik. otóż zdefiniowałem takie coś:
  1. <?php
  2. define(GUEST, !$_SESSION['login']);
  3. define(USER, $_SESSION['login']);
  4. define(MOD, $dane_user['status']=="mod");
  5. define(J_ADMIN, $dane_user['status']=="j_admin");
  6. define(ADMIN, $dane_user['status']=="admin");
  7. define(S_ADMIN, $dane_user['status']=="s_admin");
  8. ?>


jak zrobić hierarchię tych elementów, tzn. żeby GUEST < USER < MOD itd.questionmark.gif
abc667
trochę nie rozumiem tego zapisu

  1. <?php
  2. $dane_user['status']=="mod"
  3. ?>


zresztą tego też

define(GUEST, !$_SESSION['login']);
define(USER, $_SESSION['login']);

przecież GUEST i USER będą miał różną wartość w zależności od tego czy ktoś bedzie zalogowany

  1. <?php
  2. define(GUEST, 0);
  3. define(USER, 1);
  4. define(MOD, 2);
  5. define(J_ADMIN, 3);
  6. define(ADMIN, 4);
  7. define(S_ADMIN, 5);
  8. ?>

i wtedy GUEST < USER ...
Chemiq
nie o to chodzi. jeżeli nie rozumiesz zapisu w funkcji define to nie wymyślaj jakichś dziwactw.

w roli wyjaśnienia dla Ciebie:
funkcja define przypisuje nazwę (w tym wypadku GUEST, USER itd.) jeżeli warunek po przecinku jest spełniony (czyli !$_SESSION['login'], $_SESSION['login'], $dane_user['status']=="mod" itd.).
więc jeżeli zrobię
  1. <?php
  2. define(GUEST, 0);
  3. define(USER, 1);
  4. define(MOD, 2);
  5. define(J_ADMIN, 3);
  6. define(ADMIN, 4);
  7. define(S_ADMIN, 5);
  8. ?>

to będę mógł zamiast liczb 1, 2, 3... używać operatorów GUEST, USER itd. a nie o to mi zupełnie chodzi
abc667
Cytat
nie o to chodzi. jeżeli nie rozumiesz zapisu w funkcji define to nie wymyślaj jakichś dziwactw.


tak?
jak dla mnie to define przypisuje wartość stałej false

  1. <?php
  2. define('S', false);
  3.  
  4. if(defined('S')) echo 'zdefiniowana';
  5. ?>


natomiast
  1. <?php
  2. define(MOD, $dane_user['status']=="mod");
  3. define(J_ADMIN, $dane_user['status']=="j_admin");
  4. define(ADMIN, $dane_user['status']=="admin");
  5. define(S_ADMIN, $dane_user['status']=="s_admin");
  6. ?>

3 stałe będą miały wartość false a jeden będzie miał true

edit
powiedz jak chcesz to wykorzystywać
Chemiq
chodzi mi dokładnie o takie coś:
każdy użytkownik ma przypisany status (mod, j_admin itd.) w polu `status` w bazie danych. admin może mieć wyższe uprawnienia niż user (logiczne biggrin.gif). w związku z tym admin może widzieć to czego nie widzi user. jeżeli napiszę takie coś (względem moich wartości funkcji define):
  1. <?php
  2. if (ADMIN) {
  3.  //treść
  4. }
  5. ?>

to wtedy treść będzie widział tylko i wyłącznie admin i będzie ok.

ale jeżeli napiszę takie coś:
  1. <?php
  2. if (USER) {
  3.  //treść
  4. }
  5. ?>

to wtedy treść zobaczy TYLKO user a admin nie będzie jej widział. dlatego chcę utworzyć jakąś hierarchię, która ustali że admin jest na wyższym stopniu i też może widzieć to co user.
abc667
  1. <?php
  2. define('GUEST', !$_SESSION['login']);
  3. define('USER', $_SESSION['login']);
  4. define('MOD', false);
  5. define('J_ADMIN', false);
  6. define('ADMIN', false);
  7. define('S_ADMIN', false);
  8.  
  9.  
  10. if(in_array($dane_user['status'], array("mod", "j_admin", "admin", "s_admin")))
  11. {
  12. define('MOD', true);
  13. if($dane_user['status'] != "mod")
  14. {
  15. define('J_ADMIN', true);
  16. if($dane_user['status'] != "j_admin")
  17. {
  18. define('ADMIN', true);
  19. if($dane_user['status'] != "admin")
  20. define('S_ADMIN', true);
  21. }
  22. }
  23. }
  24. ?>
Chemiq
mógłbyś wytłumaczyć co napisałeś bo nie bardzo rozumiem jak to mi może pomóc. jak dla mnie to jest w dzialaniu dokładnie to samo co napisałem na początku:
  1. <?php
  2. define(GUEST, !$_SESSION['login']);
  3. define(USER, $_SESSION['login']);
  4. define(MOD, $dane_user['status']=="mod");
  5. define(J_ADMIN, $dane_user['status']=="j_admin");
  6. define(ADMIN, $dane_user['status']=="admin");
  7. define(S_ADMIN, $dane_user['status']=="s_admin");
  8. ?>


więc nie rozumiem po co aż tak kombinować
abc667
twoje działa tak

jeżeli przykładowo ktoś jest junior adminem to MOD ma przypisaną wartość false czyli jak napiszesz if(MOD) wtedy jadmin tego nie zobaczy
u mnie najpierw wszystkie rangi mają wartość false potem sprawdzamy czy user ma przypisaną którąś, jeśli ma którąś to na pewno ma MOD lub wyżej więc definiujemy MOD i sprawdzamy czy ma moda, jeżeli nie ma to znaczy że ma którąś wyższą a więc na pewno ma jadmina, definiujemy go i sprawdzamy czy go ma jeśli nie to ma wyższą itd.

i wtedy jak użyjesz
  1. <?php
  2. if(J_ADMIN) { }
  3. ?>

zobaczą to wszyscy z rangą j_admin i wyższymi
Chemiq
teraz rozumiem biggrin.gif zaraz sprawdzę czy działa biggrin.gif
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.