countdown script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sunadumari

sunadumari

12/04/2009 13:06:00
Quote Anchor link
Hallo, ik zoek een countdownscript. Uit een sql-database wordt een $duur (bijv. 5 minuten) uitgelezen welke naar nul aftelt zodra op een button (start) geklikt wordt, waarbij een user middels een sessie is ingelogd (dit laatste is al klaar). Bij nul kan er middels een echo aangeven worden dat de tijd afgelopen is en/of er een verdere actie komt. Ik denk dat het script niet of deels javascript moet zijn, want bij het verversen van de pagina begint hiermee het script opnieuw of werkt niet goed. Na dagenlang zoeken naar countdownscript heb ik helaas nog geen gevonden die voldoet aan dat wat ik wil.

Wil/kan iemand helpen? Eventueel tegen een lichte vergoeding (als het script maar goed werkt!)

gr. Sunadumari
 
PHP hulp

PHP hulp

28/04/2024 22:21:14
 
- SanThe -

- SanThe -

12/04/2009 13:13:00
Quote Anchor link
Heb je hier wat aan?
 
Arjan Kapteijn

Arjan Kapteijn

12/04/2009 13:16:00
Quote Anchor link
Ik neem aan dat je naast een 'duur' ook iets van een 'starttijd' in je database heb staan?
 
Sunadumari

sunadumari

12/04/2009 13:20:00
Quote Anchor link
De countdown telt af naar 0. de starttijd is dan $duur, of zie ik dat verkeerd?

SanThe: bedankt, echter bij verversen van de pagina begint de countdown opnieuw... dat is niet de bedoeling.
Gewijzigd op 01/01/1970 01:00:00 door sunadumari
 
Arjan Kapteijn

Arjan Kapteijn

12/04/2009 13:23:00
Quote Anchor link
Ik weet niet wat voor systeem het moet worden en hoe jij de database in hebt gedeeld, maar normaal zou het iets moeten zijn van;

- Duur 10 minuten (database)
- Starttijd 13:15 (database)
- Huidige tijd 13:22
- Nog 3 minuten aftellen

sunadumari schreef op 12.04.2009 13:20:
SanThe: bedankt, echter bij verversen van de pagina begint de countdown opnieuw... dat is niet de bedoeling.


Niet als je het juiste aantal seconden, minuten en uren in het script stopt.
Gewijzigd op 01/01/1970 01:00:00 door Arjan Kapteijn
 
Sunadumari

sunadumari

12/04/2009 13:49:00
Quote Anchor link
- Duur 10 minuten (database)
- Starttijd 13:15 (database)
- Huidige tijd 13:22
- Nog 3 minuten aftellen

en hoe kun je dit met php bewerkstelligen?



Ik weet inmiddels dat het Timestamp is, de begintijd heb ik reeds voor elkaar, echter de eindtijd nog niet. Ik moet dus in php aangeven: eindtijd = beginttijd + duur... daar worstel ik nu mee.
Gewijzigd op 01/01/1970 01:00:00 door sunadumari
 
Arjan Kapteijn

Arjan Kapteijn

12/04/2009 14:12:00
Quote Anchor link
Waarom in PHP? Waarom niet in de SQL database? Als je de starttijd hebt kun je toch het verschil uitrekenen?

SELECT TIMEDIFF( '2009-04-12 12:00:00', NOW())

Eventueel zou je met DATE_FORMAT de tijden 'los' kunnen ophalen voor het script van SanThe.
 
Sunadumari

sunadumari

12/04/2009 16:06:00
Quote Anchor link
combinatie php en sql, er wordt dus wel opgeslagen in een database.
 
Joren de Wit

Joren de Wit

12/04/2009 16:08:00
Quote Anchor link
Maar reken dan ook met de database. Die is nu eenmaal veel beter in het rekenen met data en tijden dan dat PHP dat is.
 
Sunadumari

sunadumari

12/04/2009 16:41:00
Quote Anchor link
ok, daar heb ik echter helaas nog niet zoveel kaas van gegeten.
 
Arjan Kapteijn

Arjan Kapteijn

12/04/2009 16:44:00
Quote Anchor link
Wat heb je nu in je DB staan en -hoe- haal je die gegevens op?
 
The Force

The Force

12/04/2009 17:33:00
Quote Anchor link
Hey,

Als je SQL queries kan dan kan je i.p.c. ook rekenen met mysql. Er zijn een aantal functies die je in de query kan zetten waarmee je met datums kan rekenen. Gelukkig zijn die perfect uitgelegt in de MySQL documentatie:

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

Wat je dan moet doen:
- Bekijk hoe lang nog afgeteld moet worden via mysql query (de tijd die het nu is - starttijd - duur).
- Javascript: als de tijd uit de bovenstaande query groter dan nul is: voer de functie countdown(var seconds) uit.
- Zet de starttijd in de database en begin met aftellen als iemand op de knop drukt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo "<input type='button' id='countdown' value='tel af' onclick='setStarttime(); countdown($seconds)'";
?>

