Autor Zpráva
grossik
Profil
<?php
$cas = 600;
?>

<script>
setInterval(function(){<?php echo $cas--; ?>; }, 1000);
</script>

<?php 
echo $cas;
?>

Dobrý den, nevíte proč tento kód se spustí jen jednou (dá cas na 599), ale pak už ne? Má někdo nějaké řešení? Přemýšlím a hledám už to několik hodin a vážně si nevím rady.
Radovan789
Profil *
Možná bys měl nastudovat rozdíl mezi PHP a JavaScriptem. Tvůj kód nedává smysl ani nevím jakej máš úmysl. Čas je 599 protože $cas-- odečte 1 od 600.
grossik
Profil
Radovan789:
Mělo by to odčítat každou sekundu $cas - 1 ne?


Nebo jak udělat aby to odečítalo po sekundě jen v PHP?
xaverista
Profil
grossik:
Aby jsi viděl odpočítávání času v prohlížeči jde udělat pomocí JavaScriptu, PHP běží na straně serveru. Pokud chceš čas odpočítávat přece jen PHPkem, budeš muset využít například AJAXu pro komunikaci s PHP scriptem
grossik
Profil
xaverista:
Právě já ten odpočet potřebuji na serveru. Jestli to dobře chápu tak javascript se vypne potom, co se vypne stránka a to já právě nechci, chci aby to odčítalo i když tu stránku nebudu mít zaplou.
Bubák
Profil
grossik:
Právě já ten odpočet potřebuji na serveru. Jestli to dobře chápu tak javascript se vypne potom, co se vypne stránka a to já právě nechci, chci aby to odčítalo i když tu stránku nebudu mít zaplou.
Používáš nějaký speciální nelineárně běžící čas, že máš takový požadavek?
grossik
Profil
Bubák:
Jen si zkouším takový projekt a bude tam něco ve stylu práce/hlídky (jako je v online hrách) a to musí ten odpočet být na serveru.
Keeehi
Profil
grossik:
Tak to bych tě rád zastavil tady a teď. V online hrách to takto vůbec nefunguje. Reálný čas tam vůbec nijak neběží.
Hra si uloží datum a čas, v kolik určitá činnost začala. A pak spí. "Probudí" se znovu, až když ji uživatel "otevře". Zjistí si, jaký je aktuální datum a čas a od něj odečte ten uložený. Tím zjistí, kolik času uběhlo a podle toho upraví nějakou statistiku.
Pozor, to znovu otevření neznamená, že by uživatel měl třeba zavřít a otevřít prohlížeč! Je to další požadavek na stránku (klepnutí na odkaz). Je důležité si uvědomit, že i když ty stránku v prohlížeči stále vidíš, serverový script už dávno spí. Proces vypadá asi takto: klikneš na odkaz > server obdrží požadavek a začne provádět script > script dokončí svoji práci > server odešle výstup scriptu (HTML kód) > server usne (resp. v klidu vyčkává na další požadavek) > tvůj prohlížeč teprve teď obdrží HTML kód > prohlížeč vykreslí stránku > klikneš na odkaz a jede to celé znovu.
Rfilip
Profil
Tento typ úloh, tedy časováná událost se řeší tak že když klient klikne na tlačítko start, tak js zobrazí progrese bar a zároveň Ajaxem pošle serveru zprávu že uživatel x zahájil činnost y o délce z, server zkontroluje jestli to vyhovuje pravidlům hry, pokud ano zapíše do souboru či databáze:
Uživatel, činnost, počátek, délka
Js bude posunovat odpočítávání, při vypršení casu, tuto informaci pošle Ajaxem na server který po kontrole označí činnost jako hotovou.

Pokud uživatel klikne na odkaz či obnoví stránku tak server z toho souboru zjistí zbývající čas každé činnosti nebo její dokončení a příslušně to klientovi zobrazí.
grossik
Profil
Rfilip:
Ano přesně o tohle se snažím, jenže nevím jak to udělat.
grossik
Profil
Udělal jsem si teda tabulku:

CREATE TABLE `mhra`.`hlidka`(
`id` INT NOT NULL AUTO_INCREMENT ,
`hrac` VARCHAR(255) NOT NULL ,
`cinnost` VARCHAR(255) NOT NULL ,
`od` DATETIME NOT NULL ,
`delka` INT NOT NULL , PRIMARY KEY (`id`))
ENGINE = MyISAM;

Jenže s ajaxem jsem nikdy nedělal. :/

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:

0