2010-10-19 107 views
0

我有一个CakePHP应用程序,允许用户注册和发布项目。在某些时候,而我一直在摆弄它我设法改变被创建的用户记录时,当前日期被捕获的方式:(当创建一个新的用户帐户的日期默认为CakePHP:注册用户不会保存正确的日期

Jan 19th 1970, 01:00 

这里在用户控制我的注册动作:

function register() 
{ 
    if (!empty($this->data)){ 
     if ($this->data['User']['password'] 
       == $this->Auth->password($this->data['User']['password_confirm'])) { 

        $this->User->create(); 
        if ($this->User->save($this->data)){ 
         $this->redirect(array('action' => 'index')); 
        } 

     } else { 
      $this->Session->setFlash('password mismatch'); 
    } 
} 
} 

注册视图:

<?php 
$currentdatetime = time(); 
echo $form->create('User', array('action' => 'register')); 
echo $form->input('username', array('label' => 'Username')); 
echo $form->input('fname', array('label' => 'First name')); 
echo $form->input('lname', array('label' => 'Last name')); 
echo $form->input('emailaddress', array('label' => 'Email Address')); 
echo $form->input('website', array('label' => 'Website')); 
echo $form->hidden('created', array('value' => $currentdatetime)); 
echo $form->input('password', array('label' => 'Password', 'type' => 'password')); 
echo $form->input('password_confirm', array('label' => 'Retype Password', 'type' => 'password')); 
echo $form->submit(); 
echo $form->end(); 
?> 

我有一个创建DATETIME列用户表不为空,默认为“0000。 -00-00'

有人可以帮我吗?我想我也许只是删除了一条线鳕鱼什么的

致谢,

Jonesy

+0

没有日期数据供我们调试。你必须验证几件事情......日期如何从视图传递给控制器​​?如果格式不正确,那就是你的问题。 – Stephen 2010-10-19 20:47:54

+0

没有抱歉,只是格式我显示在视图中的日期时间。我更新了代码,看起来像我认为的那样。但它不起作用,也许你可以帮忙? – iamjonesy 2010-10-19 20:58:41

回答

3

created列的默认值必须是NULL:对于MySQL,这将是NOW()

这些领域需要与设置为默认值日期时间字段NULL被CakePHP识别。

+0

图例!谢谢dhofstet! – iamjonesy 2010-10-20 08:54:19

2

在插入,CakePHP会自动在日期填写,如果有一个名为created一个DATETIME列。你不需要自己填写日期。

如果您确实希望手动填写日期,那么您应该使用db格式(例如,YYYY-MM-DD hh:mm:ss)。 你的代码只是传递一个unix时间戳,这就是为什么日期没有被正确填写。

要手动提交日期,您有几个选项。您可以使用date功能:

$currentdatetime = date('Y-m-d H:i:s'); 

,或者你可以使用数据库的本地功能。根据cookbook

$this->data['User']['created'] = DboSource::expression('NOW()'); 
$this->User->save($this->data); 
+0

这很有趣,因为我一开始并没有隐藏领域,它仍然表现得一样。试了$ this-> data ['User'] ['created'] = DboSource :: expression('NOW()');但我仍然得到1970年1月19日01:00的日期 – iamjonesy 2010-10-19 21:12:19