未插入编码器日期时间



我试图在MySql中输入日期和时间到datetime字段。现在,它正在输入日期时间为0000-00-00 00:00:00。我有3个表:文章、用户和用户文章。

article: id (int), title (varchar), url (varchar), body (text), date (datetime)
用户:id (int) ....
Userarticle: uid (int), aid (int)—其中uid是用户。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('');
    }
我newArticleview

<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" />

在表单开始之前输出一个隐藏的表单字段。不确定这是否会破坏CI,但它是无效的标记。form_open helper可以接受第三个参数——一个隐藏字段数组。所以可以这样做/addition:

$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. 的价值$ _POST['日']= "

  2. $ this -> db -> insert("文章",$ _POST);

  3. 没有从您的帖子中拾取字段并将其视为空白字符串。
  4. 你有一个列名称日期date,这是一个保留字

这是插入空字符串的证明。首先创建一个示例表,并插入您认为要输入的字符串:

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)

It checking out:

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)

也我真的希望为了你的应用程序的安全,你不使用$_POST直接在该db语句,除非insert方法消毒你的数据,你很容易受到sql注入攻击。

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

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

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

相关内容

  • 没有找到相关文章

最新更新