Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP从表单插入日期时间_Php_Mysql_Date_Datetime_Insert - Fatal编程技术网

PHP从表单插入日期时间

PHP从表单插入日期时间,php,mysql,date,datetime,insert,Php,Mysql,Date,Datetime,Insert,我有一个表单,用户需要选择两个日期,一个只是日期,一个是日期和时间。我有一个基本表单,其中有两个字段,用户必须输入日期(如2014-02-02)和时间日期时间(如2014-02-02 10:20:00),表单验证非常有效 但是,将值插入数据库时会出现问题。这就是我所拥有的: <?php class Quote { public $job_deadline = null; public $job_dispatchdate = null; } public function __co

我有一个表单,用户需要选择两个日期,一个只是日期,一个是日期和时间。我有一个基本表单,其中有两个字段,用户必须输入日期(如2014-02-02)和时间日期时间(如2014-02-02 10:20:00),表单验证非常有效

但是,将值插入数据库时会出现问题。这就是我所拥有的:

<?php
class Quote
{
  public $job_deadline = null;
  public $job_dispatchdate = null;
}

public function __construct( $data=array() ) {
    if ( isset( $data['job_deadline'] ) ) $this->job_deadline = (int) $data['job_deadline'];
    if ( isset( $data['job_dispatchdate'] ) ) $this->job_dispatchdate = (int) $data['job_dispatchdate'];
    //if ( isset( $data['job_dispatchdate'] ) ) $this->job_dispatchdate = date('Y-m-d H:i:s',strtotime($data['job_dispatchdate']));
}

public function storeFormValues ( $params ) {
    $this->__construct( $params );

       if ( isset($params['job_deadline']) ) {
      $job_deadline = explode ( '-', $params['job_deadline'] );

      if ( count($job_deadline) == 3 ) {
        list ( $y, $m, $d ) = $job_deadline;
        $this->job_deadline = gmmktime ( 0, 0, 0, $m, $d, $y );
      }
    }

    if ( isset($params['job_dispatchdate']) ) {
        $job_deadline = $params['job_dispatchdate'];
        list ( $y, $m, $d, $h, $i, $s ) = $job_dispatchdate;
        $this->job_dispatchdate = gmmktime ( 0, 0, 0, 0, 0, 0, $y, $m, $d, $h, $i, $s );
    }

    /*
    if ( isset($params['job_dispatchdate']) ) {
        $datetime = date('Y-m-d H:i:s', strtotime($params['job_dispatchdate']));
    }
    */
}

public function insertjob() {
    $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );

    //$datetime = date('Y-m-d H:i:s', strtotime($params['job_dispatchdate']));  USING $datetime inplace of FROM_UNIXTIME(:job_dispatchdate) and removing st for job_dispatchdate

    $sql = "INSERT INTO tbl1 (job_deadline, job_dispatchdate) 
    VALUES (FROM_UNIXTIME(:job_deadline), FROM_UNIXTIME(:job_dispatchdate))";               
    $st = $conn->prepare ( $sql );
    $st->bindValue( ":job_deadline", $this->job_deadline, PDO::PARAM_INT );
    $st->bindValue( ":job_dispatchdate", $this->job_dispatchdate, PDO::PARAM_INT );
    $st->execute();
    $this->job_id = $conn->lastInsertId();
    $inserted_id = $this->id = $conn->lastInsertId();
    $conn = null;
}
?>
根据评论,我将代码更改为此。并将DB中的字段设置为string Varchar,但无效

 $st->bindValue( ":job_dispatchdate", $this->job_dispatchdate, PDO::PARAM_INT)
应该是

 $st->bindValue( ":job_dispatchdate", $this->job_dispatchdate, PDO::PARAM_STR)
建议:最好将所有日期以unix时间戳格式存储在mysql中

编辑2:将作业\u分派列类型更改为字符串(如果是INT类型)


这似乎解决了问题。谢谢大家

日期以哪种格式作为job_dispatchdate的参数提交?如中所示?从表格上看?字段是date.PDO::PARAM_INT它应该是PDO::PARAM_STR for job_dispatchdateint$data['job_dispatchdate']在我看来很可疑为什么?我试过了,但仍然不起作用。job_deadline使用PDO::PARAM_INT,这很好。因为时间格式的日期不被视为整数。我建议最好将日期以unix时间戳格式存储在DB中,它将解决您的所有问题,因此如果设置$data['job_deadline']$this->job_deadline=INT$data['job_deadline'],我需要更改吗;例如,如果设置$data['job\u dispatchdate']$this->job\u dispatchdate=preg\u replace/[^\.\,\-\\\\\\\\\+\\\\\\\%\?\!&:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;我已经用你们提到的一些变化更新了我原来的帖子,但我仍然没有接近。
 $st->bindValue( ":job_dispatchdate", $this->job_dispatchdate, PDO::PARAM_STR)
if ( isset($params['job_dispatchdate']) ) {
        $job_deadline = $params['job_dispatchdate'];
        $this->job_dispatchdate = date('Y-m-d H:i:s', strtotime( $job_deadline ));
}