Autor Zpráva
pavelox
Profil *
zdravím,

mám naprogramovat hlídač. Zadám poznámku a chci aby mě program za 5 hodin např. upozornil na tu poznámku nějakou zprávou např. Můj dotaz směřuje na použití funkce s časem. Mám strach, že když si uživatel změní v PC čas ... nebude tento program fungovat správně ... Jakou funkci mám použít, aby na to čas lokální v pc neměl vliv? dík za radu
Werewolf
Profil
V PHP nic takového nenapíšeš. Když už, tak v JS - kontrolovat to cyklem, změnění času v PC je celkem problém.

Být Tebou, napsal bych tento program (pokud bys to psal v PHP, byl by to skript) například v C.

nenapíšeš - bude to prasácké. Stránka se musí sama pravidelně aktualizovat.

Edit:
drasha:
Vždyť už jsem to opravil... Každý se někdy splete.

SwimX:
CRON je taky řešením...

ukaž
Má pravdu. Mimochodem - neuraž se - jsi hloupý nebo jsem chytrý?
drasha
Profil
Time() - pokud nezměníš čas na serveru..
drasha
Profil
V PHP nic takového nenapíšeš. Když už, tak v JS - kontrolovat to cyklem, změnění času v PC na to vliv nemá.
Ehm, v PHP je to hračka. JS pracuje na straně uživatele -> využívá jeho čas.
SwimX
Profil
pavelox:
To bude složtější než zřejmě čekáš. Na servru by to chtělo spustit démona, třeba CRONa, který by řekněme tedy každou hodinu spouštěl skript: hlidac.php
V něm by bylo:
načtení poznámek z DB které mají čas výstrahy menší než 5 hodin od aktuálního času (time()) a odeslání emailu např.

drasha:
Time() - pokud nezměníš čas na serveru..
supr zpráva, škoda že tazateli moc nepomůže.

v PHP je to hračka
ukaž
pavelox
Profil *
Tak to lze napsat v PHP? A funkce mktime nelze piužít?
pavelox
Profil *
Teď v tom mám bordel . jde mi o to udělat odpočet do nějakého úkonu .. ale nechci aby to mohl ovlivnit uživatel tím, že posune čas ...
SwimX
Profil
pavelox:
PHP -> se provádí na servru, kdo bude ten požadavek na servr odesílat? Nastuduj začátky nepředhazuj nám tu funkce.
SwimX
Profil
Werewolf:
neupravuj svů příspěvek, málem jsem si toho ani nevšiml :)

„ukaž“
Má pravdu.
nerozumím? // to byla reakce na mě, nebo na drasha? Kdo z nás má být hloupý?
Werewolf
Profil
SwimX:
Ty. A omlouvám se za tu úpravu. Chtěl jsem tím říct, že on má pravdu, že v PHP je to snadné napsat.
pavelox
Profil *
SwinX : Chtěl jsem poradit .. nechápu co se mi snažíš říct :( provádí se na serveru, ale na localhostu přece mohu čas změnit )
SwimX
Profil
pavelox:
ano, ale předpokládám, že ostatním lidem nebudeš posílat skript, aby si ho pustili na localhostu, to by si ten script mohli rovnou upravit ne? nahraješ ho někam na hosting, a tam čas těžko změníš.

Werewolf:
chci něco vidět. Nevěřím ti
pavelox
Profil *
Díky za odpovědi
Werewolf
Profil
pavelox:
odpočet do nějakého úkonu
Tak v tom případě Tě asi nikdo nepochopil. Za pět hodin... Pravda.

Mám řešení, pokud chceš opravdu odpočet. Někam si ulož datum a čas, kdy se má akce provést a při zobrazení stránky jenom zjisti zbývající čas v sekundách (odčítání času konce od toho aktuálního), použíj nějaký JavaScript pro odpočítávání se vstupem v sekundách, kterých je na webu plno a dej mu na vstup ty sekundy. Poté, pokud umíš JS a pokud to počítadlo, které jsi našel neumí, po dosažení 0 sekund aktualizuj stránku a vyhoď alert, který řekně něco jako "Čas vstávat!", prostě tu upomínku. Pokud je to moc složité, tak tady je hotové řešení:

if($upominka > time()) { // do proměnné upominka vlož např. z databáze ten čas
$remain = $upominka - time();
if($remain <= 0) { echo('<h1>Čas vstávat!</h1><script>alert('Upomínka! Vstávat!');</script>');
mail("ten_komu@to-chces.poslat", "Vstávat...", "Blabla", "From: tvujmail@domena.tld"); } else {
echo('<b>Zbývající doba:</b> <i id="remaining"></i>');

?>
<script>
d1=new Date();
var remaining=document.getElementById('remaining');
function countdown(){
d2=new Date();
s = <?php echo($remain); ?> - Math.round((d2.getTime() - d1.getTime()) / 1000);
m=0;
h=0;
if(s < 0){
remaining.innerHTML = "- - - - -";
location.reload();
} else {
if(s > 59){
m = Math.floor(s / 60);
s = s-m * 60;
}
if(m > 59){
h = Math.floor(m / 60);
m = m-h * 60;
}
if(s < 10){
s = '0'+ s;
}
if(m < 10){
m = '0'+ m;
}
remaining.innerHTML=" "+h+":"+m+":"+s+'';
document.title='Zbývající doba: '+h+':'+m+':'+s+' !';
window.setTimeout("countdown();",999);
}
}
countdown();
</script>
<?php } ?>


Ta teorie je nakonec asi jen pro zábavu. Stejně nejspíš najdeš svoje řešení, které Ti víc vyhovuje. // Tak ne.

Edit:
SwimX:
Klidně se dívej...
pavelox
Profil *
Díky .. to by mohlo být ono
drasha
Profil
SwimX
Říká ti něco "reálný čas", "rekurzivní funkce", nebo třeba "sleep()" ?:) Já už tu fci mám, na pár řádků :)
SwimX
Profil
Werewolf:
tvůj skript neřeší požadouvanou věc: za 5 hodin vyhodit hlášku. Pouze kontroluje při zobrazení stránky jestli už uplynul čas nebo ne. Toe opravdu skvělé, dám do kalendáře upomínku narezeniny své tchýně, kalendář neotevřu -> skriipt se neodešle na servr, hláška nikdy nepřijde na anrozeniny zapomenu a co řekne tchýně? a co teprve manželka?
Toto není řešení ;) V php toto udělat nejde, leda že by ten skript pouštěl každou chváíli CRON, jak už jsem napsal.

