Diskuze: přesměrování bez úpravy header
V předchozím kvízu, Online test znalostí HTML a CSS, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 27 zpráv z 27.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí HTML a CSS, jsme si ověřili nabyté zkušenosti z kurzu.
To asi budeš muset přesměrovat meta tagem
<meta http-equiv="refresh" content="0;url_adresa">
Nebo pak javascriptem:
<script>window.location.href = "URL adresa";</script>
Pokud používáš PHP, jak předpokládám, tak to dej do echo na místo,
kam chceš přesměrování. Osobně si ale myslím, že je lepší zpracovávat
formuláře nad veškerým HTML, kde se dají upravovat hlavičky. Je to
čistší řešení
Pokud chceš jen zpracovat data a přesměrovat zpět, tak přesně pro tento účel se obvykle odešle hlavička. Z jakého důvodu je nechceš modifikovat?
no zajímal mě způsob jak to udělat bez změny header a také jsem měl
vložený formulář někde uprostřed kódu a zrovna se mi to nechtělo
předělávat, ale teď už jsem si udělal fci, která ten formulář vypisuje
tím pádem jsem použil normálně fci header() pro přesměrování, ale
vyskytl se bohužel jeden problém.... Strukturu webu mám udělanou tak, že
mám index a do toho načítám obsah přes parametr metodou get. Potřeboval
bych tedy aby se mi stránka přesměrovala na stránku na které jsem odeslal
formulář např. na index.php?aaa=bbb
K získání aktuální url jsem použil toto:
Sheader("Location: http://$_SERVER[SERVER_NAME]" . substr($_SERVER["PHP_SELF"] . $_GET["aaa"], 0, strrpos($_SERVER["PHP_SELF"], "/")) . "/");
Teď se mi ale stránka "vrátí" vždy jen na index.php. Mohli byste mi ještě helpnout? ... Díky
Proč to neudělat jednoduše?
header("Location: index.php?aaa=$_GET[aaa]");
Zpracovávat formulář a zároveň generovat výstup je jízdenkou do pekel. Nejjednodušší je pouze ten formulář zpracovat, uložit a použít header('Location: ...') pro další zobrazení. Krásně se tím ošetří možný reload nebo couvnutí návštěvníka na stránce. Je to v kdejaké učebnici PHP.
Předpokládám, že v URL bude název souboru se skriptem, takže urlencode ani být nemusí. To bych tam dal v případě, že chci načítat nějaký řetězec textu s mezerami apod.
Právě proto bych ho tam raději dal. Jako vždy. Vždy se může najít nějaký filuta, který tam nacpe nějaké kraviny a pak se webmaster nestačí divit.
Jak se při zpracování formuláře ze souboru form.php skriptem zpracuj.php řeší, aby se v každém případě po odeslání přesměrovalo headerem na form.php a v případě nevalidních údajů zůstal formulář předvyplněný? Resp. jak nacpat při přesměrování ty data zpět formuláři, jde to nějak dosadit do POST?
Například přes session. Skript zpracuj.php do něj uloží pole s hodnotami POST. Skript form.php si je vyzvedne a vloží do políček.
Nojo, session, to mě mohlo napadnout. A přímo do POST to nedostanu?
Návštěvník může do URL či do POSTu uložit to, co se mu zlíbí. Útočníci to dělají velmi rádi.
Nevím, jestli tě dobře chápu, ale to by snad šlo přes skryté pole z formuláře.
Já myslel tou funkcí header, jestli v té hlavičce mohu zároveň odeslat i něco v POST.
Zrovna mě nenapadá, jak to do toho POSTu nacpat, mohlo by to jít i přes cookies, ale je tam riziko, pokud by byl příspěvek nadlimitní velokosti.
Také je možné celý ten POST nacpat do nějaké databáze a do session vložit jen ID. Takové ID bych však určitě nedával do location nebo cookies. Bylo by to nebezpečné.
Ovšem v případě NEpřijetí dat si tuto starost můžeme odpustit, protože datové záznamy jsme nezměnili a v klidu ve zpracování výjimky můžeme vygenerovat formulář znovu i s předvyplněnými hodnotami. Jen je to trochu pracnější a narušuje to architekturu MVC.
Pokud je důvodem nepřijetí překonání zábran v podobě javascriptových kontrol formuláře, jeví se mi to jako zbytečné úsilí. Prostě to vyplnil blbě a hotovo. Nemá obcházet javascriptové kontroly.
Můžeš použít rozšíření PHP cURL, které umí odesílat POST požadavky.
Server by to odeslat uměl, ale obávám se, že většina webových klientů by to jednoduše zahodila. Nevím nezkoušel jsem.
Dal by se využít AJAX. To by fungovalo a také se to k těmto účelům používá.
PHP curl funguje jako klient. My potřebujeme, aby se to chovalo jako server.
Já jsem se špatně vyjádřil. Potřeboval bych měnit hodnotu parametru,
podle toho kde by se uživatel před odesláním formuláře na webu
nacházel.
Např.: když by se nacházel na index.php?aaa=ccc
tak by ho to po odeslání formuláře odeslalo na stejnou adresu
(tj.index.php?aaa=ccc)
když by se nacházel na index.php?aaa=ddd tak by ho to přesměrovalo na
index.php?aaa=ddd
Jak by to šlo udělat?
Když to udělám takhle:
header("Location: index.php?aaa=$_GET[aaa]");
Tak to samozřejmě nefunguje, protože v ten okamžik má parametr "aaa" hodnotu NULL
No tak si pošli ten parametr do toho skriptu, který to zpracovává a z něj potom zpět do indexu. U formu změň action="zpracuj.php" na "action=zpracuj.php?aaa=<?= $_GET["bbb"] ?>". Nebo si v tom formu udělej skryté pole a do něj vkládej ten parametr z getu, to je ještě čistší.
A to je takový problém si to uložit do skrytého pole formuláře? Pokud to chceš bezpečněji, tak klidně do session.
Jestli něco vyplodíš, tak to pak můžeš na ukázku poslat do kritiky
webů. Jinak není zač, jsme rádi za každou konstruktivní diskuzi
Zobrazeno 27 zpráv z 27.