【问题标题】:Optional Date, Time, Datetime filed for Mysql DatabaseMysql 数据库的可选日期、时间、日期时间
【发布时间】:2016-10-18 20:25:16
【问题描述】:

我有一个带有文本字段、多项选择和日期、日期时间、时间字段的 php 表单,我想在提交表单时将日期、日期时间和时间字段设置为可选。怎么办。?值仅插入日期、日期时间、输入时间字段。

php代码

// 获取变量

$checkout_date_input = $_POST['checkout_date_input'];
$checkout_time_input = $_POST['checkout_time_input'];


$arrival_date_time = $_POST['arrival_date_time'];
$arrival_flightno = $_POST['arrival_flightno'];
$departure_date_time = $_POST['departure_date_time'];
$departure_flightno = $_POST['departure_flightno'];

//插入SQL查询

$query = mysql_query("insert into reservationform(booking_checkout_date, booking_checkout_time, booking_arrival_date, booking_arrival_flightno, booking_departure_date,booking_departure_flightno) values ('$checkout_date_input',  '$checkout_time_input',
 $arrival_flightno,'$departure_date_time',$departure_flightno)");

【问题讨论】:

  • 代码为 SQL 注入打开,mysql_* 已被弃用并在 Php7 中关闭使用准备好的语句,你可以使用 isset()。您的可选列必须为 ALLOW NULL。
  • 您的意思是您希望能够将任何格式的日期或时间存储到一个字段中?

标签: php mysql date datetime


【解决方案1】:

解决方案 #1

最好的方法是检查用户是否输入了一些东西,如果他们有你可以传递值,如果他们没有你把变量设为NULL。

if(!empty(trim($_POST['checkout_date_input']))){
    $checkout_date_input = $_POST['checkout_date_input'];
} else {
    $checkout_date_input = null;
}

解决方案 #2

您可以做的另一件事是指定要插入数据库的列名。

INSERT INTO table (column1, column2) VALUES ('value1','value2')

此查询只会将值插入 column1 和 column2,其他列将为空。 如果设置多个 if 语句,检查字段是否已填充,则可以确定在哪些列中插入值,哪些不插入。




这两种解决方案都基于您的数据库列允许空值的假设,空值将被插入到数据库中。

安全

您的代码很容易受到数据库攻击。我建议使用 PDO 和准备好的语句来确保数据库查询的卫生。 More info can be found here.

【讨论】:

  • 还有一件事:)
  • @devpro 那是什么?
  • 不推荐使用的扩展
  • 你可以trim $_POST['checkout_date_input']empty 然后你不需要$_POST['checkout_date_input'] != " "
  • 是的,但是对于未来的访客来说,这应该是很好的知识。我认为:)
猜你喜欢
  • 2017-10-12
  • 1970-01-01
  • 2013-06-16
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多