U JS je také problém -> musím na té stránce být, jinak mám opět smůlu.
drasha
Profil
Werewolf
Zbytečné. Pomocí PHP a JS to jde přes JSkový refresh stránky za dobu, kterou si tam zadá. Ovšem, co když má JS vypnutý?:) Nebo stránku zavře a otevře znovu..
drasha
Profil
V php toto udělat nejde, leda že by ten skript pouštěl každou chváíli CRON, jak už jsem napsal.
Uč se PHP :) Protože to jde a nejedním způsobem.
SwimX
Profil
drasha:
Uč se PHP :) Protože to jde a nejedním způsobem.
neboj, učím :) pokud to opravdu jde tak snadno pak se omlouvám, ale opravdu jsi mě stále nepřesvědčili.

Werewolfovo řešení se mi nelíbí.

Ukaž mi tedy to tvé. Dám si upomínku, že za měsíc má někdo narozeniny, můžu v klidu odejít ze stránky, atd. a očekávat upozornění, pomocí tvé jednoduché funkce?
drasha
Profil
Když ti během té doby nespadne server :) Ale kusy kódu psát nebudu, spočívá to v tom, že voláš funkci pořád dokola(jednou za sekundu) dokud není ten požadovaný čas. Nebo server uspíš na určitou dobu a pak skript pokračuje. Rozhodně to v PHP jde. Přes cron table je to jistější. Ale jako nejlepší řešení bych si dal upomínku na mobil :)
pavelox
Profil *
Jenže JAVA SCRIPT si může uživatel vypnout a pak to taky nebude fungovat .. jde to udělat jen v php?
SwimX
Profil
drasha:
dobrá rekurzi chápu, ale uznej, že běžně máš na servru nastavenou minimální dobu běhu skriptu. Takže to nepude.
Když tu stránku zavřu, tak se bude pořád volat? to už teda nevím. Rozhodně měsíc zatěžovat servr a jedna sekunda toe zabiják nemyslíš? ono i těch 5 minut je 5*60 = 300 volání fce. To není zzrovna nejlepší řešení -> tvrdím že nejde.
A s tím zavřením stránky myslím si, že se volat přestane ;)
SwimX
Profil
pavelox:
řekni vše co potřebuješ udělat. Co to má být za projekt? lidi si budou zadávat upomínky a ty jim je hlásit? nebo chceš jen odpočítat 5minut a pak poslat mejl?
pavelox
Profil *
SwimX : Chci prostě, aby se uživatel přihlásil do svého profilu např. tam klikne na tlačítko a za 6 hodin např. přibyde na jeho účet určitý počet bodů. To mi stačí. Aby mohl např. to tlačítko obnovit až po určitém čase,.
SwimX
Profil
pavelox:
vidíš, to už je něco jiného, na to je naopak CRON zbytečný, protože zároveň chceš, aby byl uživatel aktivní, a ne aby se přihlásil, minimalizoval prohlížeč a sbíral body.

Takže při přihlášení uděláš?
$_SESSION['prihlaseni'] = time();


a do stránek vložíš:
if(strtotime("-6 hours") > $_SESSION['prihlaseni']){
  //to znaméná, že už je tam víc než 6 hodin. jen pozor aby se sessiony nevyprazdňovali třeba po 30ti minutách :)
} 
drasha
Profil
SwimX
dívej, chlapec chtěl vědět funkci na čas, nic jinýho - tj Time() :) Tys říkal, že přes PHP počítání času NEJDE. Já jen řekl, že to jde, ne že je to vhodné :)

A řešení jeho problému podle mě, zpočívá v ukládání použití tlačítka Obnovit do databáze :) Takže po každém použití tlačítka obnovit se vepíše do DB čas, kdy bylo použito. A při přihlášení ten čas hodíš do SESSIONS a používání toho tlačítka budeš kontrolovat i interně v tom skriptu na přidávání bodů a to tak, že si znova vytáhneš poslední čas přidání, z DB a zkontroluješ ho.
SwimX
Profil
drasha:
Tys říkal, že přes PHP to NEJDE. Já jen řekl, že to jde, ne že je to vhodné :)
ok, špatně sem se vyjádřil. :)
Werewolf
Profil
SwimX:
Pokud sis přečetl [#25], tak z toho pro Tebe plyne, že mé řešení je dostačující.
SwimX
Profil
Werewolf:
ale tys mi tvrdil že jsem hloupý už v příspěvku #2 kde pavelox přesně nenapasl co chce, a to co jsme oba mysleli by tvým způsobem nešlo.

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: