【问题标题】:Cakephp not saving the selected value of date fieldCakephp 不保存日期字段的选定值
【发布时间】:2016-09-22 18:35:52
【问题描述】:

我有这个问题,我使用的是 cake 2.8.x,我的 cakephp 应用程序没有保存日期字段的选定值。即使您选择了 "2016-02-02" ,它也会一直保存 "1970-01-01" 。有什么问题?

这是我在控制器中的代码

$this->request->data['Jobapp']['dayofbirth']= date('Y-m-d H:i:s', strtotime($this->request->data['Jobapp']['dayofbirth']));
$this->request->data['Jobapp']['dateofissue']= date('Y-m-d H:i:s', strtotime($this->request->data['Jobapp']['dateofissue']));
$this->request->data['Jobapp']['expirydate']= date('Y-m-d H:i:s', strtotime($this->request->data['Jobapp']['expirydate']));

这是视图文件中的字段之一

<td><?php echo $this->Form->input('dayofbirth',array('label'=>'Date of Birth','type'=>'date','minYear'=>date('Y') - 90))?>

可能是什么问题?

    'dayofbirth' => array(
        'day' => '12',
        'month' => '08',
        'year' => '1993'
    ),
    'maritalstatus' => 'emtpy',
    'nationality' => 'empty',
    'complexion' => '',
    'passportnumber' => '',
    'dateofissue' => array(
        'month' => '05',
        'day' => '25',
        'year' => '2016'
    ),
    'placeofissue' => '',
    'expirydate' => array(
        'month' => '05',
        'day' => '25',
        'year' => '2016'
    ),

【问题讨论】:

  • 在保存添加操作之前进行调试?
  • @skywalker,我已经调试过了,但我仍然得到错误的值作为调试中的值,见下文 ''dayofbirth' => '1970-01-01 01:00:00', 'maritalstatus' => 'emtpy', 'nationality' => 'empty', 'complexion' => '', 'passportnumber' => '', 'dateofissue' => '1970-01-01 01:00:00 ', '发行地点' => '', '有效期' => '1970-01-01 01:00:00','
  • 请在您的问题中显示您的控制器操作代码。
  • @skywalker 检查帖子,我把它贴在那里
  • 你为什么要首先手动建立一个新的日期时间值? CakePHP ORM 会自动执行此操作,因为您的数据库列被定义为正确的 DATE/TIME 类型。

标签: cakephp cakephp-2.8


【解决方案1】:

您的日期字段是数组。试试:

 $this->request->data['Jobapp']['dayofbirth']= date('Y-m-d H:i:s', strtotime(implode('-',$this->request->data['Jobapp']['dayofbirth'])));

其他字段相同

【讨论】:

    【解决方案2】:

    您不需要修改日期字段,CakePHP 会处理它。所以你可以摆脱这些行:

     $this->request->data['Jobapp']['dayofbirth']= date('Y-m-d H:i:s', strtotime($this->request->data['Jobapp']['dayofbirth']));
     $this->request->data['Jobapp']['dateofissue']= date('Y-m-d H:i:s', strtotime($this->request->data['Jobapp']['dateofissue']));
     $this->request->data['Jobapp']['expirydate']= date('Y-m-d H:i:s', strtotime($this->request->data['Jobapp']['expirydate']));
    

    【讨论】:

      【解决方案3】:

      您可以借助jquery ui,避免使用控制器修改日期字段。

      在您看来,请进行以下更改,

      <!-- Load the jquery & jquery ui library -->
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
      <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
      
      <script>
          $(function(){
              $(".datepicker").datepicker({dateFormat:"yyyy-mm-dd"});
          });
      </script>
      <?php echo $this->Form->input('dayofbirth',['class'=>'datepicker']); ?>
      <?php echo $this->Form->input('dateofissue',['class'=>'datepicker']); ?>
      <?php echo $this->Form->input('expirydate',['class'=>'datepicker']); ?>
      

      请删除您处理输入数据的控制器代码。然后您应该能够以正确的格式插入日期。

      【讨论】:

        猜你喜欢
        • 2012-01-04
        • 2012-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        • 2014-02-11
        相关资源
        最近更新 更多