Piszę pewien projekt, który uwzględnia "przyjazne url" ale nie przy pomocy mod_rewrite lecz za pomocą zmiennej predefiniowanej $_SERVER['PATH_INFO']. Stosuję także własne oznaczenia dla parametrów url, np. dla kataegorii.
<?php $_SERVER['PATH_INFO'] = (isset($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO'] != '/') ? $_SERVER['PATH_INFO'] : '/'; ?>
Czyli upraszczając:
ADRES URL:
Link w postacji domena.pl/strona/podstrona/cat,100,name.html oznacza:
strona - plik strony (bez rozszerzenia - w .htaccess <Files index>ForceType application/x-httpd-php</Files> dzięki czemu rozpoznawany jest jako php)
podstrona - wymyślona nazwa podstrony, nie mająca fizycznego odpowiadnika w postaci pliku
cat,100,name.html - parametr kategorii url - gdzie cat - wskaznik typu parametru, 100 id kategorii, name - nazwa kategorii
Istnieje możliwość stosowanie kilku kategorii poprzez oddzielenie ";" - domena.pl/strona/podstrona/cat,100,name;cat,200,name2.html
Wszystkie dane dotyczące kategoii przechowywane są w tablicay $cats, np:
<?php 'isValid' => true, 'catId' => 100, 'catName' => 'name' ), 'isValid' => true, 'catId' => 200, 'catName' => 'name1' ) ); ?>
SESJA:
Do kontroli poprawności sesji stosuję zmienną $_SESSION['isValid'] ktora standardowo definiowana jest przez:
<?php ?>
Natomiast funkcja sprawdzającą wartość poprzedniej zmiennej to:
<?php function session() { if(!$_SESSION['isValid']) { } } } ?>
FUNKCJA KONTROLI BLEDOW
Do kontroli bledow w calej aplikacji posiadam funckje error(), która zajmuje się międzyinnymi zmianą zmiennej kontroli sesji na false:
<?php function error() { $_SESSION['isValid'] = false; } ?>
WERYFIKACJA POPRAWNOSCI LINKU
Jeśli zmienna $check = true, wtey jest aktywowana weryfikacja poprawności linku, którą wygląda np tak:
<?php if($check == 1) { //sprawdzanie ilości kategorii (założmy makimum 2) { } //sprawdzenie poprawnosci czesc url zawierajacej dane kategorii (sprawdzenie "koncowki" html oraz ilosci czesci powstalych z podzielenia przez znak "." powinno być 2 - czesc danych kategorii z url + . + html { } } ?>
Problem polega na jak gdyby somodzielnym wykonaniu instrukcji die().
Wpisanie adresu domena.pl/strona/cat,100,name.html lub bez kategorii domena.pl/strona/ i ponowne odswiezenie strony zmienia wartosc zmiennej $_SESSION['isValid'] na false, pomimo tego ze zaden z doch if-ow nie powinien byc wykonany, bo adres url i parametry kategorii sa ok. Nawet gy umiescimy w kazdym if-ie echo z jakim napisem, nie sotanie on wyswietlony bo ulr jest ok, a pomimo to funckja die zostaje wywolana.
I teraz czego wlasnie nie rozumiem zostaje wywolana tylko przez drugiego if-a (sprawdzenie poprawnosci czesc url) pierwszy if dziala ok. jesli nawet funkcje die w drugim if-ie wezme w komentarz i umieszcze echo, napis sie nie wyswietli a usuniecie komentarza spowoduje wykonanie if-a.
Jedynym rozwiazaniem jest usuniecie $_SESSION['isValid'] = false; z funckji error lub usuniecie die z drugiego if-a.
Systuacja ta nie ma miejsca dla linku w postaci domena.pl/strona a wpisanie domena.pl/strona/ lub domena.pl/strona/cat,100,name.html i odswiezenie strony wywoluje blad.
Oczywiscie wszystkie te funckje sa w maksylanym uproszczeniu, zey zaprezentowac istote problemu, bo nie moge zrozumiec dlaczego instrukcja if ktorej warunki nie sa spelnione wykonuje sie pomimo tego.
prosze o jakies wskazowki? pozdrawiam