1

我正在使用 mysql 和 php 创建一个用户注册系统,并在用户表中添加了一个名为“date_expires”(DATE NOT NULL)的列,以使注册用户的注册日期到期。使用我的表格,用户可以选择他们的注册期限。例如:1 年、2 年、3 年。等。当用户提交表单时,我得到了注册期的值..像这样

$registrationPeriod = $_POST['registration_period]; 

我的问题是如何将具有上述值的过期日期插入到我的用户表中?

我正在尝试将数据插入用户表,但混淆了我如何使用 'date_expires' 列。

到目前为止,这是我的代码...

$q = "INSERT INTO users (username, email, pass, first_name, last_name, date_expires) 
      VALUES ('$u', '$e', '$p, '$fn', '$ln', ????????????? )";

希望有人帮我解决这个问题..谢谢。

4

2 回答 2

2

你可以通过两种方式做到这一点。

PHP

使用strtotime("+2 years")

$expireYears = 2;
$expireDate = strtotime("+" . $expireYears . " years");

MySQL

使用DATE_ADD(NOW(), INTERVAL 2 YEAR)

$expireYears = 2;
$q = "INSERT INTO users (username, email, pass, first_name, last_name, date_expires) 
      VALUES ('$u', '$e', '$p, '$fn', '$ln', DATE_ADD(NOW(), INTERVAL $expireYears YEAR))";
于 2013-01-21T14:35:50.510 回答
1

如果您$_POST['registration_period']1 year, 2 year...的形式出现,那么您可以最轻松地去除整数值并在 MySQL 中执行日期计算,例如数字NOW() + INTERVAL n YEAR在哪里n

// Extract it from the registration_period
// Since it is formatted as "n years" with a space between,
// we can split the string on the space.  list() assigns an array (returned from explode())
// to individual variables. Since we only actually need one of them (the number), 
// we can throw away the second (which is the string "years") by just giving list() one variable
// It still needs a placeholder for the second though, hence the extra comma.
list($years,) = explode(" ", $_POST['registration_period']);
// Make sure it is an int to protect against SQL injection...
$years = intval($years);

在您的查询中,将数字替换为VALUES ()列表中的日期计算:

INSERT INTO users (.......) VALUES (....., (NOW() + INTERVAL $years YEAR));

请考虑切换到支持预处理语句的 API,如 MySQLi 或 PDO。我们只能希望并假设您的所有查询输入变量都已正确清理并过滤了查询当前形式的 SQL 注入。

$u = mysql_real_escape_string($_POST['u']);
$e = mysql_real_escape_string($_POST['e']);
// etc for all query vars...

更多信息list()

于 2013-01-21T14:35:57.137 回答