URL не истекает по истечении установленного времени

#php #time #date-comparison

#php #время #сравнение дат

Вопрос:

Итак, у меня есть URL, который должен стать недействительным через час. По какой-то причине он никогда не становится недействительным. Вот код,

 <?php 
session_start();
include_once '../db.php';

//DB query
$stmt = $con->prepare("SELECT token_created_at from reset WHERE token = :urltoken");
$stmt->bindValue(':urltoken', $_GET['token']);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while($row = $stmt->fetch()) {
     $token_created_at = $row['token_created_at'];
}

$_SESSION['token'] = $_GET['token'];

//Remove after testing
 echo $token_created_at."<br>";

$my_dt = DateTime::createFromFormat('m-d-Y H:i:s', $token_created_at);

//Modify error
$expires_at = $my_dt->modify(' 1 hour');

//Return current time to match
echo $current_time = date('m-d-Y H:i:s', time());


?>
<?php if($current_time < $expires_at) : ?>
<!DOCTYPE html>
<html>
    <body>
        <form method="post" action="a.php">
            <input type="password" name="pass1" placeholder="Password">
            <br>
            <input type="password" name="pass2" placeholder="Password, again">
            <br>
            <input type="submit">
        </form>
    </body>
</html>
<?php else : ?>
<h1>Link expired</h1>
<?php endif; ?>
  

Есть идеи? В БД token хранится как 06-27-2014 09:10:50 и текущее время 06-28-2014 09:15:27 , поэтому оно должно быть истекшим. Есть идеи?

Комментарии:

1. Предполагая, что вы используете MySQL, я бы рекомендовал хранить типы даты / времени в виде DATETIME столбцов; по крайней мере, это стандартизировало бы формат до «Y-m-d H: i: s».

2. Кроме того, почему вы используете значение токена в качестве первичного ключа?

Ответ №1:

Вы сравниваете объект DateTime со строкой. Вы не можете этого сделать. Либо сравните оба как строки, либо как объекты DateTime. Я рекомендую последнее.

 $current_time = new DateTime();
<?php if($current_time < $expires_at) : ?>    
  

Вам также не нужно фиксировать результат $my_dt->modify(' 1 hour'); , поскольку он изменяется $my_dt на месте. Итак, вы можете сделать:

 $my_dt->modify(' 1 hour');
$current_time = new DateTime();
<?php if($current_time < $expires_at) : ?>