Autor Zpráva
Kordy
Profil *
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
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 *
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
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
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;
}
?> 
ten spočívá v zadefinování funkce, která:
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 (); ?>
následně se ta funkce zavolá, jejím výstupem je text "document.write(zapis);"

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>
spustí skript, který naplánuje spuštění nějakého řetězce za 2 sekundy

<script>
setTimeout("document.write(zapis);", 3 * 1000);
</script> 
spustí skript, který naplánuje spuštění nějakého jiného retězce za 3 sekundy

var zapis = document.formular.policko.value;
po 2 sekundách se do proměnné zapis uloží hodnota textarea

document.write(zapis);
po další sekundě se stránka přepíše (protože document je už uzavřený) obsahem stránky

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 *
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
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 *
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
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.
kordy
Profil
Děkuji všem za pomoc. Nakonec jsem využil Juriadovi dobré rady a použil localStorage ;)

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: