Autor Zpráva
liborse
Profil
Zdravím,

mám takový specifický problém. Jde o to, že uživatel má otevřeno okno, kde edituje článek. Já chci, aby se po 4 minutách stránka zaktualizovala a přitom se odeslaly data z formuláře (může tam být odpočet v javascriptu, aby nebyl překvapen). Podmínkou však je, že na klíčové věci nesmí být použit javascript? Proto se ptám, umí html redirect odeslat data právě psaná ve formuláři?

Jde totiž o to, že článek je v mysql označen jako že je editován, ale po 4 minutách se označí (pokud někdo načte jakoukoliv stránku na serveru) jako že je přístupný k úpravám. Tou aktualizací by se obnovila hodnota u článku, že je editován. Vše by bylo výrazně jednodušší, kdybych zajistil, že se dá zjistit, že daný uživatel je právě přihlášen, že má aktivní session (aplikace je psána v PHP). Zatím jsem přišel je na to, že při každém obnovení stránek se zapíše kdy byl naposledy uživatel přihlášen, ale to je nedostačující. Prostě se všemožně potřebuji vyhnout javascriptu, aplikace musí být přístupná i z prohlížečů bez js či s vypnutým js. Ale to už odbočujeme do PHP a to již nepatří do této diskuze... (ale stejně, kdyby bylo možné zjistit přes php aktivitu cizí session a ještě vědět, jakého uživatele je, bylo by to výborné :-D )

Snad jste to z mého popisu pochopili, omlouvám se za zmatky, už se s tím trápím skoro týden. Prostě chci zamezit tomu, že by jeden článek upravovali dva lidé najednou. Děkuji a dodávám, že hledat opravdu umím, našel jsem i podobné téma tady na webu, ale byl tam použit javascript, to je pro mě nepřijatelné.
Jakuje
Profil
No mám dojem že toto html neumí. Jediná možnost je redirect pomocí meta tagu, ale ten neodešle formulář (a pokud chceš odpočítávání, tak tam JS musí být tuplem)

Jestli jde o to vědět na serveru co jaký uživatel dělá (jestli je přihlášen, má session, nebo tak), tak to stačí při každém načtení stránky, kdy je uživatel přihlášen, zapsat třeba aktuální čas k uživateli do databáze. A potom se můžeš dozvědět, jestli je ten či onen uživatel online (navíc můžeš mít uloženou poslední zobrazenou stránku a počítat s tím že na ní právě je).

Snad ti to aspoň trochu pomůže. Bohužel to neřeší nic s těmi 4 minutami ...
Str4wberry
Profil
Možná si přidat do editační stránky třeba <iframe>, který bude aktualizovat informaci o editaci. Asi pomocí <meta> tagu refresh.
liborse
Profil
Nevím, jestli iframe by zkousl i mobilní prohlížeč jako je Opera Mini, Netfront a další. Už jsem udělal podobný postup, jak navrhoval Jakuje, velmi dobrý nápad. Díky tomu jsem se dokopal i k automatickému odhlášení po určité době definované v konfigurační tabulce. S tou editací to vyřeším tak, že tam bude konfliktní systém, tj. nejprve se při začátku editace uloží původní obsah, při ukládání se tento porovná s aktuálním obsahem, tím se zjistí, že někdo mezitím článek editoval. Pak jsou možnosti otevřené, asi nejspíše obě verze nechám zobrazit vedle sebe a nechám na výběr několik možností, co s konfliktem dělat (nahradit verzi, ponechat upravenou atd.), pokud bude uživatel automaticky odhlášen, tak při editaci bude vyjímka, prostě mu bude napsáno, že byl odhlášen a jestliže chce uložit svůj text, pak musí znovu zadat uživatelské jméno a heslo, pak se to projede konfliktním řízením, či jak to nazvat... ;) To jde, ne? Lepší metodu bez js jsem nevymyslel ;).
Str4wberry
Profil
Nicméně to neřeší, jak koneckonců i Jakuje psal, problém s čtyřmi minutami. Nevyvarujete se případu, kdy někdo otevře editaci stránky a se samotnou editací začne po půl hodině. Celkem vhodné je ukládat čas editace a při pokusu o editaci po krátké době upozornit.
liborse
Profil
Jenže jak upozornit bez js? Redirectem to asi nelze, když nemohu poslat data z formuláře... Form mám dělaný tak, že jede s js i bez, ochranu jsem zabudoval do PHP (různé odlomítkování atd.)...
Chamurappi
Profil
Reaguji na liborse:
Většina prohlížečů — včetně mobilních — se snaží vykreslovat stránky průběžně. Webová stránka není mašlí ovázaný balíček, ale proud dat. Potřebuješ-li tedy průběžně zasílat serveru informaci, že má uživatel otevřenou stránku s editorem, zkus do HTML kódu každých pár minut přigenerovávat element <img>. Stránka se nikdy nedonačte do konce, ale server získá pravidelnou zpětnou vazbu.

