【问题标题】:Inserting two seperate fields into one record php mysql将两个单独的字段插入一条记录php mysql
【发布时间】:2013-05-07 16:15:10
【问题描述】:

我在我的应用程序上使用 php 和 jquery 创建了一个规划器。我有一个部分,用户输入开始日期和开始时间,另一个部分输入结束日期和结束时间。这些字段都是单独的,如下所示:

<input type="text" name="dateFrom" id="dateFrom">  <!-- datepicker plugin -->
<input type="text" name="time_from" id="timeFrom">  <!-- timepicker plugin -->

<input type="text" name="dateTo" id="dateTo">  <!-- datepicker plugin -->
<input type="text" name="time_to" id="timeTo">  <!-- timepicker plugin -->

我想知道的是,一旦用户输入了上述信息,并将数据提交到数据库,而不是在表中创建单独的列,是否有插入 dateFromtimeFrom 字段到一个名为 start_time 的数据库列作为 UNIX 时间戳,对于 dateTotimeTo 字段也是如此。

谁能给我任何关于我将如何做到这一点的想法?

【问题讨论】:

  • 串联是你的朋友。

标签: php mysql datetime unix-timestamp


【解决方案1】:

您可以使用strtotime 组合日期和时间以获取插入前的 UNIX 时间戳。

$dateFrom = "2013-05-13";
$timeFrom = "13:52";

$fromStamp = strtotime("$dateFrom $timeFrom");

注意:

m/d/yd-m-y 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或圆点 (.),则假定为欧洲 d-m-y 格式。

为避免潜在的歧义,最好尽可能使用 ISO 8601 (YYYY-MM-DD) 日期或DateTime::createFromFormat()

【讨论】:

  • 你的速度有点快。是的,只需尝试将您的输入数据转换为这种格式“2013-05-13 00:01”并将其存储在 DateTime 列中
【解决方案2】:

类似

INSERT INTO yourtable (start_time, end_time)
VALUES (UNIX_TIMESTAMP('$dateFrom $timeFrom'), UNIX_TIMESTAMP('$dateTo $timeTo'))

可以,假设您的 $dateFrom 是 yyyy-mm-dd,$timeFrom 是 hh:mm:ss。当然,如果您直接将表单字段填充到查询中,这将受到 SQL 注入攻击,但这只是向您展示一种应该执行此操作的方法。

【讨论】:

  • 我对发布此类解决方案的唯一犹豫是注射的可能性。
  • 使用参数化查询,php 会为您解决问题。但是您仍然不应该直接从用户那里接受日期,否则有人会尝试传递一些退化的9999-99-99 99:99:99 或其他任何东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 2023-03-28
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2023-02-04
相关资源
最近更新 更多