未插入Codeigniter日期时间

时间:2011-04-09 04:31:13

标签: php mysql datetime codeigniter

我正在尝试在MySql中输入datetime字段中的日期和时间。现在,它正在以00:00:00进入datetime。我有3个表:文章,用户和userarticles。

文章:id(int),title(varchar),url(varchar),body(文本),date(datetime)
user:id(int)....
userarticle:uid(int),aid(int)-where uid是user.id,aid是article.id

这是我的用户控制器的一部分:

function newArticle()
    {
        $this->load->view('newArticleview');
    }

    function insertArticle()
    {
            //insert from form into article table
        $this->db->insert('article', $_POST);

        //get ID of the row just added
        $rowID = $this->db->insert_id();
        $uid = $this->tank_auth->get_user_id();

        $data = array('uid' => $uid, 'aid' => $rowID);

            //insert uid and aid into userarticles table
        $this->db->insert('userarticles', $data);

        redirect('');
    }

我的新文章视图

<html>
<head>
    <title>Save Me - Add New Article</title>
</head>
<body>  
<?php
    $date = date("Y-m-d H:i:s");
    echo form_hidden('date', $date);
    echo form_open('user/insertArticle');
?>
<p>Title:<input type="text" name="title"></p>
<p>URL:<input type="text" name="url"></p>
<p><textarea name="body" rows="20"></textarea></p>

<p><input type="submit" value="Submit"></p>

</form>
</body>

</html>

除了datetime之外,所有内容都正确地插入到数据库中,有没有人知道什么是错的? 隐藏的表单正确显示为<input type="hidden" name="date" value="2011-04-08 21:51:10" />

3 个答案:

答案 0 :(得分:6)

您正在表单开始之前输出隐藏的表单字段。不确定是否会破坏CI,但它是无效的标记。 form_open帮助器可以采用第三个参数 - 隐藏字段数组。所以这样的事情可以代替/添加:

$hidden=array('item_id'=>$this->uri->segment(3)); 
echo form_open('admin/do_upload', '', $hidden); ?>

除非你有特定用途(即用于javascript或其他东西),否则你不需要在视图中输入日期。

我的模型中有类似的东西,由时间创建/修改:

// $data contains everything from the form, I pass this to my model, and then do:

$data['created'] =  date('Y-m-d H:i:s');

$this->db->insert('my_table', $data);

created是我的专栏名称。

如果你没有使用模型,你可以把它放在你的控制器中,但为了MVC的利益,它应该是真正的模型。

不要忘记你总能做到:

print_r($this->input->post())print_r($_POST)查看真正被选中的内容 - 使用输入库有助于自动为您完成所有事情,显然,这不是一项要求,但功能内置于CI中。

答案 1 :(得分:1)

这里有三件事情之一:

  1. $ _POST ['date'] =''

  2. 的值
  3. $ this-&gt; db-&gt; insert('article',$ _POST);没有从你的帖子中取出该字段并将其视为一个空白字符串''。

  4. 您的列名称日期date是保留字

  5. 以下是插入空字符串的证据。首先创建一个样本表并插入您认为输入的字符串:

    mysql> create table uho ( mine datetime );
    Query OK, 0 rows affected (0.10 sec)
    
    mysql> insert into uho values ( '2011-01-12 12:10:00' );
    Query OK, 1 row affected (0.00 sec)
    

    它结帐:

    mysql> select * from uho;
    +---------------------+
    | mine                |
    +---------------------+
    | 2011-01-12 12:10:00 |
    +---------------------+
    1 row in set (0.00 sec)
    

    现在插入空白字符串:

    mysql> insert into uho values ('');
    Query OK, 1 row affected, 1 warning (0.05 sec)
    

    中提琴!你看到的日期:

    mysql> select * from uho;
    +---------------------+
    | mine                |
    +---------------------+
    | 2011-01-12 12:10:00 |
    | 0000-00-00 00:00:00 |
    +---------------------+
    2 rows in set (0.00 sec)
    

    此外,我真的希望为了您的应用程序安全,您不会直接在该db语句中使用$ _POST,除非insert方法清理您的数据,您很容易受到SQL注入攻击。

答案 2 :(得分:1)

只需在模型中插入代码之前插入以下代码即可。

$this->db->set('field name','NOW()',FALSE);

例如:

$this->db->set('posted_date', 'CURDATE()', FALSE);