Autor | Zpráva | ||
---|---|---|---|
petrholy Profil * |
#1 · Zasláno: 28. 8. 2015, 20:03:54
Zdravím
potřeboval bych se zeptat proč mi skript ignoruje přesměrování. skript vypadá asi takto: . . . skript if(neco){ $delete=mysql_query("DELETE FROM $DB.dotazy WHERE `id`='$id'"); header("Location: /umisteni"); header("Connection: close");} . . . problém je takový že vymazání se provede ale přesměrování ne a skript dojede až do konce. Nevíte proč nedochází k přesměrování? |
||
anonymníí Profil * |
#2 · Zasláno: 28. 8. 2015, 20:06:30
petrholy:
Pravděpodobně je před ním nějaký výstup, nebo není splněna podmínka, která přesměrování obaluje. Zapni si výpis chybových hlášek. |
||
nightfish Profil |
#3 · Zasláno: 28. 8. 2015, 20:14:22
petrholy:
„vymazání se provede ale přesměrování ne a skript dojede až do konce“ Ano, protože nastavení hlaviček běh skriptu neukončuje. Za druhým header() zavolej Die() .
|
||
petrholy Profil * |
#4 · Zasláno: 28. 8. 2015, 20:42:38
Mám to takto:
if(neco){ header("Location: /umisteni"); header("Connection: close"); Die()} <--- řádek 16 |
||
juriad Profil |
#5 · Zasláno: 28. 8. 2015, 20:51:56
petrholy:
Chybí ti tam středník za příkazem die. Mimochodem, proč vynucuješ ukončení spojení, když by jej klient velice pravděpodobně mohl použít pro redirect? |
||
Keeehi Profil |
#6 · Zasláno: 28. 8. 2015, 20:59:03
juriad:
„Mimochodem, proč vynucuješ ukončení spojení, když by jej klient velice pravděpodobně mohl použít pro redirect?“ Tuším, že jde o zoufalý pokus jak script ukončit když neznal die nebo exit. |
||
petrholy Profil * |
#7 · Zasláno: 28. 8. 2015, 21:18:28
juriad:
protože bez toho ukončení mě to nepřesměrovalo při té podmínce při které jsem chtěl ale používalo to až přesměrování umístěné na koci skriptu |
||
Alphard Profil |
Volat
exit po přesměrování se uvádí často, ale u vhodně navržené aplikace by ani nemělo být potřeba. Po doběhnutí dané akce (v tomto případě smazání nějakého záznamu) by samozřejmě neměla být spuštěna žádná jiná.
A když už, tak nějak chytřeji. Pevně zapsaný exit, který sestřelí aplikaci, by u složitějších systémů rozbil logování, volání hooků atd. Tohle nebude ten případ, ale chtěl jsem zmínit, že rada „dej tam exit“ není úplně ideální. |
||
petrholy Profil * |
#9 · Zasláno: 28. 8. 2015, 22:27:22
Alphard:
" Po doběhnutí dané akce (v tomto případě smazání nějakého záznamu) by samozřejmě neměla být spuštěna žádná jiná." To jakože celý skript má obsahovat jen jednu funkci? Asi hodně blbý dotaz ale tak to vyznělo. |
||
Alphard Profil |
#10 · Zasláno: 28. 8. 2015, 22:41:23
[#9] petrholy
Má spustit jen jednu akci. To je důležitý rozdíl. Systémy stavěné na MVC architektuře mají zpravidla jednotlivé „akce“ napsané jako metody controlleru. Takže např. při požadavku na smazání článku se zavolá metoda* ArticleController::actionDelete($idArticle) a po jejím dokončení už jen dobíhájí systémové operace, jiné action metody se nespustí.
* Zavolání správné metody zajistí router. V jednoduším případě si celou aplikace představte jako velkou podmínku if ($_GET['neco1'] == 'neco1') { // akce 1 } elseif ($_GET['neco2'] == 'neco2') { // akce 2 } elseif ($_GET['neco3'] == 'neco3') { // akce 3 } else { // 404 } // tady by mohlo být třeba ještě nějaké logování, proto není šťastné mít tam exit Po doběhnutí např. akce 2 se nemůže spustit nic jiného, script je na konci.
|
||
Časová prodleva: 9 let
|
0