为了账号安全,请及时绑定邮箱和手机立即绑定

如何构造此代码段以存储 MySQL 中列“publicationDate”的日期和时间

如何构造此代码段以存储 MySQL 中列“publicationDate”的日期和时间

PHP
慕侠2389804 2022-06-11 10:28:18
  public function storeFormValues( $params ) {// Store all the parameters$this->__construct( $params );// Parse and store the publication dateif ( isset($params['publicationDate']) ) {  $publicationDate = explode ( '-', $params['publicationDate'] );  if ( count($publicationDate) == 3 ) {    list ( $y, $m, $d ) = $publicationDate;    $this->publicationDate = mktime ( 0, 0, 0, $m, $d, $y );  } }}这两列都通过隐藏的输入字段存储,因为它们不能由用户通过表单设置。“editedDate”的默认值为 null,除非页面/文章正在更新,因为每次编辑都会不断更改。“publicationDate”的情况设置一次。我遇到的问题是即使通过表单(0000-00-00 00:00:00)设置了正确的值,也没有存储日期。“publicationDate”列仅存储时间值为 - 00:00:00 的日期(例如 2019-12-05 00:00:00),并且在存储编辑的日期时,它存储所有日期和时间值,但日期和错误即使表单提交了正确的值,也会提交到数据库。这就是它被插入数据库的方式$sql = "INSERT INTO examples ( publicationDate, editedDate, title, summary, content, imageExtension ) VALUES ( FROM_UNIXTIME(:publicationDate), FROM_UNIXTIME(:editedDate), :example1, :example2, :example3 )";在 html 表单中,输入“值”被回显echo date( "Y-m-d H:i:s" );在浏览器中查看源代码时,即使是“editedDate”的空值,当它是第一次创建/发布页面(publicationDate)时,“值”也会被设置,这在数据库中可以为空。**我终于通过一些试验和错误修复了它。首先,在表单模板中,只有“publicationDate”的输入被发送到浏览器(*hidden),如果网页/文章刚刚被创建(新),并且如果它正在被编辑,则只有“editedDate”的输入" 正在发送到浏览器。但是后来我不得不更改我知道导致表单中输入的值没有被放入数据库的片段    if ( isset($params['publicationDate'])) {    $this->publicationDate = time ( );    $this->editedDate = time ("");    }     else if (isset($params['editedDate'])) {      $this->editedDate = time( );     }    }
查看完整描述

2 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

我没有看到任何与存储编辑时间戳相关的代码,所以我无法对此发表评论。至于发布日期/时间,请看这一行:

$this->publicationDate = mktime ( 0, 0, 0, $m, $d, $y );

此处的 php 文档 ( php.net mktime ) 显示 mtkime 的参数是小时、分钟、秒、月、日、年。因此,从您的代码中,mtkime(0,0,0,$m,$d,$y)您不会尝试为时间部分存储除 00:00:00 以外的任何内容。

您是否考虑过将 pulbishingdate 的 mysql 列更改为默认值 CURRENT_TIMESTAMP,并为更新前编写触发器以将编辑时间设置为 now()?

如果这不能帮助您解决问题,请尝试共享表单结构和可能的 $_POST 转储以提供更多信息。


查看完整回答
反对 回复 2022-06-11
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

从一方面来看,我们有发布日期,最简单的存储方法是设置数据库以使用CurrentTimeStamp()功能自动填充它,只要您只想存储它并进行任何进一步的更改。如果您没有在 INSERT 查询中指定它,它将只存储一次,并且默认值(当前时间)。


另一方面,editDate,您可以轻松地从 MySQL 服务器获取它,now()而无需使用表单。


PHP


function your_edit_funcion() {

    [...];

    $qry = "UPDATE table SET [...], editDate = NOW()";

    [...]

}


查看完整回答
反对 回复 2022-06-11
  • 2 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信