Autor | Zpráva | ||
---|---|---|---|
Kordy Profil * |
#1 · Zasláno: 19. 5. 2013, 13:42:28 · Upravil/a: Kordy
Dobré odpoledne,
mojím cíle bylo vytvořit si skript co by mi po nějákém intervalu(ten ještě budu měnit) uložil hodnotu z textarea do souboru...Celkem mi to funguje až na to, že místo hodnoty mi zapisuje: document.write(zapis); Nepomohli byste mi prosím dosáhnout nějak toho, aby před zápisem skript provedl (vypsal tak doopravdy hodnotu-když to echuju tak se vypíše...) Děkuji <form name="formular"> <textarea name="policko">-</textarea> </form> <script> setTimeout("var zapis = document.formular.policko.value;", 2 * 1000); </script> <?php function napis() { $zapis = "document.write(zapis);"; $soubor = fopen('zaloha.txt', 'w'); fwrite($soubor, $zapis;); fclose($soubor); echo $zapis; } ?> <script> setTimeout("<?php napis (); ?>", 3 * 1000); </script> jo sem vůl nadal sem to do [pre][/pre]... nějak mi nefunguje edit. :/ |
||
juriad Profil |
#2 · Zasláno: 19. 5. 2013, 13:56:01
Vůbec nechápeš rozdíly mezi PHP a JS; netušíš jak lze kombinovat oba jazyky (takto ne!); napřed si o obou jazycích přečti a pak si uvědom, proč tvůj skript nemůže fungovat. Nápověda: do tvého prohlížeče dorazí následující kód, žádné php tam nikdy nebude:
<form name="formular"> <textarea name="policko">-</textarea> </form> <script> setTimeout("var zapis = document.formular.policko.value;", 2 * 1000); </script> <script> setTimeout("document.write(zapis);", 3 * 1000); </script> |
||
Kordy Profil * |
#3 · Zasláno: 19. 5. 2013, 14:26:47
Pořád mi to nějak nedochází možná si myslel to, že php vykonává příkaz ihned-proto neexistuje způsob jak php časovat, ale jak potom vysvětlíš, že to echo funguje? Mohl bys mě prosím víc naťuknout třeba odkaz na článek? Nebo aspoň přiblížit co myslel tím, že se takto nedají kombinovat?
|
||
martin1312 Profil |
#4 · Zasláno: 19. 5. 2013, 14:41:18
PHP sa spracuje na serveri a prehliadaču odošle výslednú stránku. Preto nie je možné volať z javascriptom PHP funkciu. Jednoducho na stránke nie je.
|
||
juriad Profil |
#5 · Zasláno: 19. 5. 2013, 14:52:38
Napřed se provede PHP kód:
<?php function napis() { $zapis = "document.write(zapis);"; $soubor = fopen('zaloha.txt', 'w'); fwrite($soubor, $zapis;); fclose($soubor); echo $zapis; } ?> 1) do proměnné zápis uloží řetězec: "document.write(zapis);" 2) otevře soubor zaloha.txt pro zápis 3) zapíše do toho souboru obsah proměnné zápis 4) zavře soubor 5) vypíše na výstup obsah proměnné zápis <?php napis (); ?> Spolu s textem, který obklopoval PHP se obsah stránky přes síť pošle do prohlížeče stránka v podobě [#2]. Následně si tu stránku přežvýká prohlížeč. Ten také provede několik věcí: vytvoří formulář s jednou textarea <script> setTimeout("var zapis = document.formular.policko.value;", 2 * 1000); </script> <script> setTimeout("document.write(zapis);", 3 * 1000); </script> var zapis = document.formular.policko.value; document.write(zapis); a tím to celé končí. Je doufám vidět, že zápis do souboru probíhá mnohem dříve a na jiném počítači než získání a výpis hodnoty políčka formuláře. |
||
Kordy Profil * |
#6 · Zasláno: 19. 5. 2013, 15:03:51 · Upravil/a: Kordy
Ok takže když tu hodnotu uložím do session a přeměruju tak to v přesměrovaném skriptu můžu bez problému zapsat... Pochopil jsem to správně?
neee to vlastně taky nepude pokud se ten skript provede hned :/ Takže je to neproveditelné?! -_- Nebo možná přes cookies... http://www.webfaq.cz/clanek/Javascript-cookies-jak-spravne-nastavit-cookies-v-javascriptu-jak-pouzivat-cookies-path Zkusím to kdyžtak napíšu jestli to fungovalo... ;) |
||
juriad Profil |
#7 · Zasláno: 19. 5. 2013, 15:27:16
On je spíš problém v tom, jak definuješ zálohu. Ty prostě chceš periodicky přepisovat hodnotu v nějakém souboru na serveru tak, aby to reflektovalo aktuální stav v textarea?
Pokud by ses snažil obnovit obsah textarea, tak to má smysl jen při znovunačtení stránky a tam ti stačí vypsat obsah souboru mezi počáteční a koncový tag textarea. Budeme nadále uvažovat jen první část, tedy periodicky ukládat text na server. Komunikace se serverem je možná jen metodou GET a POST, na GET je obsah obecně moc dlouhý, takže chceš odeslat JavaScriptem POST požadavek na server, který bude obsahovat data z textarea. Ten požadavek, ale nesmí způsobit, že se stránka znovunačte, nebo přesměruje jinam. |
||
pcmanik Profil |
Kordy:
Tú zálohu potrebuješ trvalú a na strane servera? Možno by ti stačilo len LocalStorage. Podpora IE>=8 |
||
Lamicz Profil |
juriad:
„Ten požadavek, ale nesmí způsobit, že se stránka znovunačte, nebo přesměruje jinam“ Tzn. POST AJAX požadavek, jednoduše např. jQuery $.post, jde to samozřejmě řešit bez frameworku v čistém JS. |
||
Kordy Profil * |
#10 · Zasláno: 20. 5. 2013, 15:27:38
Ano chtěl bych to periodicky ukládat. Prostě abych se vyhnul tomu když člověk půl hodiny píše text, vypadne net, proud nebo něco neočekávanýho a celá ta práce je ztracena. Ale teoreticky by se to klidně mohlo znovu načíst. Pokud přece tu textareu někam po tom intervalu přepíšu a pak tu hodnotu znovu načtu tak je to sice "nepříjemné zdržení". Ale nechám uživateli možnost, aby si sám nastavil ten interval a je už na něm jestli po minutě nebo pěti... :)
Přes ty cookies by to mohlo fungovat ne? Nerad bych se pouštěl do větších akcí a zůstal nejlépe u JS a php :D |
||
juriad Profil |
#11 · Zasláno: 20. 5. 2013, 15:48:11
Nejlepší je v dnešní době na toto použít localstorage. Viz jak je to řešeno tady na diskusi, když něco napíšeš, neodešleš a zavřeš okno - po otevření se text obnoví.
Cookies jsou určeny na drobné věci, typu id uživatele, ne celé texty. Navíc se odesílají na server při každém požadavku. http://jpmcgarrity.com/examples/html5/localStorage/ <- triviální příklad https://github.com/NV/textarea-backup.js/ <- prakticky to, co chceš dělat ty; ukládá při každém stisku klávesy. |
||
Časová prodleva: 3 dny
|
|||
kordy Profil |
#12 · Zasláno: 23. 5. 2013, 18:28:49
Děkuji všem za pomoc. Nakonec jsem využil Juriadovi dobré rady a použil localStorage ;)
|
||
Časová prodleva: 11 let
|
0