Javascript timer uit database, actie als tijd verstreken is

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Allard Keij

Allard Keij

14/06/2012 12:42:02
Quote Anchor link
Hallo allemaal,

Ik heb een dringende vraag waar ik het antwoord maar niet op gevonden kan krijgen.

Wat ik wil bereiken:
1. Mijn PHP script schrijft een tijd naar de database
2. Javascript laat in het PHP script zien hoelang het nog is
3. Nadat de tijd op 0 staat moet het PHP script een actie uitvoeren

Klinkt simpel maar ik krijg het niet voor elkaar.

Bij stap 1 wil ik een timer genereren van 10 seconden. Stap 2 laat dit ook zien dat het nog 10 seconde loopt, 10... 9... 8... 0... Op 0 moet het PHP script weten dat de timer afgelopen is en moet een mysql query uitvoeren.

Kan iemand mij hiermee opweg helpen?

Hartelijk bedankt alvast!
 
PHP hulp

PHP hulp

24/12/2024 18:11:28
 
Jan terhuijzen

jan terhuijzen

14/06/2012 12:47:03
Quote Anchor link
Je kunt javascript aleen iets laten doorgeven aan PHP als je met een formulier verzenden of een AJAX request een server opdracht doet.
Dat wil zeggen: Maak met javascript een timeout en zorg dat na die timeout een formulier wordt gesubmitted of een AJAX request wordt uitgevoerd. Als je geen verstand hebt van AJAX raad ik je de formulier methode aan. (Je kunt het formulier ook verborgen maken zodat je er niks van ziet.)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- Dit in de <head> -->

<script type="text/JavaScript">
function start() {
setTimeout("submit()",10000); // 10000 miliseconden is 10 seconden
}
function submit() {
document.forms["teller"].submit();
}
</script>

<!-- Dit in de body tag -->
<form id="teller" style="display: none;">
<input type="hidden" name="klok" value="true">
</form>
Gewijzigd op 14/06/2012 12:51:07 door jan terhuijzen
 
Kris Peeters

Kris Peeters

14/06/2012 12:53:12
Quote Anchor link
Je snapt dat javascript een script is dat draait op de computer van de gebruiker.

Dit betekent dus:
stap 1 (server side):
- Je schrijft een tijd weg naar de database. (Waar dient dit trouwens voor?)
- Je genereert een html pagina en stuurt die naar de gebruiker. In die pagina zit een javascript timer.

stap 2 (client side):
In deze stap zit je dus op de pc van de gebruiker en heb je geen toegang tot php.
Zoek ergens een "javascript timer".

stap 3:
javascript ziet dat de timer op 0 staat. Nu moet er actie ondernomen worden; hier heb je dus contact nodig met de server.
Twee mogelijkheden:
- ofwel neemt javascript contact op met de server, via Ajax. In dit geval wordt de pagina niet herladen.
- ofwel springt javascript naar een andere pagina, bv. met window.location = "mijn_url.php"
 
Jacco Engel

Jacco Engel

14/06/2012 13:44:27
Quote Anchor link
in dit geval kan het redelijk makkelijk voor zover ik info heb.

1. je weet hoe lang hij moet wachten.
2. Laat je JS zien
3. gebruik nl3.php.net/sleep
 
Allard Keij

Allard Keij

14/06/2012 13:49:28
Quote Anchor link
Hallo,

Hetgeen wat het wat "pittiger" maakt is omdat het gaat over een soort kleine game die je speelt met meerdere mensen tegelijk. Het bestaat uit een potje wazige code maar het werkt ( en zal altijd werken ).

Doormiddel van
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<script>
var auto_refresh = setInterval(
function()
{
$('#gamelist2').load('lobby-players.php?lobbyid=<?echo"$lobbyid";?>&gamelistid=<?echo"$gamelistid";?>&maxplayers=<?echo"$maxplayers";?>');
}, 1000);
</script>


laat ik alle spelers hetzelfde zien.. Hiermee bedoel ik live. Oftewel als 1 persoon een actie onderneemt word het naar de DB geschreven, vervolgens ziet iedereen het live veranderen. Deze timer moet dus bij iedereen precies hetzelfde lopen, ook als ze allemaal net een andere laadtijd hebben.

Ik denk dat ik al deels weet hoe ik het op ga lossen.

Door 1 "host" te kiezen van te voren laat ik de timer gelijk met deze host lopen.

Thanks!
Gewijzigd op 14/06/2012 13:51:19 door Allard Keij
 
Erwin H

Erwin H

14/06/2012 13:53:17
Quote Anchor link
Jacco Engel op 14/06/2012 13:44:27:
in dit geval kan het redelijk makkelijk voor zover ik info heb.

1. je weet hoe lang hij moet wachten.
2. Laat je JS zien
3. gebruik nl3.php.net/sleep

Ik zou zeggen probeer het eens Jacco, volgens mij werkt het niet.
 
Jacco Engel

Jacco Engel

14/06/2012 14:37:35
Quote Anchor link
Erwin hoef ik het niet voor te proberen, weet zo ook wel dat je gelijk hebt ;) even een blont moment
 
Kris Peeters

Kris Peeters

14/06/2012 15:05:40
Quote Anchor link
Allard Keij op 14/06/2012 13:49:28:
...
Oftewel als 1 persoon een actie onderneemt word het naar de DB geschreven, vervolgens ziet iedereen het live veranderen. Deze timer moet dus bij iedereen precies hetzelfde lopen, ...


Verschillende gebruikers moeten dus op het zelfde moment contact opnemen met de server.

Ook wanneer een speler iets verandert, wil je dat de andere gebruikers contact opnemen met de server.

Dit klinkt als een chat venster.
Voor de werking van je spel, kan je best naar chat-software kijken voor inspiratie.

Lees eens dit topic; je herkent daar waarschijnlijk een deel van jouw probleem (ik zet de link op mijn respons).
http://www.phphulp.nl/php/forum/topic/ajax-chat-belastend-voor-de-server/77151/#592038

Wat daar dus gebeurt:
om de zoveel tijd (bv. om de seconde) stuurt javascript een klein verzoek naar de server. Daar kijkt het of er ondertussen een nieuw record in de db is gekomen.
Indien er een nieuw record is, wordt de hele data verstuurd.
Dit houdt de data trafiek minimaal, maar houdt wel iedereen live op de hoogte.
Gewijzigd op 14/06/2012 15:11:18 door Kris Peeters
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.