Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pytanie o bład parse w switchu
Forum PHP.pl > Forum > Przedszkole
eminiasty
Mam normalnego swicha w phpie..
i wszystko dziala tylko teraz taki hak ktorego tyczy sie pytanie.

TO DZIALA:
  1. if(isset($s)){
  2. switch ($s) {
  3. case "login":
  4. include("login.php");
  5. break;
  6. include("inc/user/ads.php");
  7. break;
  8. case "profile":
  9.  
  10. if(checkLogin() && ($row['name'] != 'user') || ($row['name'] != 'mod') || ($row['name'] != 'root' )) {
  11. include("inc/user/profile.php");
  12. }
  13. else{
  14. include("inc/err.php");
  15. }
  16.  
  17.  
  18. break;
  19. case "test":
  20. include("test.php");
  21. break;
  22. default:
  23. include("inc/err.php");
  24. }
  25. }


czy da sie w tym samym switchu zrobic cos na zasadzie:


TO NIE DZIALA
  1. ...
  2. if(checkLogin() && ($row['name'] != 'user') || ($row['name'] != 'mod') || ($row['name'] != 'root' )) {
  3. case "profile":
  4.  
  5. ....
  6.  
  7. break;
  8. }
  9. ....


czyli obejmuje ifem zawartosc case

chodzi mi o to ze w ifie ma byc kilka casow i zeby nie powtarzac nascie razy tego samego ifa bo to bezsensu chyba ale moze nie da sie inaczej..
KsaR
Nie da sie tak niestety tongue.gif, musisz po case '': robic warunek.
--
Btw, troche powtarzasz kod.. Te include'y.
nie lepiej cos typu:

  1. switch ($cos)
  2. {
  3. case 1:
  4. $inc='sciezka';
  5. break;
  6. case 2:
  7. $inc='sciezka2';
  8. break;
  9. default: $inc='sciezka domyslna';
  10. }
  11. include $inc.'.php';

?
eminiasty
twoj kod rozni sie tylko tym ze ujmujesz funkcjie include czy to sie rozni jakos w predkosci dzialania czy cos w tym stylu?
KsaR
Nie, ale bardziej praktyką. (Istnieje taka zasada jak DRY - don't repeat yourself - nie powtarzaj sie).
Póki co raczej ci wydluzylo kod.
Ale teraz dodaj do tego cos typu np.
$zmienna=1;

I tak w kazdym, wtedy juz kod bedzie powtorzony, bo mozna by przeciez napisac raz :-P.
Ale za to masz latwa edycje itd zamiast kazdego to mozesz 1.. Itp
--
Mialem raz podobny switch, to tak sie rzucilo w oczy.
Musialem zmienic kazdemu sciezke do include, na podfolder, i/lub pod-podfolder.
I lipa, bo bylo ich ponad 60.
Dalbym konkretniejszy przyklad ale go nie pamietam.
Wiem ze mi bardzo ulatwilo to, bo moglem zrobic np.
$x=false; przed switchem, i w ewentualnych case dodac $x=true;
I zamiast prawie kazdemu po kolei zmieniac sciezke, moglem copy-paste $x=true; tongue.gif

i w include np.
include '/xxx/'.($x?'/yyy/':'').$inc.'.php';
eminiasty
no dobra sprobuje i tak moze rzeczywiscie to ulatwia

a teraz mam jeszcze jedno pytanie zeby nie robic nowego posta to tutaj

mam strukture plikow typu

header.php
content.php
index.php
footer.php

(tak w uproszczeniu wielkim)

i teraz w indexsie jest swich obslugujacy calosc
po zalogowaniu zabezpieczam strony typu poczta.php , galeria.php,profil.php czy cos tam jeszcze ktore sa po zalogowaniu (oczywiste)
ale czy pliki typu sidebar, header footer tez sie zabezpiecza zeby nie byly dostepne po wpisaniu sciezki w pasku?

np localhost/blbl/footer.php (otwiera sie footer strony) -> wow a tu wejscie do panelu admina (tak abstrakcyjnie)

tez trzasnac jakiegos ifa trzeba lub funkcje? czy to sie zostawia i jedynie zawartosc tych plikow pisze w taki sposob zeby byly nie przydatne dla potencjalnego "hakiera"

btw

include '/xxx/'.($x?'/yyy/':'').$inc.'.php';

tego zapisu troche nie ogarniam ;p
KsaR
Hm, footer, itp.
To raczej sprawdzasz w nich czy ktos online. Przydatne przy tym moga byc 'ternary operator'

  1. echo 'tresc dla wszystkich', (isset($_SESSION['id'])?' Treść dla online':''),' znow tresc dla wszystkich.';

Aha, ps. Nie doczytalem edit.
To co wyzej to tez ternary operator.

  1. # Czyli zamiast robic np.
  2.  
  3. if (true)
  4. {
  5. $x='a';
  6. }
  7. else
  8. {
  9. $x='b';
  10. }
  11.  
  12. # Można to zrobić tak:
  13. $x=true?'a':'b';

Przy jedno linijkowych zapiskach przydatne.
--
http://php.net/manual/en/language.operator...parison.ternary
eminiasty
czyli wchodzac na footer widac to ze np strona www.maslo.pl(biale tlo bo ccs nie dziala) lecz nie wdidac menu w stopce bo blokuje go if sesji?
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.