2016-07-23 105 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有人帮助我,我需要整个程序插入选择更新删除。查看文件模型文件控制器文件首先显示插入页面,我们在插入数据后插入数据库,选择数据库中的所有数据 –

相关问题