Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: přesměrování bez úpravy header

Aktivity
Avatar
user
Tvůrce
Avatar
user:13.4.2012 16:23

Ahoj,
nahrávám soubory na server a po úspěšném nahrání potřebuji přesměrovat na původní stránku z které se odesílal formulář, bez toho aniž bych upravoval hlavičky... Mohl by mi někdo prosím pomoci s mím problémem....?

 
Odpovědět
13.4.2012 16:23
Avatar
Drahomír Hanák:13.4.2012 16:36

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í ;)

 
Nahoru Odpovědět
13.4.2012 16:36
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:13.4.2012 17:37

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?

Nahoru Odpovědět
13.4.2012 17:37
You are the greatest project you will ever work on.
Avatar
user
Tvůrce
Avatar
user:13.4.2012 18:11

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

 
Nahoru Odpovědět
13.4.2012 18:11
Avatar
Odpovídá na user
Drahomír Hanák:13.4.2012 18:30

Proč to neudělat jednoduše?

header("Location: index.php?aaa=$_GET[aaa]");
 
Nahoru Odpovědět
13.4.2012 18:30
Avatar
Kit
Tvůrce
Avatar
Odpovídá na user
Kit:13.4.2012 18:33

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.

Nahoru Odpovědět
13.4.2012 18:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
Kit:13.4.2012 18:36

Když už, tak

urlencode($_GET['aaa'])
Nahoru Odpovědět
13.4.2012 18:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Drahomír Hanák:13.4.2012 18:45

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.

 
Nahoru Odpovědět
13.4.2012 18:45
Avatar
user
Tvůrce
Avatar
user:13.4.2012 18:45

no jo, ale teď má $_GET[aaa] hodnoutu NULL, protože to spouštím z zpracuj.php (zpracovani form)

 
Nahoru Odpovědět
13.4.2012 18:45
Avatar
user
Tvůrce
Avatar
user:13.4.2012 18:48

teď jsem tě Kite nepochopil...

 
Nahoru Odpovědět
13.4.2012 18:48
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
Kit:13.4.2012 19:12

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.

Nahoru Odpovědět
13.4.2012 19:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:13.4.2012 19:18

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?

Nahoru Odpovědět
13.4.2012 19:18
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:13.4.2012 19:27

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.

Nahoru Odpovědět
13.4.2012 19:27
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:13.4.2012 19:29

Nojo, session, to mě mohlo napadnout. A přímo do POST to nedostanu?

Nahoru Odpovědět
13.4.2012 19:29
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na user
Kit:13.4.2012 19:30

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.

Nahoru Odpovědět
13.4.2012 19:30
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na David Hartinger
Drahomír Hanák:13.4.2012 19:41

Nevím, jestli tě dobře chápu, ale to by snad šlo přes skryté pole z formuláře.

 
Nahoru Odpovědět
13.4.2012 19:41
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Drahomír Hanák
David Hartinger:13.4.2012 19:42

Já myslel tou funkcí header, jestli v té hlavičce mohu zároveň odeslat i něco v POST.

Nahoru Odpovědět
13.4.2012 19:42
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:13.4.2012 19:46

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.

Nahoru Odpovědět
13.4.2012 19:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na David Hartinger
Drahomír Hanák:13.4.2012 19:48

Můžeš použít rozšíření PHP cURL, které umí odesílat POST požadavky.

 
Nahoru Odpovědět
13.4.2012 19:48
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:13.4.2012 19:51

Dobrá úvaha, díky, je to tak :D

Nahoru Odpovědět
13.4.2012 19:51
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:13.4.2012 19:51

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á.

Nahoru Odpovědět
13.4.2012 19:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
Kit:13.4.2012 19:53

PHP curl funguje jako klient. My potřebujeme, aby se to chovalo jako server.

Nahoru Odpovědět
13.4.2012 19:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
user
Tvůrce
Avatar
user:13.4.2012 20:19

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?a­aa=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

 
Nahoru Odpovědět
13.4.2012 20:19
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na user
David Hartinger:13.4.2012 20:34

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ší.

Nahoru Odpovědět
13.4.2012 20:34
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na user
Kit:13.4.2012 20:40

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.

Nahoru Odpovědět
13.4.2012 20:40
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
user
Tvůrce
Avatar
user:13.4.2012 22:24

ne není, když u toho sedíš skoro celej den tak alespoň mě to už přestává myslet, nebo v jiných případech nejsem určitě tak zkušený/pokročilý.
Ale jinak vám všem děkuji za pomoc a za tuto skvělou komunitu :)

 
Nahoru Odpovědět
13.4.2012 22:24
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na user
David Hartinger:13.4.2012 23:10

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 :)

Nahoru Odpovědět
13.4.2012 23:10
You are the greatest project you will ever work on.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 27 zpráv z 27.