Autor Zpráva
petrholy
Profil *
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");}
zbytek skriptu
.
.
.
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 *
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
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 *
Mám to takto:
if(neco){        
header("Location: /umisteni");
header("Connection: close");
Die()}     <--- řádek 16
a vyhazuje mi to error: Parse error: syntax error, unexpected '}' na řádku 16
juriad
Profil
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
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 *
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 *
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
[#9] petrholy
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: