Autor Zpráva
Asterofix
Profil
Zdravím,
chtěl jsem zabezpečit stránky na kterých mám diskusi, aby se příspěvek nevkládal opakovaně po refreshi, ale vzhledem k tomu, že stránky incuduju (diskusi mám jen u článků), tak se mi header moc nehodí. Nevíte o nějaké jiné možnosti? např. tato kniha http://firstpage.profitux.cz/?page=guest to nějakým způsobem řeší, ale i když jsem prošel celý kód od hora dolů nepodařilo se mi v tom kódu nic zvláštního najít

Mockrát díky za pomoc
Aleš Janda
Profil
> vzhledem k tomu, že stránky incuduju (diskusi mám jen u článků), tak se mi header moc nehodí

To se navzájem nějak vylučuje? Header se hodí, nic jiného pořádně není.
bukaj
Profil
Asterofix
Pokud jsem to pochopil, tak v tvém případě to vidím jako nejschůdnější možnost bufferování výstupu.
Rellik
Profil
Cece asi si ten kod prosel spatne... Je to refreshovane pomoci JS. Presneji se podivej na radek 155 -159 ;)
Mastodont
Profil
Mně by taky zajímalo, jestli to jde bez redirectu, ale to asi ještě nikdo neobjevil ...
Asterofix
Profil
Aleš Janda

Nevylučuje, ale ta diskuse, je v includované stránce pod článkem, který má vždy jinou url, takže nevím jak bych zadal v header('Location: http://stranka.cz/index.php?page=clanek&id=50', TRUE, 303); vždy tu správnou cestu, když má být header vždy na začátku stránky a já nemůžu tu url např. vybrat z databáze. A taky pořádně nevím, jak to vlastně funguje :)


Rellik

No jo, díky, toho jsem si vůbec nevšim, protože jsem to vzal vylučovací metodou a promazal to, aby mi v editoru zůstal jen kód, kde by to mohlo být a tohle jsem asi přehlíd. Ale to by znamenalo, že to funguje jen když má prohlížeč zapnutý JS, ne?


bukaj

No nevím, přijde mi to na mě moc složité a navíc by to mohlo být na nějakém serveru vypnuté, pokud se nepletu. Ale díky za radu, zkusím si o tom něco dalšího najít a třeba změním názor.



Má ještě někdo nějaký nápad, prosím?
Mastodont
Profil
Asterofix
Co třeba si do formuláře pro vložení příspěvku dát hidden pole s id článku, ke kterému se ten komentář přidává, a z něj pak sestavit URL?
Asterofix
Profil
Mastodont

Dobrý nápad, ale protože hlavička musí být na začátku stránky, tak to musím dát do index.php a co by se stalo, kdybych otevřel stránku, která by vypadala třeba jako stranka.cz/index.php?page=kategorie a žádné id by neobsahovala?? S hlavičkami moc zkušeností nemám, tak mě omluvte.
Asterofix
Profil
bukaj

Tak teď jsem si něco prostudoval o tom bufferování a opravdu by to mohlo jít, mockrát díky. Ale ještě bych se rád zeptal jestli to nemůže mít nějaké vedlejší efekty, třeba že se zpomalí načítání, nebo to bude mít problém se session, která musí být na začátku stránky... A pokud jsem to správně pochopil, tak tu hlavičku dám do podmínky typu: jestli je formulář odeslán, zapiš údaje do databáze a pak proveď header?? Moc Tě prosím o odpověď, protože tím bych konečně ten problém vyřešil
bukaj
Profil
Asterofix
Ale ještě bych se rád zeptal jestli to nemůže mít nějaké vedlejší efekty
Vše má své vedlejší účinky tudí i bufferování. V podstatě jde o to, že místo toho, aby se výstup stránky rovnou odesílal klientovi se ukládá do paměti a až tehdy, pokud to sám chceš (použiješ nějakou fci flush) nebo skončí soubor, výstup bude odeslán. Tudíž to klade vyšší hlavně vyšší nároky na pamět (z čehož vyplývá, že tě provozovatelé serveru nebudou mít moc rádi :).

třeba že se zpomalí načítání
Nemělo by být nijak citelné. Samozřejmě záleží na výkonosti serveru.

nebo to bude mít problém se session
Většinou práve naopak ;)

A pokud jsem to správně pochopil, tak tu hlavičku dám do podmínky typu: jestli je formulář odeslán, zapiš údaje do databáze a pak proveď header??
Ne, ani ne. Začátek bufferování (ob_start()) by měl být na začátku stránky, resp. před jakýmkoli výstupem (HTML nebo fce echo, print apod.). Poté můžeš dělat co je libo. A za poslední fcí header() či jinou, která má co do činění s hlavičkami, uvolnit výstup (ob_end_flush()), aby se zbytečně nezabírala paměť.
Asterofix
Profil
bukaj

Omlouvám se, ale teď mě napadá ještě jedna otázečka :)
Ještě raději připomenu, že mám index a do něho includuju stránku s článkem. Takže začátek bufferování musím umístit na začátek indexu a konec bych tedy umístil pod hlavičku, která se spustí pokud návštěvník odeslal formulář. To by ale znamenalo, že se bufferování spustí i v případě, že si návštěvník prohlíží jakoukoli jinou stránku, kde buffer není potřeba. Takže šlo by to ošetřit tím, že bych na začátek indexu dal následující podmínku, která by spustila buffer jen po odeslání formuláře?

if($odeslat) ob_start();


Už Tě nechci otravovat, takže mi klidně jen prosím napiš ano nebo ne, jestli to bude fungovat jak chci...

Mockrát díky
Mastodont
Profil
Asi mi něco uniklo, ale jak vlastně bufferování výstupu nahrazuje redirect coby ochranu proti opakovanému odeslání POSTu?
Asterofix
Profil
Mastodont

Právě že to redirect nenahrazuje, ale díky tomu nemusím mít hlavičku na začátku stránky.

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: