Rechnen mit Timestamp

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Rechnen mit Timestamp

    Hallo!

    Ich muss gestehen, im Rechnen bin ich eine absolute Niete. Jetzt muss ich aber wegen einem Privaten Projekt mit dem Timestamp rechnen und hoffe hier auf eure Hilfe.

    Zu den Daten.
    In der DB Spalte last_login habe ich einen Timestamp. Anhand diesem soll nun geschaut werden ob sich heute schon einer eingeloggt hat, wenn nein der Wert erhöht, wenn nicht soll nichts ausgeführt werden.

    Bisher habe ich lediglich eine IF Abfrage ob der User schon vorhanden ist, wenn nicht führt er einen Insert aus, wenn ja nur ein Update.
    Dies hätte ich gerne noch Erweitert.

    Prüfen Anhand des letzten Logins (last_login) ob der User sich heute schon eingeloggt hat, wenn nein soll die unten aufgeführte IF Abfrage greifen, wenn nein soll sie nicht greifen

    PHP-Quellcode

    1. /*
    2. * Prüfen ob User schon vorhanden
    3. */
    4. $DB->set_sql('SELECT * FROM ' . PREFIX . 'topic_profit_count WHERE poster_id = :1');
    5. $DB->execute((int) $User->get_user_value('user_id'));
    6. $temp = $DB->fetch_assoc();
    7. $DB->free();
    8. if ( Prüfen anhand von last_login ob sich der user bereits heute eingelogt hat )
    9. {
    10. // User vorhanden?
    11. if ( $temp ) {
    12. // Counter Updaten
    13. $sql_update = array();
    14. $sql_update['~login_point'] = '`login_point`+'.$this->get_config('login_point');
    15. $sql_update['~login_count'] = '`login_count`+1';
    16. $sql_update['last_login'] = time();
    17. $DB->set_sql('UPDATE ' . PREFIX . 'topic_profit_count ' . $DB->syntax_built(SQL_UPDATE, $sql_update) . 'WHERE `poster_id`=:1');
    18. $DB->execute($User->get_user_value('user_id'));
    19. $DB->free();
    20. } else {
    21. // Insert
    22. $sql_insert = array();
    23. $sql_insert['poster_id'] = (int) $User->get_user_value('user_id');
    24. $sql_insert['login_point'] = $this->get_config('login_point');
    25. $sql_insert['login_count'] = '1';
    26. $sql_update['last_login'] = time();
    27. $DB->set_sql('INSERT INTO ' . PREFIX . 'topic_profit_count ' . $DB->syntax_built(SQL_INSERT, $sql_insert));
    28. $DB->execute();
    29. $DB->free();
    30. }
    31. }
    Alles anzeigen
  • Klar, klingt erst mal Logisch aber gleich eine API? Auf Spatzen mit Kanonen schießen? :D

    Klappt übrigens nicht. $temp['last_login'] hat den Timestamp von letzter Woche und es gibt weder ein Update noch ein Insert

    PHP-Quellcode

    1. /*
    2. * Prüfen ob User schon vorhanden
    3. */
    4. $DB->set_sql('SELECT * FROM ' . PREFIX . 'topic_profit_count WHERE poster_id = :1');
    5. $DB->execute((int) $User->get_user_value('user_id'));
    6. $temp = $DB->fetch_assoc();
    7. $DB->free();
    8. if ( date('Ymd') == date('Ymd', strtotime($temp['last_login'])) )
    9. {
    10. // User vorhanden?
    11. if ( $temp ) {
    12. // Counter Updaten
    13. $sql_update = array();
    14. $sql_update['~login_point'] = '`login_point`+'.$this->get_config('login_point');
    15. $sql_update['~login_count'] = '`login_count`+1';
    16. $sql_update['last_login'] = time();
    17. $DB->set_sql('UPDATE ' . PREFIX . 'topic_profit_count ' . $DB->syntax_built(SQL_UPDATE, $sql_update) . 'WHERE `poster_id`=:1');
    18. $DB->execute($User->get_user_value('user_id'));
    19. $DB->free();
    20. } else {
    21. // Insert
    22. $sql_insert = array();
    23. $sql_insert['poster_id'] = (int) $User->get_user_value('user_id');
    24. $sql_insert['login_point'] = $this->get_config('login_point');
    25. $sql_insert['login_count'] = '1';
    26. $sql_update['last_login'] = time();
    27. $DB->set_sql('INSERT INTO ' . PREFIX . 'topic_profit_count ' . $DB->syntax_built(SQL_INSERT, $sql_insert));
    28. $DB->execute();
    29. $DB->free();
    30. }
    31. }
    Alles anzeigen
  • PHP-Quellcode

    1. if ( date('Ymd') == date('Ymd', $temp['last_login']) )
    So meinte Arno und das sollte funktionieren, solange der Wert in der DB als Date gespeichert wird. Falls nicht, teil uns bitte den Spaltentypen mit.
    Außerdem solltest du bei sowas, falls nicht anderswo geschehen, immer auf die Zeitzonen achten. Sicherheitshalber einfach immer ein

    PHP-Quellcode

    1. date_default_timezone_set('UTC');
    an den Anfang, dann schließt du schonmal eine große Fehlerquelle aus.
  • Ich habs jetzt ungefähr 1000 Mal versucht :D
    Hier mal mein Aufbau, das $match wäre dann $temp['last_login'].

    PHP-Quellcode

    1. $match = 1435151982; // timestamp von heute
    2. echo $today = (date('Ymd') == date('Ymd', $match)) ? 'heute' : 'nicht heute';

    Ich krieg immer das richtige Ergebnis, d.h. dein Fehler muss woanders liegen.
    Lass dir mal bitte var_dump($temp['last_login']) ausgeben und überprüfe, ob der Timestamp korrekt ist, z.B. indem du in mit date() verarbeitest, ob Leerzeichen am Anfang/Ende sind oder eventuell der Variablenname doppelt vergeben ist.