比较数据库中的日期是否大于当前日期

时间:2014-02-14 23:56:06

标签: php mysql sql date session

我坚持这个。

我想要完成的事情听起来很容易,但我还是无法让它发挥作用......

我有几个用户存储在数据库中。他们可以在登录后访问页面。但每个用户都有一个结束日期。因此,如果这一天过去了,他将无法再看到该页面,并将被重定向到另一个页面。但每个用户的日期都不同。

当用户输入其凭据时,会创建一个存储其登录名的$ _SESSION。我需要sql使用此$ _SESSION值从特定用户获取日期。

到目前为止我所拥有的:

$sql="SELECT * FROM $tbl_name WHERE licentiehouder=$naamLicentiehouder";
$naamLicentiehouder = $_SESSION['doorsturen'];
$result=mysql_query($sql);
$row = mysql_fetch_row($result);
$mydate = $row['vervaldatum'];
$curdate=strtotime("now");

if($curdate <= $mydate && $_SESSION['doorsturen'] == 'userONE') {
header("Location: userONE.php");
} else if ($curdate <= $mydate && $_SESSION['doorsturen'] == 'userTWO') {
header("Location: userTWO.php");
} else if($curdate > $mydate) {
header("Location: extend_license.php");
}

所以,每个用户都拥有自己的许可证,该许可证将在确切日期到期。该日期存储在数据库中。因此,如果userONE登录,则$ _SESSION值设置为userONE。 sql读取此值并仅获取与此值匹配的行。如果今天(当前日期)大于存储的日期(因此他的许可证已过期),他将被重定向到一个页面以扩展他的许可证。如果没有,他将能够看到他的个人页面。

希望有人可以帮忙吗?!

2 个答案:

答案 0 :(得分:4)

您运行查询时未定义变量$naamLicentiehouder。尝试:

$naamLicentiehouder = $_SESSION['doorsturen'];
$sql="SELECT * FROM $tbl_name WHERE licentiehouder='$naamLicentiehouder'";

此外,mysql_query()等也会被折旧。使用mysqli。我更喜欢面向对象的方法,因为它可以节省大量的重复输入。

在单独的restricted页面上澄清面向对象的方法,我们称之为connect.php

<?php
// reusable db() function can be called inside other functions
function db(){
  return new mysqli('host', 'username', 'password', 'database');
}
?>

现在在您的另一页上:

<?php
include_once 'restricted/connect.php'; $db = db();
if($db->connect_error)die("Connection Failure: {$db->connect_error}");
$naamLicentiehouder = $_SESSION['doorsturen']; // I would shorted this variable
if($result = $db->query("SELECT vervaldatum FROM your_table_name WHERE licentiehouder='$naamLicentiehouder'")){
  if($result->num_rows > 0){
    $row = $result->fetch_object(); $mydate = $row->vervaldatum;
    $curdate = strtotime('now');
    if($curdate <= $mydate && $naamLicentiehouder === 'userONE'){
      header('LOCATION: userONE.php'); die;
    }
    elseif($curdate <= $mydate && $naamLicentiehouder === 'userTWO'){
      header('LOCATION: userTWO.php'); die;
    }
    elseif($curdate > $mydate){
      header('LOCATION: extend_license.php'); die;
    }
    else{
      die('Date Issue.');
    }
  }
  else{
    die('No results were found.');
  }
}
else{
  die('Error :'.$db->error);
}
$result->free(); $db->close();

答案 1 :(得分:1)

您似乎正在获取$curdate=strtotime("now");的时间戳您从数据库获得的内容可能(虽然我无法确定)是一个日期,而不是时间戳。也可以使用strtotime:

$mydate = strtotime($row['vervaldatum']);

应该这样做。