Timestamp opslaan in database
ik wil een teller die bijvoorbeeld 10 u aftelt. Zodat je na die 10u toegang hebt tot een functie. Alleen moet de gebruiker van mij niet heel de tijd online zijn. Hoe doe ik dat?
Mvg
Gewijzigd op 17/05/2015 19:50:17 door John De Zon
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$date = new DateTime();
$date->add(new DateInterval('PT10H')); // zie http://php.net/manual/en/dateinterval.construct.php
$query = "UPDATE tablename SET datum='".$date->format('Y-m-d H:i:s')."'";
?>
$date = new DateTime();
$date->add(new DateInterval('PT10H')); // zie http://php.net/manual/en/dateinterval.construct.php
$query = "UPDATE tablename SET datum='".$date->format('Y-m-d H:i:s')."'";
?>
check of de tijd al gepasseerd is:
Code (php)
Toevoeging op 17/05/2015 13:43:19:
Of laat zien wat het verschil in uren en minuten is:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$query = "SELECT datum FROM tablename WHERE id=".$userId." AND datum > NOW()";
$result = mysqli_query($conn, $query);
if(mysqli_num_rows($result))
{
$row = mysqli_fetch_row($result);
$date = new DateTime($row['datum']);
$now = new DateTime();
$interval = $date->diff($now);
echo $interval->format('%R%h:%i'); // zie http://php.net/manual/en/dateinterval.format.php
} else {
echo 'De wachttijd is verstreken';
}
?>
$query = "SELECT datum FROM tablename WHERE id=".$userId." AND datum > NOW()";
$result = mysqli_query($conn, $query);
if(mysqli_num_rows($result))
{
$row = mysqli_fetch_row($result);
$date = new DateTime($row['datum']);
$now = new DateTime();
$interval = $date->diff($now);
echo $interval->format('%R%h:%i'); // zie http://php.net/manual/en/dateinterval.format.php
} else {
echo 'De wachttijd is verstreken';
}
?>
Gewijzigd op 17/05/2015 13:45:17 door Frank Nietbelangrijk
Kan ik dit script ook in PHP 5.3 gebruiken met MySQL?
Met de oude MySQL extensie. Ik gebruik deze nog op die website.
Dat is geen probleem.
Hoe moet ik het aanpakken als de user bv. op de knop start de tijd drukt?
Je hebt dan twee mogelijkheden:
- Het html formulier waarbij de hele pagina tevens refreshed wordt
- of een AJAX call
Toevoeging op 17/05/2015 17:07:24:
Voorbeeldje van de eerste:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$date = new DateTime();
$date->add(new DateInterval('PT10H')); // zie http://php.net/manual/en/dateinterval.construct.php
$query = "UPDATE tablename SET datum='".$date->format('Y-m-d H:i:s')."'";
mysql_query($query);
}
?>
<form action="" method="post">
<button type="submit">Klik</button>
</form>
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$date = new DateTime();
$date->add(new DateInterval('PT10H')); // zie http://php.net/manual/en/dateinterval.construct.php
$query = "UPDATE tablename SET datum='".$date->format('Y-m-d H:i:s')."'";
mysql_query($query);
}
?>
<form action="" method="post">
<button type="submit">Klik</button>
</form>
Gewijzigd op 17/05/2015 17:08:00 door Frank Nietbelangrijk
@Frank: Bij mij werkt dit script niet.
Wat werkt er niet? Ik raad wel aan om foutafhandeling in te bouwen in de query.
Het zijn natuurlijk slechts voorzetjes. Jezelf er in verdiepen is een must. En als het dan niet lukt is het handig om wat relevante code te laten zien.
Kijk of time(), welke de unix-timestamp geeft, gelijk of hoger is dan de timestamp uit de database. Zo ja: tijd verstreken. Zo nee, niet verstreken.
Hoe kan ik dit oplossen?
Het is niet gegarandeerd dat de klokken van je webserver en je database gelijk lopen.
Maar ik zet gewoon de klok van mijn webserver in de database en haal ze er terug uit.
Als je op basis van strings wilt vergelijken, moet je je datum als jaar-maand-dag formatteren.
Of, wat zelf mijn voorkeur zou hebben, de controle in je SQL-query te doen.
Toevoeging op 21/05/2015 21:16:14:
Overigens vind ik dit regeltje ook wel bedenkelijk:
Op zich is het niet fout en doet het misschien zelfs nog wat het moet doen, maar het suggereert dat je code gebruik maakt van de tijdreisfunctionaliteit in PHP.
GG
Gewijzigd op 21/05/2015 21:18:18 door Paco de Wulp
Je zou dit kunnen oplossen door 2 timestamps op de halen de ene
is de huidige tijd (time_now) en de andere een instelde tijd (time_modified).