Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]POMOCY! ----- $_SERVER['PATH_INFO'] + sesje
Forum PHP.pl > Forum > Przedszkole
siemieng
witam, siedze juz nad tym 3 dzien, pytalem 2 razy na forum, pytam ponownie, poniewaz metoda wyciania fragmentow kodu doszedlem gdzie jest blad.

W projekcie stosuje "przyjazne linki" poprzez zastosowanie $_SERVER['PATH_INFO']:
  1. <?php
  2. $_SERVER['PATH_INFO'] = (isset($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO'] != '/') ? $_SERVER['PATH_INFO'] : '/';
  3. $_url = explode('/', substr($_SERVER['PATH_INFO'], 1));
  4. ?>

Dzieki temu otrzymuje adres url: domena.pl/strona/podstrona1/podstrona2/ (strona plik fizyczny - podstrony - moje wymyslone nazyw dla dzialow).

Problem pojawia sie przy pobraniu, a nawet nie tyle przy pobraniu co sprawdzeniu wartosci wpisanego adresu url:
  1. <?php
  2. //POBRANIE WARTOSCI PODSEKCJI URL
  3. $_rSubsections = array(); //tablica pobranych warosci url (podeskcje)
  4. $limit = 3;//maksymalne liczba podsekcji w url
  5. for($i=0; $i<$limit; $i++)
  6. {
  7.    if(!empty($_url[$i]))
  8.    {
  9.        $_subsection = array();
  10.        $_subsection['isExist'] = true; //zmienna kontrolna
  11.         $_subsection['value'] = $_url[$i]; // wartosc wpisana w url
  12.         if(isset($_SUBSECTIONS[$_url[$i]]))
  13.         {
  14.             $_subsection['code'] = $_SUBSECTIONS[$_url[$i]][0]; // kod sekcji pobrany z pliku konfiguracji ($_SUBSECTIONS)  na podstawie wartosci z url
  15.         }
  16.         $_rSubsections[] = $_subsection;
  17.     }
  18.     else
  19.     {
  20.         $_rSubsections[]['isExist'] = false;
  21.     }
  22. }
  23. ?>

Wynik print_r($_rSubsections) dla url np: domena.pl/strona/ustawienia/
Array
(
[0] => Array
(
[isExist] => 1
[value] => ustawienia
[code] => b:000
)

[1] => Array
(
[isExist] =>
)

[2] => Array
(
[isExist] =>
)
)
I do tej pory jest ok. Znaczy wszystkie mozliwe podeskcje sa zapisane w tablciy php, czy pliku xml, czy bazie danych. Wyglada to tak:

(nazwa) ustawienia | (kod) b:000 | (pelna_nazwa) ... | (tytul) ... | itd...

I teraz zwyczajnie chce sprawdzic, czy uzytkownik podal prawidlowy adres url, czyli poruwnuje pobrana z url wartosc (w tym przypadku "ustawienia") i sprawdzam jej istnienie w konfiguracji, jak jest ok, pobieram kod (b:000) ktorym sie posluguje w pozostalej czesci aplikacji dla tej podesekcji.

Jesli zostanie podana bledna wartosc url np: domena.pl/strona/ustawienia/podsekcja/
Array
(
[0] => Array
(
[isExist] => 1
[value] => ustawienia
[code] => b:000
)

[1] => Array
(
[isExist] => 1
[value] => podsekcja
)

[2] => Array
(
[isExist] =>
)

)
Nie zostanie jej przypisany kod podeskcji. I teraz sprawdzam to np tak:
  1. <?php
  2. foreach($_rSubsections as $_tempSubsection)
  3. {
  4.    if($_tempSubsection['isExist'] && isset($_tempSubsection['value']))
  5.    {
  6.        if(empty($_tempSubsection['code']))
  7.        {    
  8.            echo 'tekst probny';
  9.            $_SESSION['DATA']['isValid'] = false;
  10.        }
  11.    }
  12. }
  13. ?>


I teraz blad polega na tym, za kazdym razem wykonywane jest $_SESSION['DATA']['isValid'] = false; nawet jesli warunki if-ow nie sa spelnione, czyli takst "tekst probny" z wewnetrznego if-a sie nie ukarze a wartosc zmiennej sesyjnej sie zmienia.
Problemu nie jedynie dla sytuacji, w ktorej podana jest maksylana liczba sesji (tu 3) czyli np: domena.pl/strona/ustawienia/dostep/haslo/.

Przez caly dzisiejszy dzien sprawdzalem to na dziesiatki sposobow, rozne rodzje zapisu, rozne sposoby sprawdzania czy zostal wygenerowany kod dla wprowadzonej podsekcji, wkoncu czepilem sie typow zmiennych ale naet jak wartosci flase/true usatwie na stringi jest tak samo:/

Wydaje sie ze to moj jakis glupi blad, ale nie moge sobie z nim poradzic, POMOCY!!!


zadnych pomyswlo?? :/ zastanawiam sie czy moe miec to zwiazek z typem zmiennych ale chyba nie - prosze raz jeszcze o jakies wskazowki
Pilsener
  1. <?php
  2. if(empty($_tempSubsection['code']))
  3.       {    
  4.           echo 'tekst probny';
  5.           $_SESSION['DATA']['isValid'] = false;
  6.       }
  7. ?>
- pisałem już Tobie o tym winksmiley.jpg Nie musi wyświetlać się "tekst probny", by:

  1. <?php
  2. if($_SESSION['DATA']['isValid']){
  3.   echo 'true';
  4. }else{
  5.   echo 'false';
  6. }
  7. ?>
- wyświetlało false, wystarczy, że isValid nie jest true, a nie widzę, żebyś gdzieś ustawiał true - domyślnie zawsze będzie false.
siemieng
Cytat(Pilsener @ 3.07.2009, 01:00:56 ) *
  1. <?php
  2. if(empty($_tempSubsection['code']))
  3.       {    
  4.           echo 'tekst probny';
  5.           $_SESSION['DATA']['isValid'] = false;
  6.       }
  7. ?>
- pisałem już Tobie o tym winksmiley.jpg Nie musi wyświetlać się "tekst probny", by:

  1. <?php
  2. if($_SESSION['DATA']['isValid']){
  3.   echo 'true';
  4. }else{
  5.   echo 'false';
  6. }
  7. ?>
- wyświetlało false, wystarczy, że isValid nie jest true, a nie widzę, żebyś gdzieś ustawiał true - domyślnie zawsze będzie false.


Nie no mam domyslne ustawienie zmiennej sesyjnej - na samym poczatku:
  1. <?php
  2. session_start(); $_SESSION['DATA']['isValid'] = (isset($_SESSION['DATA']['isValid'])) ? $_SESSION['DATA']['isValid'] : true;
  3. ?>
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.