URI段无法保存在数据库

时间:2017-08-20 20:32:40

标签: php codeigniter

我正在尝试在数据库表中插入新记录。执行插入的功能是:

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

无法添加或更新子行:外键约束失败(dbcomments,CONSTRAINT comments_ibfk_1 FOREIGN KEY(id_book)参考bookid_book))

INSERT INTO commentsid_bookid_usercomments)VALUES(0,'5','test')

所以,它试图插入一本带有id_book=0的书,而事实上书表中没有这样的记录,我不知道id_book=0在哪里,因为$this->uri->segment(3)返回1。

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文件和服务器的信息。