Mam stronę, która zawiera listę pozycji według wielu parametrów, tj. zmiennych z wartościami.php; usuń pojedynczą parę wartości zmiennej z querystringa
listitems.php?color=green&size=small&cat=pants&pagenum=1 etc.
Aby włączyć możliwość edycji listy, mam zmienił parametr = 1, który jest dołączany do powyższej kwerendy dać:
listitems.php?color=green&size=small&cat=pants&pagenum=1&edit=1
tej pory tak dobrze.
Po zakończeniu edycji użytkownik ma łącze, które wychodzi z trybu edycji. Chcę, aby ten link określał cały ciąg znaków zapytania - niezależnie od tego, jaki jest, zależnie od wyboru użytkownika - poza usunięciem edycji = 1.
Kiedy miałem tylko kilka zmiennych, po prostu wylistowałem je ręcznie w łączu, ale teraz, gdy jest ich więcej, chciałbym programowo móc usunąć edycję = 1.
Czy powinienem wykonać jakieś wyszukiwanie dla edycji = 1, a następnie zastąpić ją niczym?
$qs = str_replace("&edit=1, "", $_SERVER['QUERY_STRING']);
<a href='{$_SERVER['PHP_SELF']}?{$qs}'>return</a>;
Albo jaki byłby najczystszy bezbłędnie sposób na zrobienie tego.
Uwaga: Mam podobną sytuację, gdy przechodzę od strony do strony, gdzie chciałbym wyjąć pagenum i zastąpić go innym. Tam, ponieważ pagenum jest zmienne, nie mogę po prostu wyszukać pagenum = 1, ale musiałbym szukać pagenum =$pagenum
, jeśli to robi jakąkolwiek różnicę.
Dzięki.
Jak zrobić to z $ _SERVER [ 'QUERY_STRING']? – user1904273
Istnieje 'parse_url()' i 'parse_str()', ale $ _GET jest zawsze dostępny i wypełniony, więc nie jest to konieczne. – Sven
Nie zmodyfiowałbym zmiennej $ _GET (ani żadnych superglobałów), ponieważ mogłyby być potrzebne w innym miejscu aplikacji. Zamiast tego utwórz tymczasową zmienną, taką jak '$ edit_query = $ _GET;'. Następnie możesz 'unset ($ edit_query ['edit']);' bez wpływu na twoje superglobale. – Number1SuperGuy