Cum pot să fac un timer în PHP?

Salut,

Mă tot chinui să fac un timer (fac un micuţ joc scris în PHP). Am încercat cu EvTimer (am primit eroare că, nu există clasa respectivă), iar apoi asta https://stackoverflow.com/a/30687008 (iar am primit erori, cum că variabilele respective din clasă nu sunt definite, etc. - am apelat funcţiile din clasă corect - plus că afişa ciudat timpul). Care este cea mai uşoară metodă de a crea un timer în php?

Cred ca mai degraba iti iese cu javascript, eventual vrun pachet npm.

1 Like

Nu ştiu JS :frowning:

Caut soluţia în PHP.

Ce înţelegi prin “timer”? Ceva gen sleep()?

1 Like

Nu. Eu nu vreau sa blochez executarea script-ului. Eu vreau sa fac un timer cu timpul pe care il mai ai sa raspunzi…

Pai folosesti vreo bucla de evenimente? Cum faci ca scriptul sa nu iasa imediat din bucla?

1 Like

Română, sunt începător :joy::rofl:

Cred că m-am prins la ce te referi… Jocul e pe bază de răspunsuri, adică eu scriu un numele unei culori cu o culoare. Dacă numele culorii corespunde cu culoarea textului şi dai click pe text, primeşti un punct şi se generează alt text. Vreau să fac ca după expirarea timpului, dacă culoarea nu se potriveste cu textul să primeşti un punct şi să genereze alt text.

Pai dă mai multe detalii, că nu e clar anume rulezi scriptul php. E o aplicatie desktop? Sau o rulezi in browser? Ca daca e in browser, iti trebuie javascript, nu ai cum sa faci prin php.

2 Likes

E în browser. Uite codul sursă (nu e cam optimizat, că nu am avut timp):

http://www.girlshare.ro/3490037868.9

Scuze că e pe girlshare, nu am avut timp să fac un github repository :frowning:

Folosesc bootstrap modificat (bootswatch.com)

Tu nu cumva vrei ca dupa o perioadă prestabilită pagina să se reincarce automat? Dacă da, vezi aici: https://www.w3schools.com/tags/att_meta_http_equiv.asp

1 Like

Am încercat asta dinainte, misune eşuată :frowning:

Adică, ce n-a mers? Nu se reîncărca pagina?

1 Like

Nu de asta. Nu era ceea ce caut.

Eu vreau să fac un timer simplu, la 5 secunde după generarea unei culori, dacă jucătorul nu a apăsat pe text, iar culoarea nu se potriveşte cu textul să-i dea 1 punct şi să meargă mai departe.

Adică, daca userul nu dă click, să simulezi tu un click la un anumit link. Nu? În cazul asta, http-equiv=refresh este exact ce ai nevoie.

<meta http-equiv="refresh" content="5; url=http://blabla/ce_link_vreau_eu?parametrul=meu">

1 Like

Păi eu cum mai afişez timpul rămas…

Fără javascript… aproape nicio şansă. Nu ai cum să faci să se schimbe conţinutul paginii fără s-o reîncarci, nu fără js.


Presupun că aşa ceva vrei:

https://jsfiddle.net/uzvn07kx/

4 Likes

@Kingsley, de ce nu cauti cum se face un cronometru in JS
sau poti sa folosesti link-ul de aici pe care l-a postat Serghei

Doar iti da refresh la pagina o data la 5 secunde

Solutia a fost data de Serghei !
:slight_smile:

2 Likes

aplicatia ta ar trebui sa cuprinda 3 componente:

  • partea de logica server-side (care genereaza intrebarile si verifica raspunsurile / punctajul)
  • partea de timer (care afiseaza si numara cat timp raspunsul e inca valid)
  • partea de submit raspuns (care face efectiv trimiterea raspunsului catre server, chiar si a celui de tip “timp expirat”

pentru componenta de server se poate folosi php fara probleme (se cauta intrebarile in baza de date, se verifica raspunsurile corecte vs raspunusrile userului, se calculeaza punctaje, etc).

pentru timer insa… nu prea poti lucra exclusiv in server.
e nevoie de o componenta care sa schimbe o informatie din ce vede deja userul (client side).
ca sa faci asta… ar fi catev variante:

  • reincarci pagina la fiecare secunda si generezi noul timp cu php in server (si practic la fiecare secunda se genereaza alta pagina cu alt timp). totusi, nu e o solutie valida pentru ca userul nu ar putea face nimic in pagina (nici sa citeasca pentru ca se tot reincarca si nici sa aleaga / trimita rezultatul pentru ca ii “fuge pagina de sub el”).
  • folosesti un iframe in care incarci o pagina dedicata exclusiv timerului.
    iframeul finctioneaza ca un fel de pagina inserata in alta pagina (au adrese diferite si functioneaza independent).
    totusi, o sa fie complicat sa dai automat “next question” cand se termina timpul pentru ca nu ai control real asupra evenimentelor de la client doar folosind server-side
  • javascript :slight_smile:
    cu javascript poti controla partea de client-side dupa ce pagina a fost incarcata si poti aduce modificari informatiilor de acolo fara sa reincarci / afectezi intreaga pagina.
    elementele de timer si auto-submit form nu sunt prea complicate, cu atat mai mult cu cat cunosti (macar partial) si ceva php.

concluzie: cred ca timpul / efortul de a cauta o solutie fara javascript e mai mare decat timpul / efortul de a invata cateva elemente de baza despre javascript pentru a implementa cerinta ta

succes!

3 Likes

Solved. Mulţumesc tuturor, în special lui @serghei pentru soluţie.

1 Like

Ma bucur !

Marcheaza raspunsul ca si solutie :smiley: