[php/sql] tabel updaten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • devos50
  • Registratie: December 2006
  • Laatst online: 15-08 09:51
Hallo allemaal,

Ik ben bezig om een eigen PHP game te maken. Spelers kunnen een character aanmaken en daarmee activiteiten uitvoeren. Deze activiteiten kosten tijd, bijv. iets doen neem 30 minuten inbeslag. Wat ik nu wil is dat als iemand die activiteit start, dat er dan een soort timer gaat lopen. Als deze op 0 staat, dan is de activiteit afgelopen en dat krijgt de speler dan te zien. De timer moet ook door kunnen lopen buiten de sessies om, dus ik zal de timer in een tabel moeten zetten.
Dat is geen probleem, maar wat ik nu wil is dat de timer dan iedere paar seconde wordt geupdated in de database. Ik heb echt geen flauw idee hoe ik dit kan doen. Ik heb al op internet gezocht maar daar kwam ik alleen maar informatie tegen over de update statement, niet wat ik wil.

Kan iemand mij helpen??

Bedankt!

Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Waarom niet alleen de begintijd in de table zetten plus de handeling (met daarbij op de een of andere manier de bijbehorende duur van die handeling) en vervolgens in PHP checken of de handeling al dan niet voltooid is?

Of eindtijd zoals hieronder :+

[ Voor 15% gewijzigd door Osiris op 29-06-2010 17:19 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Waarom een timer updaten in de database als je gewoon de eindtijd kan opslaan? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Tharulerz
  • Registratie: April 2009
  • Laatst online: 10-04 05:16
Er is een simpele oplossing en een iets moeilijkere oplossing:

De simpele oplossing is enkel je tabel updaten als de user inlogt. Immers, waarom zou je de actie updaten als de user het toch niet kan zien?

Sla dus de begintijd en de tijd dat de actie duurt (of de eindtijd) op in je database, en elke keer als de user een pagina opvraagt haal je die 2 waarden op en bereken je in php on the fly het verschil en toon je dat.

Als je een bewegende timer wil op de website, moet je eens gaan kijken naar javascript, er zijn genoeg manieren op een klein klokje of timertje te tonen dat aftelt op de pagina.

Als je ook effectief wil dat de actie wordt voltooid op de juiste moment (bijvoorbeeld omdat andere spelers kunnen zien welke acties iemand doet), dan kan je eens gaan kijken naar een cron-job die je om de minuut of om de 5 minuten alle acties laat updaten (niet de tijd, enkel de status!).

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Tharulerz schreef op dinsdag 29 juni 2010 @ 17:30:
De simpele oplossing is enkel je tabel updaten als de user inlogt.
Ook dat is nog steeds een moeilijke oplossing. Waarom überhaupt de opgeslagen waarde aanpassen als je domweg de eindtijd (of een combinatie van begintijd en tijdsduur) kan opslaan en daarmee gewoon kan rekenen in een javascriptje?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Tharulerz
  • Registratie: April 2009
  • Laatst online: 10-04 05:16
Met updaten bedoel ik de actie status (kijken of de actie gedaan is). De tijd moet nooit geupdate worden.

Acties:
  • 0 Henk 'm!

  • hellfighter87
  • Registratie: Mei 2008
  • Laatst online: 13-09 19:28
je hebt een bgin tijd en een duration.

currenttime - (begintijd + duration ) > 0 en dan is het gedaan.
als je een klok wil dan moet je naar javascript kijken.

Je hoeft dus alleen data uit de tabel te halen en niks te updaten.

[ Voor 17% gewijzigd door hellfighter87 op 29-06-2010 18:14 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Tharulerz schreef op dinsdag 29 juni 2010 @ 18:06:
Met updaten bedoel ik de actie status (kijken of de actie gedaan is). De tijd moet nooit geupdate worden.
En de actie pas als de tijd verlopen is, daar heb je niet eens een status voor nodig...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Tharulerz
  • Registratie: April 2009
  • Laatst online: 10-04 05:16
NMe schreef op dinsdag 29 juni 2010 @ 18:12:
[...]

En de actie pas als de tijd verlopen is, daar heb je niet eens een status voor nodig...
Mijn post ging dus over wanneer je gaat kijken of de tijd verlopen is. Enerzijds kan je dat doen als de user inlogt, anderzijds kan je dat doen in een cron job.

Ik heb me dus misschien wat slecht uitgedrukt.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 00:33

MueR

Admin Tweakers Discord

is niet lief

Waarom zou je elke keer gaan rekenen wat nou de eindtijd is? Die opslaan is veel makkelijker.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 09:51

DukeBox

loves wheat smoothies

Middels MySQL advisor kan je schedules op je database draaien.

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

DukeBox schreef op dinsdag 29 juni 2010 @ 18:19:
Middels MySQL advisor kan je schedules op je database draaien.
Zal ik het nóg een keer zeggen? Dat moet de topicstarter helemaal niet willen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 00:33

MueR

Admin Tweakers Discord

is niet lief

Je bedoelt datgene doen wat we juist afraden omdat het compleet nutteloos is?

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • devos50
  • Registratie: December 2006
  • Laatst online: 15-08 09:51
hey, bedankt voor de reacties!

Ik heb nu de begintijd en de eindtijd in de database opgeslagen. Iedere keer dat de user inlogt, wordt de tijd dat het nog duurt zichtbaar, deze kan worden geupdated dmv. een reload button. Ik ga zelf dan maar een keertje met javascript aan de slag om een echte timer te maken die iedere seconde geupdated wordt. Een ander probleem wat ik ook nog heb is dat de gebruiker nu zelf de actie moet voltooien (dat wil zeggen: als hij inlogt, wordt gekeken of de activiteit voltooid is en dan wordt de activiteit uit de database gehaald) ipv dan dat gebeurt als de timer op 0 springt.

Maar dat is niet zo'n probleem. Ieder geval erg bedankt voor de hulp!

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Waarom sla je de begintijd en eindtijd op? Alleen de eindtijd zou genoeg moeten zijn, of eventueel begintijd en de tijdsduur. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Emmeau
  • Registratie: Mei 2003
  • Niet online

Emmeau

All your UNIX are belong to us

NMe schreef op dinsdag 29 juni 2010 @ 20:18:
Waarom sla je de begintijd en eindtijd op? Alleen de eindtijd zou genoeg moeten zijn, of eventueel begintijd en de tijdsduur. :)
Zou niet aan begintijd + duur beginnen, TS wil op eindtijd iets doen, en dan is scheelt het weer wat (marginaal) rekenwerk for the dbms iedere keer.
Dus wel, eindtijd (+plus duur als je begintijd nodig hebt)

Tuurlijk, het is nitpicken over 3 cpu cycles, echter waarom bewust daarvoor kiezen als er een zuiverder oplossing is?

If you choose to criticise you choose your enemies


Acties:
  • 0 Henk 'm!

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 13-06 23:19
Ik vind het nog qua snelheid nog qua duidelijkheid iets uitmaken (en dus vind ik geen van beiden "zuiverder"...)

Bovendien kan het best wel nuttig zijn de begintijd + basisduur op te slaan. Stel dat je in het spel bijv. snelheids-modifiers hebt die wel bepaalde resources kosten. Als je alleen de alleen de eindtijd opslaatheb je de volgende exploit:
1. Begin actie (eindtijd wordt berekend met versnelling)
2. Zet versnelling uit (maak resources vrij)
3. ???
4. Profit!!!

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
dtech schreef op dinsdag 29 juni 2010 @ 20:40:
Stel dat je in het spel bijv. snelheids-modifiers hebt die wel bepaalde resources kosten.
Maar in dit soort gevallen zou ik ook heel snel afstappen van tijdsunits en overgaan naar eigen units, waarbij de tijd gewoon een x aantal units kost.

Tijdseenheden zijn ook maar zo'n beetje precies ( helemaal als je iets van 1000x zo snel oid gaat invoeren ).
Snelheids-modifiers brengen over het algemeen gewoon een nauwkeurigheid met zich mee die je bij een high-profile game etc niet zomaar wilt laten fluctueren (/me kende vroeger een spel wat idd met time-modifiers werkte en als je dan een bepaalde ntp-server ging DOS'en dan kreeg je extra tijd )

Acties:
  • 0 Henk 'm!

  • devos50
  • Registratie: December 2006
  • Laatst online: 15-08 09:51
Elke activiteit heeft een vaste tijdsduur die ik in een andere tabel heb opgeslagen. Maar de echte tijdsduur hang af van een aantal variabelen (waaronder het level van de character bijv.). Om toch de echte tijdsduur te laten zien sla ik de begin- en eindtijd op. Daar neem ik het verschil tussen en dan heb ik dus de echte tijdsduur die ik kan laten zien ;).

Acties:
  • 0 Henk 'm!

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 13-06 23:19
Ehh, tijd kan nauwkeurig genoeg zijn: voorlopig is één seconde in plankseconden (ongeveer 10^-32) nog altijd meer dan wat er in een double past zonder enorm nauwkeurigheidsverlies.

Bovendien is al je op een schaal van minuten praat een nauwkeurigheid van één seconde meer dan genoeg. 1000x zo snel is natuurlijk onzin, maar 100% van 30 min tot 15 min zou ik zeker open laten

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
dtech schreef op dinsdag 29 juni 2010 @ 21:45:
Ehh, tijd kan nauwkeurig genoeg zijn: voorlopig is één seconde in plankseconden (ongeveer 10^-32) nog altijd meer dan wat er in een double past zonder enorm nauwkeurigheidsverlies.
[sarcasme]Die gasten van php blijven me toch verbazen, dacht ik vroeger altijd dat een ntp-verschil kwam doordat het kristal in mijn server niet precies genoeg was om 1 dag lang tot op de milliseconde gelijk te blijven lopen, halen die gasten van php opeens plankseconden ergens vandaan... Ik kan dus beter maar niet meer met een ntp-server gaan syncen, maar meer met php, dan ben ik preciezer?[/sarcasme]

Tijd in een computer is ( mits hij er niet speciaal voor gebouwd is ) altijd per definitie onprecies. Het interne kristal is afhankelijk van temperatuur etc.
En inderdaad, een verschil van 1 millisec op 30 minuten zal in het begin niet bijster veel uitmaken.
Maar het gaat mij meer om de achterliggende gedachtengang, bij 100x of 1000x of 10.000x versnelling zal je tegen een muur aanlopen, en op het moment dat je dan tegen die muur aanloopt dan is het een spoedprobleem ( want je hebt x gamers die je achter de vodden aanzitten ).
Terwijl als je het al vanaf het begin anders opzet je tegen weinig of geen problemen aan gaat lopen.
Pagina: 1