Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] 2 pytania ($_SERVER, $_GET i if z macierzą)
Forum PHP.pl > Forum > Przedszkole
statek
Witam,

napisałem sobie skrypt rozpoznający wybrany język i zapisujący go do ciasteczek. Wszystko działa, ale mam wątpliwość czy można pewne sprawy rozwiązać prościej. Na stronie mam pełno odnośników postaci:

http://strona.pl/index.php?zm1=ble&zm2=ole&zm3=jupi

a aktualny adres pobieram tak:
$aktualny_adres= 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING']; //może jest funkcja zwracająca cały adres, jaka?

i wstawiam jako odnośnik:
echo '<a class="polski" href="' . $aktualny_adres . '&lang=pl"></a>';

I niby jeśli ktoś będzie stale zmieniać adres, nie klikając w jakiś odnośnik do podstrony. to zbiera się w adresie:
&lang=pl&lang=pl&lang=pl&lang=en&lang=pl

Mogę napisać ifa, który to wycina z adresu i fajnie. Ale czy jest lepszy sposób? Czy da się jakoś przekazywać wartości zmiennych (nadanych w czasie kliknięcia) aby nie było ich w adresie? Albo czy da się zrobić coś takiego:
1 jeśli kliknięcie w określony obszar (np odnośnik), to
2 wykonaj zbiór instrukcji, po czym
3 przejdź do nowej lokalizacji.



Jeśli tak to w jaki sposób, jakieś wskazówki?

I ostatnie pytanie, czy jeśli mam ifa postac:
if( $a==1 || $a==3 || $a==11 || $a==5 )
{
...
}
to można w jakiś sposób, użyć tablicy? if( a= array(1, 3, 11, 5) ), jak to zrobić?

Pozdrawiam i proszę o odpowiedzi i wskazówki.
Spawnm
np w sesje możesz dać język.
session_start" title="Zobacz w manualu PHP" target="_manual na pocztątku pliku i potem $_SESSION['lang']='pl';
Fifi209
in_array" title="Zobacz w manualu PHP" target="_manual

zrób sobie print_r($_SERVER); a sam się dowiesz.
statek
Dzięki za odpowiedzi!

Spawnm tylko ja nie pytałem jak zapisać wartość do sesji albo ciasteczka. Chodzi o to jak wykonać jakąkolwiek instrukcje (w tym przypisanie) jednocześnie z kliknięciem użytkownika w odnośnik. Bo użytkownicy mogą zmienić język i miło by było gdyby dało się uniknąć dopisywania: 〈=pl do adresu

fifi209, to in_array jest super! Szkoda, że nie można wpisywać w ifa tablic tak jak w: str_replace(array("\r\n", "\r", "\n"), '', $string).
Znalazłem: REQUEST_URI - zawiera adres bez nazwy domeny. Czyli wystarczy dodać go do HTTP_HOST i mam aktualny adres, zamiast składać 3 stringi. O to chodziło? Czy może jest coś jeszcze? Albo czy może się zdarzyć, że REQUEST_URI będzie niedostępne a PHP_SELF i QUERY_STRING będą dostępne? Albo na odwrót? Ewentualnie HTTP_REFERER nadałoby się do aktualnego adresu przy zmianie języka, bo poprzedni i aktualny adres różnią się tylko 〈=en, który jest zapisywany do ciastka/sesji. Czyli HTTP_REFERER wypada najwygodniej, ale czy jest równie niezawodne co tamte? Zawsze będzie działać? Czy obojętne których wartości będę używał?

Ponawiam pytanie: czy da się inaczej niż poprzez dodawanie do adresu, przekazywać wartości nadane zmiennym podczas kliku?


Pozdrawiam.

PS
Mam dwa nowe pytania:
Jak wywołać funkcje, której nazwę mam zapisaną w tablicy jako string (wcześniej została includowana)?
Napisałem skrypt, który działa ale po przerobieniu go na funkcje (dodadniu function nazwa(){ ... return; } i includowaniu pliku z funkcją nie jestem wstanie wywołać tej funkcji, gdzie może być błąd - nawiasy i średniki sprawdziłem setki razy ...
Fifi209
eval" title="Zobacz w manualu PHP" target="_manual

Co do funkcji masz:
return;

A przecież coś zwracać musi...

Co do rozwiązania z adresem - moim zdaniem jak Ci wygodniej - i tak to co od użytkownika to można podmienić. ^^


Co do języków...

Zapisz np. do cookie

set_cookie" title="Zobacz w manualu PHP" target="_manual

@edit Pamiętaj, że najpierw wysyłamy do użytkownika nagłówki i cookie. haha.gif

I co do języków możesz zawsze post'em przekazać? Fuuuuj! Bierz rozwiązanie z cookie albo sesjami.
Spawnm
Mam dwa nowe pytania:
Jak wywołać funkcje, której nazwę mam zapisaną w tablicy jako string (wcześniej została includowana)?
Napisałem skrypt, który działa ale po przerobieniu go na funkcje (dodadniu function nazwa(){ ... return; } i includowaniu pliku z funkcją nie jestem wstanie wywołać tej funkcji, gdzie może być błąd - nawiasy i średniki sprawdziłem setki razy ...
  1. <?php
  2. function foo(){
  3. echo 'bar';
  4. }
  5. $x='foo';
  6. $x();
  7. ?>


pokaż skrypt.
statek
Dzięki za odpowiedzi!

fifi209 dzięki za eval:)
co do funkcji to mam:
function abc() // nic nie pobieram, bo korzystam tylko z $_SERVER i $_GET
{
petla1{}
petla2{}
petla3{}
return $zm;
}

w każdej pętli coś się dzieje i jest zapis do zmiennej $zm, jeśli zmienię i dam kilka returnów w pętlach to efekt ten sam - nie mogę wywołać funkcji. Czym freewearowym pod win mogę debugować skrypty php?

A do języków używam ciasteczek ale czasem użytkownik chce zmienić język i jakoś muszę przekazać tą informację.

Czy da się jakoś ominąć metodę GET aby nie było tego badziewia widać w adresie? Czy można jakoś inaczej przekazywać zmienne i ich wartości, albo maskować adresy?


Pozdrawiam.


Spawnm jeśli do jutra nie znajdę problemu to wykleję skrypt i poproszę o znalezienie błędu - już nerwicy dostaje z tym skrypcikiem ....


@edit
teraz mnie chyba olśniło czy jak w funkcji mam instrukcje: setcookie to ciasteczko jest normalnie ustawiane, czy musze jakoś to zglobalowac?
erix
Cytat
Czy da się jakoś ominąć metodę GET aby nie było tego badziewia widać w adresie?

Jeśli zapamiętasz język w sesji, to nie. Ale przynajmniej pierwsze wywołanie będzie musiało zawierać identyfikator języka, jeśli nie będzie się on zgadzał z tym wykrytym na podstawie nagłówków.

Cytat
setcookie to ciasteczko jest normalnie ustawiane, czy musze jakoś to zglobalowac?

No już nie zajrzeć do manuala na setcookie" title="Zobacz w manualu PHP" target="_manual i zadawać takie pytania, to trzeba mieć tupet. O jakimkolwiek kursie PHP nie wspomnę.
statek
erix
Już się pogodziłem (prawie) z tymi brzydkimi adresami.
Czytałem o setcookie w manualu i wydawało mi się, że to zmienna globalna i zawsze mam do niej dostęp, z każdego miejsca. Ale wolałem się upewnić, bo w poszukiwaniu błędu w mojej funkcji zacząłem zastanawiać się nad każdą możliwością. Błędu jeszcze nie znalazłem, ale jutro mam pół dnia na poszukiwania.
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.