Проверить текущую дату против даты в базе данных - PullRequest
0 голосов
/ 31 декабря 2011

То, что я делаю с этим кодом, проверяет базу данных на дату, которая заканчивает редактирование (скажем, сегодняшняя дата - 30.12.11, последняя дата правок была или 12.12.10 = ЗАБЛОКИРОВАНО или сегодняшняя дата - 12/ 30/11 последняя дата правок была или есть 12/12/13 = РАЗБЛОКИРОВАНА и отправлена ​​на редактирование сайта)

Итак, с учетом этого вот проблема: код, который я всегда говорю, говорит, что ваша учетная запись заблокирована, нетне имеет значения дата блокировки, и я не могу найти решение: (.

Кстати, имейте в виду, что к этому моменту заголовки уже отправлены.

<?php
$id = $_GET['id'];
// Define MySQL Information.
$mysqlhost="***************"; // Host name of MySQL server.
$mysqlusername="**********"; // Username of MySQL database. 
$mysqlpassword="*********"; // Password of the above MySQL username.
$mysqldatabase="*************"; // Name of database where the table resides.
// Connect to MySQL.
mysql_connect("$mysqlhost", "$mysqlusername", "$mysqlpassword")or die("Could not connect to     MySQL.");
mysql_select_db("$mysqldatabase")or die("Could not connect to selected MySQL database.");

$infosql = "SELECT * FROM premiersounds_users WHERE customer_id = $id";
$inforesult = mysql_query($infosql) or die(mysql_error());
$info = mysql_fetch_array($inforesult);


$l_date=$info['lockout_date'];

//Get current date from server
    $format="%m/%d/%y";
$c_date=strftime($format);
//set sessions
$_SESSION['current_date'] = $c_date;
$_SESSION['lockout_date'] = $l_date;

//Check is Current date = lockout date
if ($c_date <= $l_date) { header("location:/planner_scripts/documnet_editors    /edit_weddingplanner.php?id=$id"); } else {echo 'Whoops! Were sorry your account has been locked to edits because your event is less than 48 hours from now or your event has passed. To make changes to your event please contact your DJ.'; echo'<br/>'; echo ' Todays Date: ';echo $c_date; echo ','; echo ' Last Date for edits: '; echo $l_date;}
?>
<?php
//Destroy Session for Lockout Date to prevent by passes
unset($_SESSION['lockout_date']);
?> 

Ответы [ 2 ]

1 голос
/ 31 декабря 2011

Пара вещей ...

  1. Код в том виде, в котором он был опубликован, широко открыт для SQL-инъекций. атаки. Вы должны всегда очищать пользовательские данные, прежде чем включать их в запрос БД. Я добавляю mysql_escape_string() звонок в коде ниже чтобы предотвратить это, а также упомянуть простое целочисленное приведение. Есть другие способы сделать это. Вы можете узнать, как поиск SO на тема.
  2. Один простой способ сравнить даты - использовать класс PHP * DateTime. Код ниже создает экземпляры DateTime ... один для текущая дата и дата от даты блокировки, полученной из база данных. Если у вас есть эти объекты, вы можете сравнить их.

<?php
$id = $_GET['id'];
// Define MySQL Information.

$mysqlusername=""; // Username of MySQL database. 
$mysqlpassword=""; // Password of the above MySQL username.
$mysqldatabase=""; // Name of database where the table resides.
// Connect to MySQL.
mysql_connect("$mysqlhost", "$mysqlusername", "$mysqlpassword")or die("Could not connect to     MySQL.");
mysql_select_db("$mysqldatabase")or die("Could not connect to selected MySQL database.");

// IMPORTANT: PREVENT SQL INJECTION
$id = mysql_escape_string($id);
// Or, if $id is supposed to be an integer just do this ...
// $id = (int) $id;

$infosql = "SELECT * FROM premiersounds_users WHERE customer_id = $id";
$inforesult = mysql_query($infosql) or die(mysql_error());
$info = mysql_fetch_array($inforesult);

//Get current date from server
$c_date = new DateTime();
$l_date = new DateTime($info['lockout_date']);

//Check is Current date = lockout date
if ($c_date->format('Y-m-d') <= $l_date->format('Y-m-d')) {
  header("location:/planner_scripts/documnet_editors/edit_weddingplanner.php?id=$id");
} else {
  echo 'Whoops! Were sorry your account has been locked to edits because your event is less than 48 hours from now or your event has passed. To make changes to your event please contact your DJ.';
  echo'<br/>';
  echo ' Todays Date: ';
  echo $c_date;
  echo ',';
  echo ' Last Date for edits: ';
  echo $l_date;
}

?>
1 голос
/ 31 декабря 2011

Вы сравниваете даты в виде строк. Вы сравниваете что-то вроде 30.12.2011 с чем-то вроде 12/11/2011 или чем-то еще. PHP может и будет делать это, но будет воспринимать их как строки.

Основная странность заключается в том, что 0 не подразумеваются, как в случае числовых типов.

Кроме того, ваши форматы даты не будут совпадать. MySQL возвращает что-то вроде 2011-12-30, тогда как ваше strftime будет делать что-то вроде 30/12/2011.

Попробуйте что-то вроде

$c_date_stamp = strtotime($c_date);
$today = strtotime('today');

if($c_date_stamp <= $today) { }

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

Например, если вы делаете это в строковой форме, величина частей даты должна быть в порядке убывания:

if($c_date <= date('Y-m-d'))

Также обратите внимание, что если один использует ведущий ноль в дни <10, другой должен сделать это тоже. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...