我正在尝试在数据库表中插入新记录。执行插入的功能是:
public function comment($id_b,$comment){
$id_u = $this->session->userdata('userid');
$result=$this->db->insert('comments',['id_book'=>$id_b, 'id_user'=>$id_u, 'comment'=>$comment] );
return $result;
}
调用comment
的控制器函数:
public function comment()
{
$this->load->model('model');
$id_b= $this->uri->segment('3');
$comment=$this->input->post('comment');
$this->model->comment($id_b,$comment);
}
我想要获得的uri细分是id
。问题是它无法保存在数据库中,它始终具有值NULL
。
我尝试了echo $this->uri->segment('3');
并且它实际上返回了id,但我不明白为什么它在数据库中保存为NULL
值。
当我尝试这个时:(int)$this->uri->segment('3');
,我收到了这个错误:
错误号码:1452
无法添加或更新子行:外键约束失败(db
。comments
,CONSTRAINT comments_ibfk_1
FOREIGN KEY(id_book
)参考book
(id_book
))
INSERT INTO comments
(id_book
,id_user
,comments
)VALUES(0,'5','test')
所以,它试图插入一本带有id_book=0
的书,而事实上书表中没有这样的记录,我不知道id_book=0
在哪里,因为$this->uri->segment(3)
返回1。
答案 0 :(得分:0)
有一个解决方案,可以从路由到的控制器方法的参数中获取$id_b
值。根据您的上述评论,您的URI字符串似乎是search_results / result / 1。这意味着您将在search_results控制器中路由到结果方法。 $id_b
为1。
在Search_results.php控制器中:
/**
* Result
* @param int $id_b
*/
public function result( $id_b )
{
// Pass $id_b to the comment method
// or whatever method calls the comment method
$this->comment( $id_b );
}
/**
* Comment
* @param int $id_b
*/
public function comment( $id_b )
{
$comment = $this->input->post('comment');
$this->load->model('model');
// Continue passing $id_b to the model
$this->model->comment( $id_b, $comment );
}
模型中的代码大部分可以保持不变。
/**
* Comment
* @param int $id_b
* @param string $comment
*/
public function comment( $id_b, $comment )
{
$id_u = $this->session->userdata('userid');
return $this->db->insert('comments',[
'id_book' => $id_b,
'id_user' => $id_u,
'comment' => $comment
]);
}
我无法告诉您为什么在使用$this->uri->segment(3)
获取URI的第3段时遇到问题,但希望这种解决方法可以让您继续。
如果是我,为了解决URI段问题,我会在/application/config/config.php中更改uri_protocol的配置值。当您在那里时,请确保您正在设置有效的base_url。在以前的版本中,您不必设置base_url,但CodeIgniter说这现在是强制性的。自v1.7.2(2009)以来,我一直在使用CodeIgniter,并且从未见过URI段的问题。如果我的建议没有指出正确的方向,我建议分享一些有关CodeIgniter config.php文件和服务器的信息。