我的数据库中有一个Views列。当单击超链接访问某个页面时,我想用+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);
}
您即将解决您的问题。
首先,在您的JQuery Ajax代码中,我看不到data参数,该参数设置要发送的Post数据。在您的情况下,您需要将“ hid”参数发送到PHP脚本,因此您必须通过以下方式进行指定:
<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");
}
那将是我的解决方案,也许有更好的解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句