2016-07-23 34 views
0

我的數據庫中有一個views列。我想在點擊超鏈接訪問特定頁面時用+1更新列。我正在使用jQuery,Ajax和codeigniter。我無法做正確的事情,以觸發數據庫中的更新。請幫助我失去什麼。在codeigniter中使用jQuery Ajax更新數據庫中的列

下面是我的代碼:

HTML

<a href="<?php echo base_url(); ?>site/details/<?php echo $value->hid; ?>" name="hid" id="clicker"> 

JS

$(document).ready(function(){ 

     $("a#clicker").click(function(){ 

     $.ajax({ 
      type: "POST", 
      url: "<?php base_url(); ?>site/traffic", 
      success: function(data){ 
      alert("I got a view"); 
      console.log(data); 
      } 
     }); 
     }); 
}); 

控制器

public function traffic(){ 
    $id = $this->input->post("hid"); 
    $this->My_model->updateView($id); 
} 

型號

public function updateView($id = NULL, $data){ 
    $this->db->set('view', 'view+1'); 
    $this->db->where('id', $id); 
    $this->db->update($this->table, $data); 
} 

回答

1

你靠近解決您的問題。

首先,在您的JQuery Ajax代碼中,我看不到數據參數,它設置發送數據。在你的情況,你需要發送到PHP腳本中的「藏」的參數,所以你必須指定這樣說:

<a href="<?php echo base_url(); ?>site/details/<?php echo $value->hid; ?>" name="hid" id="clicker" data-hid="<?php echo $value->hid; ?>"> 

請注意,我已經添加了「藏」到屬性「數據 - 隱藏「了鏈接。現在,我們可以檢索用戶在JQuery中點擊鏈接的「隱藏」,以便將其發送到PHP腳本。

$("a#clicker").click(function(e){ 
    var hidClicked = e.currentTarget.data("hid"); // retrieve the hid by data attr. 
    $.ajax({ 
     type: "POST", 
      url: "<?php base_url(); ?>site/traffic", 
      data: { hid : hidClicked }, // pass it as POST parameter 
      success: function(data){ 
      alert("I got a view"); 
      console.log(data); 
     } 
    }); 
}); 

現在,在你的PHP代碼,你可以檢索通過

public function traffic(){ 
    $id = $this->input->post("hid"); // this will return the hid POST parameter 
    $this->My_model->updateView($id); 
} 

然後點擊的元素的「藏」,我不知道你爲什麼聲明在「$ DATA」參數updateView方法。如果你想更新數據庫,你只需要點擊元素的「隱藏」。所以方法將是

public function updateView($id = NULL){ 
    $this->db->set('view', 'view+1'); 
    $this->db->where('id', $id); 
    $this->db->update("NAME_OF_YOUR_TABLE"); 
} 

這將是我的解決方案,也許有一個更好的。

+0

謝謝Dhaniram和manuman94。但我還沒有解決我的問題。 Evertything保持不變。我可以選擇適當的'id',但無法更新表格列。有人建議,也許我先爲該列做一個選擇,然後增加值。老實說,我不知道如何實現這個目標,我嘗試了一些技巧,並且在各處都遇到了錯誤。 – pimpace

+0

我最終沒有jQuery的一面工作。我所做的只是將更新查詢放入細節模型函數中。和中提琴,它現在起作用。儘管jQuery確實獲取了所需的數據。也許我會利用它在我的項目的其他領域的使用。 但是,我會投票manuman94的建議。它效果最好,尤其是他的Ajax部分。 謝謝大家。 – pimpace

+0

這是一個可憐的,但是,你有它的工作。不客氣,謝謝大拇指! – manuman94

0

您沒有將第二個必需參數$ data傳遞給updateView,這會導致異常。

此外,在這種情況下不需要$data,因爲您已經設置了要在$this->db->set()內更新的參數。從笨3文檔

例子:

$this->db->set('field', 'field+1'); 
$this->db->where('id', 2); 
$this->db->update('mytable'); // gives UPDATE `mytable` SET `field` = 'field+1' WHERE `id` = 2 

Updating Data - CodeIgniter 3 Docs

+0

好的@Matt,謝謝。但這正是我在我的電腦上所擁有的。我的問題是在Ajax調用中。這是我需要幫助的地方。 – pimpace

1

您沒有將第二個必需參數$ data傳遞給updateView,這會導致異常。 此外,在這個實例中不需要$ data,因爲您已經在$ this-> db-> set()內設置了要更新的參數。

+0

AOA PLX有人幫助我,我需要整個程序插入選擇更新刪除。查看文件模型文件控制器文件首先顯示插入頁面,我們在插入數據後插入數據庫,選擇數據庫中的所有數據 –

相關問題