隐藏文本字段时间运行

时间:2016-02-14 12:47:38

标签: php html mysql textfield hidden-field

我指的是question

如果使用隐藏字段用于在插入记录和数据时在db中存储时间该怎么办?访问者打开页面的时间是:下午3:00,但他在同一页面上插入记录而没有刷新&在下午3:10插入然后结果似乎是下午3:00导致页面加载的时间早些时候似乎是保存。那么我们如何在隐藏的领域保持运行时间!

有关表结构的更多信息,& php声明:

表名:“区域” 列:ID,名称,AreaName,Position,TimeAdded,TimeUpdated,Deleted

使用php mysql。 隐藏文本字段包含:

<input name="TIME" id="TIME" type="hidden" value="<?php date_default_timezone_set("".$row_CompanyDetails['TimeZone']."");echo "".date("Y-m-d G:i:s");?>">

现在让我们说用户打开页面2016-02-14 03:34:59 所以在隐藏领域的价值是:2016-02-14 03:34:59

所以让我们说用户添加记录几秒后记录显示:2016-02-14 03:34:59,因为它必须显示2016-02-14 03:35:10或11或12+ ...

所以我需要确切的价值。这对我来说至关重要。

1 个答案:

答案 0 :(得分:1)

您的应用程序服务器不应该依赖从隐藏输入发布的时间戳。

相反,它应该自己查询提交的时间。这可以在应用程序服务器上或在数据库插入/更新语句本身中完成。

使用MySql documentation中的信息,以下是如何使表格区域将字段 TimeAdded TimeUpdated 保留到正确的时间戳本身(需要MySql版本&gt; = 5.6):

ALTER TABLE Areas
    MODIFY TimeAdded DATETIME DEFAULT CURRENT_TIMESTAMP,
    MODIFY TimeUpdated DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

如果您的MySql版本不支持上述语句,那么请选择以下替代方法:创建将产生相同结果的触发器:

CREATE TRIGGER insAreas BEFORE INSERT ON Areas FOR EACH ROW
    SET NEW.TimeAdded = CURRENT_TIMESTAMP;

CREATE TRIGGER updAreas BEFORE UPDATE ON Areas FOR EACH ROW
    SET NEW.TimeUpdated = CURRENT_TIMESTAMP;

使用此功能,您无需更新任何日期,MySql将为您执行此操作:

  • 无需让PHP在SQL语句中传递这些日期。
  • 无需向浏览器中的隐藏输入发送日期
  • 无需纠正时间或时区。 MySql是唯一一个使用服务器上的时间来更新这些时间的人。