2014-02-14 4 views
0

Я застрял на этом.сравнить, если дата из базы данных больше текущей даты

Это звучит довольно просто, что я пытаюсь достичь, до сих пор я не могу заставить его работать ...

У меня есть несколько пользователей, хранящихся в базе данных. Они могут посещать страницу после входа в систему. Но каждый пользователь имеет дату окончания. Поэтому, если этот день пройдет, он больше не сможет видеть страницу и будет перенаправлен на другую страницу. Но для каждого пользователя существует другая дата.

Когда пользователь вводит свои учетные данные, создается $ _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

'$ curdate' похоже, это временная метка UNIX. Какой тип '$ mydate'? Является ли это типом данных даты в mysql? Пожалуйста, 'echo' содержимое' $ mydate' – antoniom

+0

$ curdate является varchar –

+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

Обычно вы создаете соединение на отдельной защищенной странице, используя '$ db = new mysqli (« host »,« username »,« password », 'базы данных') '. Затем вы должны ввести '$ sql = $ db-> query (" SELECT * FROM $ tbl_name WHERE licentiehouder = {$ _ SESSION ['doorsturen']} ");'. Держись, я разъясню. – PHPglue

+0

@JeffreyvanZwam Как вы можете получить предупреждения 'mysqli_', когда ваш код использует' mysql_' –

+0

Сначала я попробовал ваш код, в результате чего на экране появилось предупреждение «Результаты не найдены». Поэтому я добавил session_start поверх экрана. Теперь он перенаправляет на extend_license.php все время, без разницы, если я изменяю дату из базы данных на завтра или на прошлую неделю, она все равно открывает extend_license.php –

1

Вы, кажется, получают отметку времени с $curdate=strtotime("now"); То, что вы получаете от базы данных, скорее всего (хотя я не могу быть уверен), датой, а не меткой времени. Также используйте strtotime:

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

Это должно быть сделано.

+0

nope, не имеет значения –

+0

Я также пытался изменить базу данных с даты на timestamp и даже datetime, ни один из них не дает результата –

Смежные вопросы