我坚持这个。
我想要完成的事情听起来很容易,但我还是无法让它发挥作用......
我有几个用户存储在数据库中。他们可以在登录后访问页面。但每个用户都有一个结束日期。因此,如果这一天过去了,他将无法再看到该页面,并将被重定向到另一个页面。但每个用户的日期都不同。
当用户输入其凭据时,会创建一个存储其登录名的$ _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读取此值并仅获取与此值匹配的行。如果今天(当前日期)大于存储的日期(因此他的许可证已过期),他将被重定向到一个页面以扩展他的许可证。如果没有,他将能够看到他的个人页面。
希望有人可以帮忙吗?!
答案 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']);
应该这样做。