PDA

Zobacz pełną wersję : Przekierowanie zmiennych z komponentu html (fomularz) do artykułu.



prostepc
12-11-2012, 10:22
Witam,

Mam następujący problem. Robię moduł własny kod html gdzie umieszczam formularz z polami do własnej wyszukiwarki na podstawie bazy danych. Po naciśnięciu przycisku szukaj przenosi mnie do artykułu wyniki wyszukiwania gdzie jest kod php umieszczony za pomocą modułu directphp. Kod php w artykule działa ale nie przekazywane są zmienne z formularza. Po przejściu pod adres artykułu w adresie widać przekazywane zmienne przez formularza jednak skrypt w artykule wyświetla tak jak by zmienne były puste. Czy ktoś może wie jak przekazać zmienne z modułu do artykułu w adresie.


Dziękuję za pomoc.

Dziudek
12-11-2012, 11:25
A jak pobierane są zmienne w skrypcie? Bo jeżeli zmienne są w adresie to na pewno można się do nich dostać z poziomu kodu PHP. Ewentualnie można wykorzystać inne metody przekazywania zmiennych - zserializowane dane w cookies lub localStorage.

prostepc
12-11-2012, 11:53
W formularzu jest metoda post i w adresie jest: www.adresstrony.pl/wynikiwyszukiwania.html?zmienna1=1&zmienna2=2 (http://www.adresstrony.pl/wynikiwyszukiwania.html?zmienna1=1&zmienna2=2) i tak dalej. Jak rozumiem dobrze to w skrypcie wywołać je mogę i wyświetkić np przez echo($_POST['zmienna1']);. Niestety takie wywołanie nie daje rezultatu. Te dane z formularza chce wykorzystać jako parametry do zapytania do bazy mysql i wyświetlić wyniki takiego zapytania w miejscu artykułu lub ewentualnie w innym module.

Dziudek
12-11-2012, 12:02
Tak własnie czułem, że tutaj tkwi problem - zmienne przekazywane w adresie, przekazujemy poprzez zmienne $_GET a nie $_POST ;) Zmienne typu $_POST przepadną po drodze w wywołaniach i wewnętrznym routingu Joomla! :)

Zatem poprawny kod to:



echo $_GET['zmienna'];


Chociaż namawiam by opakować to we własną funkcję oczyszczającą z potencjalnych ataków XSS lub pobierać zmienne poprzez klasę JRequest (o ile w takim directPHP to zadziała).

prostepc
12-11-2012, 12:14
Czyli muszę wysyłać dane z formularza metodą get? A jeśli chodzi o te ataki xss to chodzi o to żeby nie było były widoczne dane w adresie po przekierowaniu? Czyli jakąś funkcję js musze zastosować aby to zakodować czy dobrze rozumiem ?

Dziudek
12-11-2012, 12:24
też ;) Atak XSS to np. próba wykonania kodu JavaScript poprzez zawartość zmiennej GET - jeżeli jej zawartość nie jest filtrowana to mogą być problemy, bo teoretycznie można przesłać w niej co się chce (to samo ze zmiennymi POST). Joomla ma wbudowane funkcje filtrujące np. JRequest::getCmd, które dopuszczają tylko określony zakres znaków w wartości zmiennej co uniemożliwia osadzenie w zmiennej np. kodu JavaScript.

Polecam ogólnie lekturę: http://pl.wikipedia.org/wiki/Cross-site_scripting i wyrobienie sobie nawyko filtrowania wszelkich zmiennych które mogą pochodzić od użytkownika (w tym także zmiennych $_SERVER).

prostepc
12-11-2012, 12:37
Czyli wystarczy w skrypcie z wynikami wyszukiwania przepuścić każdą zmienną w tym wypadku GET przez taka fukcję filtrującą jej zawartość i to załatwia sprawę tego ataku xss tak ?

Dziudek
12-11-2012, 12:53
tak ;) jeżeli zmienne przechowuja np. liczby to trzeba sprawdzić czy przekazywana jest rzeczywiscie liczba itd.

prostepc
12-11-2012, 13:02
a można jakoś ukryć te zmienne w adresie przekazywanym tak żeby nie były pokazywane ?

Dziudek
12-11-2012, 13:49
do tego służą zmienne typu $_POST ale w tym wypadku to raczej nie zadziała bo Joomla wykonuje w procesie renderowania strony własne operacje i przekierowania co może skutkować utraceniem wartości tych zmiennych. za to na pewno użycie post nie chroni przed atakami XSS - i tak trzeba te zmienne filtrować.

prostepc
12-11-2012, 14:18
a jak wygląda stosowanie tej klasy JRequest? Jaka jest składnia? to jest jakby odpowiednik odwoływania się do zmiennych tak jak w php przez $_Request['nazwa_zmiennej']?. Nie znam tych klas w joomli

Dziudek
12-11-2012, 17:13
Dokumentacja znajduje się tutaj:

http://docs.joomla.org/JRequest/11.1

Przykładowo wywołanie metody getCmd wygląda następująco dla zmiennej abc typu $_GET:

JRequest::getCmd('abc');

Przy czym nie gwarantuję, że klasa JRequest będzie działać w kodzie osadzonym poprzez directPHP, w razie czego w internecie jest mnóstwo funkcji filtrujących, choć jeżeli np. zmienna ma być liczbą lub ciągiem znaków to wystarczy często zamiana niedozwolonych znaków poprzez preg_replace_all.

prostepc
13-11-2012, 14:55
A czy gdybym to wrzucił jako np kod z pliku php w module jumi albo flexi code? Bedzie tam działała ta funkcja JRequst::getCmd ?

prostepc
13-11-2012, 16:35
A możesz mi powiedzieć czemu może nie odświeżać mi danych zmiennych z formularza jak używam go ponownie z innymi wartościami zostają wartości starsze.

Dziudek
13-11-2012, 19:48
Prawdę mówiąc nie wiem - wszystko zależy od tego czy byłyby tam dostępne zmienne z API Joomla! - po prostu trzeba to sprawdzić ;)

Co do odświeżania zmiennych: przypadkiem nie wstawia ostatnio wprowadzonych zmiennych przeglądarka automatycznie? Bo np. Chrome ma autouzupełnianie, które wypełnia formularz od razu.

prostepc
14-11-2012, 09:39
Automatycznie pokazuje mi w polach <select> <option> pierwszą opcję i chociaż wybieram co innego wyświetla mi w większości właśnie te pierwsze opcje ktore pokazywane są już po załadowaniu formularza. Na razie sprawdzałem na chromie i na operze i w każdym przypadku jest tak samo.

prostepc
14-11-2012, 10:26
Przy pierwszym skorzystaniu z formularza dane są pokazywane prawidłowo, każdy kolejne użycie formularza już kończy się pokazywanymi takimi samymi danymi nie wiem czemu bo w adresie przekazywanym są dobre dane wybrane przez ze mnie w formularzu.

Dziudek
14-11-2012, 22:05
Prawdę mówiąc nie wiem, musiałbym to zobaczyć na żywo, żeby móc coś powiedzieć odnośnie tego problemu.