使用codeigniter中的jQuery Ajax更新数据库中的列

时间:2016-07-23 23:23:59

标签: php jquery ajax codeigniter

我的数据库中有一个视图列。当单击超链接访问某个页面时,我想用+1更新列。我正在使用jQuery,Ajax和codeigniter。我无法做正确的事情,以便在数据库中触发更新。请帮助我找不到的东西。

以下是我的代码:

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

3 个答案:

答案 0 :(得分:1)

你即将解决问题。

首先,在您的JQuery Ajax代码中,我没有看到data参数,它设置要发送的Post数据。在您的情况下,您需要向PHP脚本发送“hid”参数,因此您必须以这种方式指定它:

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

请注意,我已将“hid”添加到链接的“data-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);
}

然后,我不知道你为什么在updateView方法中声明“$ data”参数。如果要更新数据库,则只需要单击已单击元素的“隐藏”。所以方法将是

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

那将是我的解决方案,也许还有一个更好。

答案 1 :(得分:1)

您没有将第二个必需参数$ data传递给updateView,这将导致异常。 此外,在这种情况下不需要$ data,因为您已经在$ this-&gt; db-&gt; set()中设置要更新的参数。

答案 2 :(得分:0)

您没有将第二个必需参数$ data传递给updateView,这将导致异常。

此外,在此实例中不需要$data,因为您已将参数设置为在$this->db->set()内更新。

CodeIgniter 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