Avatar
user
Redaktor
Avatar
user:

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
Tým ITnetwork
Avatar
Drahomír Hanák:

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 Čápka
Tým ITnetwork
Avatar
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
user
Redaktor
Avatar
user:

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
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na user
Drahomír Hanák:

Proč to neudělat jednoduše?

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

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
Redaktor
Avatar
Odpovídá na Drahomír Hanák
Kit:

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
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na Kit
Drahomír Hanák:

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
Redaktor
Avatar
user:

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
Redaktor
Avatar
user:

teď jsem tě Kite nepochopil...

 
Nahoru Odpovědět 13.4.2012 18:48
Avatar
Kit
Redaktor
Avatar
Odpovídá na Drahomír Hanák
Kit:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

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

Nahoru Odpovědět 13.4.2012 19:29
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na user
Kit:

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
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Drahomír Hanák:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Drahomír Hanák
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

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  +1 13.4.2012 19:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Drahomír Hanák:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

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

Nahoru Odpovědět 13.4.2012 19:51
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

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  +1 13.4.2012 19:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Drahomír Hanák
Kit:

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
Redaktor
Avatar
user:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na user
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na user
Kit:

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
Redaktor
Avatar
user:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na user
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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.