2014-01-22 42 views
0

我在codeigniter應用程序中有一個模型,每當用戶單擊一個按鈕時,都會爲該條目添加一個點。使用php增加數據庫值

點數作爲字段存儲在我的數據庫的「Items」表中。 points int(11)。數據庫中的點設置爲默認值0。

,增加了1的值到的points在表中一個項目的當前值的代碼如下所示:

public function add_point($id, $current) 
    { 

     $data = array(
     'points' => $current+1, 

     ); 


     $this->db->where('item_id', $id); 
     $this->db->update('Items', $data); 
    } 

這僅適用第一次添加的點。當我單擊該按鈕時,當項目上的當前點爲0(默認值)時,它將添加該點,並且數據庫顯示從0更改爲1的值。但是,當我再次嘗試並單擊按鈕時,它應該添加並更新從1到2的值,但不添加該點。

獲取當前值,並將它傳遞給我的模型的代碼是在我的控制器:

$getq=$this->upload_model->get_item($item_id); 


    foreach ($getq as $item) { 
     $item['points']; 
    } 
$this->upload_model->add_points($item_id,$item['points']); 

但是它會隨時更新從0到1,和只添加這一點。

不知道我在做什麼錯。我該如何解決這個問題,以便每次單擊該按鈕時數據庫中的當前值增加1。

+1

添加獲取$當前值的代碼。 –

+1

在這個函數中運行select查詢並獲得id的最大值,然後在表中添加maxvalue + 1 –

+0

@kumar_v請參閱上文。此代碼獲取項目的數據的罰款,我在我的應用程序中的其他地方使用它,但是,在函數add_points中使用時,它只能從0更新到1 – Tester

回答

2

你實際上已經過度複雜化了,MySQL已經內置了這方面的功能。 CodeIgniter允許您運行完整的查詢。

只需使用:

$this->db->query("UPDATE Items SET points=points+1 WHERE item_id='".$this->db->escape($id)."'"); 

通過使用上面的代碼中,你無需跟蹤點在你的PHP代碼。而且它也會更快。

增加了$ this-> db-> escape($ id)以避免每個@Loz評論的SQL注入。

希望這會有所幫助!

+0

但打開SQL注入。 –

+0

只有$ id直接來自輸入。從他的回答我知道$ id是內部處理的。 – Yani

+0

@Yani這工作,謝謝。此外,該ID來自表單的輸入帖子。但是,在某些情況下,我在應用程序中傳遞id並使用uri段獲取值 – Tester

1

你可以像其他的建議,並獲得$電流值,所以你可以添加+1它,或者乾脆寫出來的SQL自己,笨允許它:

public function add_point($id) 
{ 
    $sql = 'UPDATE items set points=points+1 where item_id='.$id; 
    $this->db->query($sql); 
} 

這將當前item_id等於您的$ id並將1加1的點的值。

祝你好運!

PS:你甚至都不需要$當前

0

安全的方式來執行這樣的查詢

$qry = $this->db->escape_str("UPDATE Items SET points=points+1 WHERE item_id='.$id.'"); 
$status = $this->db->simple_query($qry); 
0

您錯誤地調用你的函數,只要您傳遞參數$項目[「點」]它總是以0開始,只有你不應該這樣調用函數。