2017-08-20 76 views
1

我想在一個數據庫表中插入一個新的記錄。 ,做插入的功能是這樣的:URI段不能被保存在數據庫中

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,約束comments_ibfk_1 FOREIGN KEY (id_book)參考文獻bookid_book))

INSERT INTO commentsid_bookid_usercomments)VALUES(0,「5」,「測試」)

因此,它試圖插入一本書id_book=0的時候其實有書中表中沒有這樣的記錄,我不知道它在哪兒得到id_book=0因爲$this->uri->segment(3)返回1.

+1

'$這個 - > URI->段(3);'應該是整數,檢查它是否改變了什麼? – cssBlaster21895

+0

@ cssBlaster21895你在說我應該將'$ this-> uri-> segment(3)'轉換爲整數? – eri

+0

什麼是PHP版本?只有在php 5.4之後,你可以使用短陣列語法,它用[]替換array()。 – Vickel

回答

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 
    ]); 
} 

爲什麼你得到URI的第3段與$this->uri->segment(3)問題,我不能告訴你,但希望這工作周圍允許你繼續。

如果是我,爲了修復URI段問題,我會在/application/config/config.php中更改uri_protocol的配置值來進行過期。當你在那裏時,確保你設置了一個有效的base_url。在以前的版本中,你沒有設置BASE_URL,但笨說這是現在必須的。自從v1.7.2(2009)開始,我一直在使用CodeIgniter,並且從未發現URI段存在問題。如果我的建議沒有指向你在正確的方向,我建議分享你的笨config.php文件,你的服務器的一些信息。