Nevím, jestli iframe by zkousl i mobilní prohlížeč jako je Opera Mini, Netfront a další.
S mým výše navrženým postupem bude mít pravděpodobně problémy Opera Mini, protože ta není přímo samostatný prohlížeč, využívá ke komunikaci se světem prostředníka v Norsku.
liborse
Profil
Zajímavý postup, ale asi jsem přesně nepochopil to generování elementu. Jak tedy zajistit, aby stránka "čekala" na další element? A je to validní řešení? Rozhodně mě však zaujalo. Doufám, že nemyslíte generování přes js ;). A já též potřebuju přístupnost i přes Operu, přeci jen je to nejšíkovnější udělátko na web, co mám na telefonu ;). A víc lidí ho používá, mám dojem...
Chamurappi
Profil
Reaguji na liborse:
Jak tedy zajistit, aby stránka "čekala" na další element?
Server může udělat pauzu během generování obsahu. Někde na konci HTML kódu si dáš několikaminutovou přestávku … a pak tam plivneš <img src="ping.php?náhodné-smetí"> a zase uděláš přestávku … a znovu <img src="ping.php?náhodné-smetí"> a další přestávku … atd.

A je to validní řešení?
Záleží na tom? Je to nevalidovatelné řešení. Validátor nemůže posuzovat stránku, která nikdy neskončí. Musíš nad tím přemýšlet čtyřrozměrně.

já též potřebuju přístupnost i přes Operu
Popsaný postup jsem nezkoušel, vážně netuším, jak na něj zareaguje Opera Mini. Teoreticky by to fungovat mohlo, záleží jen na tom, jestli její tvůrci počítali s šílenými nápady.
bohyn
Profil
Chamurappi
Server může udělat pauzu během generování obsahu. Někde na konci HTML kódu si dáš několikaminutovou přestávku … a pak tam plivneš <img src="ping.php?náhodné-smetí"> a zase uděláš přestávku … a znovu <img src="ping.php?náhodné-smetí"> a další přestávku … atd.
Pri tahle malem objemu bude mozna problem presvedcit server aby odeslal buffer. flush() tusim vyprazdni jen PHP buffer. Reseni je to trochu netradicni, ale mozna jedine pouzitelne :).
liborse
Profil
Opravdu velmi netradiční, ale zdá se, že přesně odpovídá mému dotazu. Díky za něj. Tedy já si hodně potrpím na validaci, takže to ještě zvážím (v kapse mám jednu alternativu, ale nevím, jestli je realizovatelná). A proč tak lpím na validaci? Často mi pomůže odhalit některé chyby v syntaxi (holt někdy zapomenu na čárku atd., to určitě znáte) a taky jsem zjistil, že třeba Nokie má problémy s nevalidními stránkami atd. Takže tak. Ne jen abych měl tu "ikonku" :-D. Díky kluci, je vidět, že tady na diskuzi se vždy najde kloudné řešení, jen tak dále.
Chamurappi
Profil
Reaguji na liborse:
Tedy já si hodně potrpím na validaci, takže to ještě zvážím
Neřekl jsem, že to nebude validní. Kdyby měl validátor nekonečnou trpělivost a počkal by na konec nekonečné smyčky v tvé stránce, musel by vyhodit zelenou hlášku.

A proč tak lpím na validaci? […] Takže tak. Ne jen abych měl tu "ikonku" :-D
Chápu. Také jsem proseděl pár hodin u validátoru, ladil všechny možné i nemožné chyby, filtroval zbytečné hlášky atd. a i když jsem se té ikonce zpočátku bránil, nakonec ji také mám. A hezčí :-)
Měsíček
Profil
"Často mi pomůže odhalit některé chyby v syntaxi (holt někdy zapomenu na čárku atd., to určitě znáte) "
Zvýrazňovač syntaxe v editoru by ti mohl sloužit lépe ;-)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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