我的数据库中有一个视图列。当单击超链接访问某个页面时,我想用+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);
}
答案 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