Timestamp opslaan in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

John De Zon

John De Zon

17/05/2015 12:22:33
Quote Anchor link
Hallo,

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
 
PHP hulp

PHP hulp

24/11/2024 15:20:46
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/05/2015 13:17:28
Quote Anchor link
Op zich niet zo heel moeilijk. Je moet alleen van het idee teller af. Wat je namelijk doet is een timestamp opslaan in de database die een bepaald aantal minuten/uren/dagen later is dan nu. Vervolgens kijk je enkel in de database of het nu later is dan de tijd die in de database staat.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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')."'";
?>


check of de tijd al gepasseerd is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$query
= "SELECT id FROM tablename WHERE id=".$userId." AND datum <= NOW()";
if(mysqli_num_rows($result))
{

    echo 'De wachttijd is verstreken';
}

?>


Toevoeging op 17/05/2015 13:43:19:

Of laat zien wat het verschil in uren en minuten is:
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
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';
}

?>
Gewijzigd op 17/05/2015 13:45:17 door Frank Nietbelangrijk
 
John De Zon

John De Zon

17/05/2015 14:16:23
Quote Anchor link
Kan ik dit script ook in PHP 5.3 gebruiken met MySQL?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/05/2015 15:50:21
Quote Anchor link
>= 5.3.0 lees ik op php.net...

Met mysql... wat bedoel je hiermee?
Gewijzigd op 17/05/2015 15:51:43 door Frank Nietbelangrijk
 
John De Zon

John De Zon

17/05/2015 16:33:16
Quote Anchor link
Met de oude MySQL extensie. Ik gebruik deze nog op die website.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/05/2015 16:37:07
Quote Anchor link
Dat is geen probleem.
 
John De Zon

John De Zon

17/05/2015 16:38:32
Quote Anchor link
Hoe moet ik het aanpakken als de user bv. op de knop start de tijd drukt?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/05/2015 17:03:39
Quote Anchor link
Omdat mijn eerste stukje code dan van toepassing is moet er iets in de database gezet worden. Dat kan enkel vanuit PHP. De knop is in de html pagina in de browser van de client.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>
Gewijzigd op 17/05/2015 17:08:00 door Frank Nietbelangrijk
 
John De Zon

John De Zon

17/05/2015 18:03:35
Quote Anchor link
@Frank: Bij mij werkt dit script niet.
 
- Ariën  -
Beheerder

- Ariën -

17/05/2015 18:31:17
Quote Anchor link
Wat werkt er niet? Ik raad wel aan om foutafhandeling in te bouwen in de query.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/05/2015 19:31:16
Quote Anchor link
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.
 
John De Zon

John De Zon

17/05/2015 20:22:46
Quote Anchor link
Ik ben nu al aardig op weg. Maar alleen nog 1 vraag, hoe controleer je of de verstreken tijd al voorbij is?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
                        $time
= time();
                        $time_now = date('d m y @ H:i:s', $time);
                        $time_modified = date('d m y @ H:i:s', strtotime('+20 minutes'));
                        echo 'The time now is '.$time_now.'<br>The time modified is '.$time_modified;
                        ?>
Gewijzigd op 17/05/2015 20:23:11 door John De Zon
 
Eddy E

Eddy E

17/05/2015 20:29:32
Quote Anchor link
Haal de datum (timestamp) uit de database.
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.

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
16
<?php
$res
= mysqli_query($con, "SELECT timestamp FROM tabel WHERE userid = ".$_SESSION['userid'];
while($row = mysqli_fetch_assoc($res))
 {

 $timestamp_db = $row['timestamp'];
 }


if($timestamp_db >= time())
 {

 // verstreken
 }
else
 {
 // niet verstreken
 }
?>
 
John De Zon

John De Zon

17/05/2015 21:22:31
Quote Anchor link
Na lang zoeken heb ik de oplossing gevonden. Voor als iemand de oplossing nog nodig heeft:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
                        date_default_timezone_set('Europe/Brussels');

                        $time = time();
                        $time_now = date('d m y @ H:i:s', $time);
                        $time_modified = date('d m y @ H:i:s', strtotime('+20 minutes'));
                        if ($time_now < $time_modified) {
                            echo 'Tijd loopt.';
                        }
else {
                            echo 'Tijd afgelopen.';
                        }

?>

Dank je voor alle hulp!
Gewijzigd op 18/05/2015 20:26:02 door John De Zon
 
John De Zon

John De Zon

21/05/2015 19:42:07
Quote Anchor link
Help! Als ik nu gewoon mijn $time_modified uit de database haal werkt de if($time_now < $db_time) niet.
Hoe kan ik dit oplossen?
 
Thomas van den Heuvel

Thomas van den Heuvel

21/05/2015 19:58:41
Quote Anchor link
Als je enerzijds (in je code) gebruik maakt van datum- en tijdfuncties in PHP, en anderzijds van datum- en tijdfuncties in je database (in je queries) dan ben je sowieso met twee maten aan het meten.

Het is niet gegarandeerd dat de klokken van je webserver en je database gelijk lopen.
 
John De Zon

John De Zon

21/05/2015 20:01:44
Quote Anchor link
Maar ik zet gewoon de klok van mijn webserver in de database en haal ze er terug uit.
 
Willem vp

Willem vp

21/05/2015 21:12:32
Quote Anchor link
dag-maand-jaar is een onhandige notatie bij vergelijkingen. Ik neem tenminste aan dat het de bedoeling is dat "31 01 2015" kleiner is dan "01 02 2015".

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if ($time_now < $time_modified)

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.
 
Thomas van den Heuvel

Thomas van den Heuvel

21/05/2015 21:17:15
Quote Anchor link
Oh, inderdaad. Je formatteert je datums in een formaat waarbij je niet kunt sorteren / rekenen.

GG
 
Paco de Wulp

Paco de Wulp

21/05/2015 21:18:00
Quote Anchor link
Ik sla standaard alle datums als yyyy-mm-dd op in de database.
Gewijzigd op 21/05/2015 21:18:18 door Paco de Wulp
 
Martijn B

Martijn B

21/05/2015 21:20:47
Quote Anchor link
Er van uitgaand dat je probleem "met twee maten meten" is.

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).

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT NOW() time_now, time_modified FROM tabel
 

Pagina: 1 2 volgende »



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.