- setStarttime moet via Ajax een php bestand aanroepen dat een query in MySQL uitvoert: UPDATE tabel SET starttime = NOW() WHERE gebruiker = $id o.i.d.
- Maak (of zoek) een functie countdown($seconds) in javascript dat elke seconde aftelt en bij 0 bijvoorbeeld een alert("Tijd voorbij") uitvoert.

Greetz,

Theforce117

Edit:
Typo
Gewijzigd op 01/01/1970 01:00:00 door The Force
 
Sunadumari

sunadumari

12/04/2009 17:37:00
Quote Anchor link
ik heb twee tabellen, user en avonturen.
Die gegevens kan ik zelf tevoorschijn toveren middels php.
Een gebruiker die middels een sessie is ingelogd kan kiezen voor een aantal avonturen. Als hij een avontuur kiest wordt middels now() de begintijd vastgelegd in de sql-database, tabel user. In het veld bezet in de tabel user wordt de waarde op 1 gezet zodat de user niet tegelijketijd iets anders kan doen (een ander avontuur bijv.).
De duur, die ik zelf bepaal, van elk avontuur is al vastgelegd in de tabel avonturen. De waarde van dat veld (duur), bijv. 5 minuten, zou dus simpelweg opgeteld moeten worden bij de begintijd. Dit resultaat wordt dan de eindtijd. Als de eindtijd minus begintijd NUL is is het avontuur afgelopen. Dan volgt middels echo of print een mededeling en het avontuur is beeindigd (waarde van veld bezet in user is dan weer 0).

Wat wel lukt:
de inlogsessie van de gebruiker.
het tevoorschijn toveren van de avonturen
bezet op 1 of 0 zetten ZIE CODE
de begintijd in de db schrijven ZIE CODE

Wat niet lukt:
de countdown (en refresh van pagina heeft hier geen invloed op)
de eindtijd in de db schrijven daar de eindtijd niet/niet juist berekend wordt ZIE CODE
de id van de betreffende avontuur in de db tabel user schrijven (thans waarde 1) ZIE CODE



CODE
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
if ($_POST['Submit']=='OKAY')
{
$query = mysql_query("update $users  SET bezet='1'   WHERE user_email = '$_SESSION[user]' ");
$query = mysql_query("update $users  SET avontuur='1' WHERE user_email = '$_SESSION[user]' ");
$query = mysql_query("update $users  SET avontuurbegin=now()   WHERE user_email = '$_SESSION[user]' ");
$query = mysql_query("update $users  SET avontuureinde=now()+$duration WHERE user_email = '$_SESSION[user]' ");
echo "<meta http-equiv='refresh' content='0;URL=avontuur.php'>";
exit();
    }


$duration is dan de duur van het avontuur, maar deze optelsom klopt niet...
Gewijzigd op 01/01/1970 01:00:00 door sunadumari
 
Joren de Wit

Joren de Wit

12/04/2009 18:10:00
Quote Anchor link
Het is niet nodig om de eindtijd ook in de database op te slaan. Dat is immers al af te leiden uit de opgeslagen begintijd en de opgeslagen duur van een bepaald avontuur.

De manier die je nu gebruikt om e.e.a. op te slaan is niet geheel correct. Je gebruikt nu de users tabel om dingen als begintijd en huidig avontuur op te slaan, maar eigenlijk zou je daar een aparte tabel voor moeten gebruiken. Hoe wil je nu immers bijhouden welke avonturen een bepaalde gebruiker al voltooid heeft?

Neem bijvoorbeeld de volgende opzet:

users
-------
id INT
username VARCHAR
...

avonturen
-------------
id INT
avontuur VARCHAR
duur (in minuten) INT
...

users_avonturen
--------------------
id INT
user_id INT
avontuur_id INT
start DATETIME

Als een gebruiker nu een nieuw avontuur begint, maak je een nieuw record aan in de users_avonturen tabel waarin je naast het user_id en avontuur_id ook de starttijd (NOW()) opgeeft.

Bepalen van de eindtijd van het huidige avontuur van de betreffende gebruiker kan dan als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
  ua.start,
  ua.start + INTERVAL a.duur MINUTE AS eind
FROM
  users_avonturen AS ua
INNER JOIN
  avonturen AS a
    ON a.id = ua.avontuur_id
WHERE
  ua.user_id = 1
ORDER BY
  ua.start DESC
LIMIT 1

Deze query geeft je zowel de start als eindtijd van het huidige avontuur van de gebruiker met het id 1. Het belangrijkste van deze query is de berekening van de eindtijd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ua.start + INTERVAL a.duur MINUTE AS eind

Oftewel de starttijd uit de users_avonturen tabel plus de duur in minuten uit de avonturen tabel.

Mogelijk dat dit je nu allemaal hocus pocus lijkt, maar dan raad ik je toch echt aan om eens wat handleidingen door te gaan lezen om te begrijpen wat hier nu gebeurt. Een paar suggesties:

SQL Beginnershandleiding
Datum- en tijdfuncties in MySQL

Succes!
 



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.