好的,我为我的Joomla安装了一个组件,但现在我正在努力添加自定义计数器视图。
在组件的controller.php中,我添加了以下功能:
function updateView() {
$db = JFactory::getDBO();
$videoid = JRequest::getVar('videoid');
if ($videoid) {
$query = "update #__hdflv_upload SET times_viewed=1+times_viewed where id=$videoid";
$db->setQuery($query);
$db->query();
}
$query = "select times_viewed from #__hdflv_upload where id=$videoid";
$db->setQuery($query);
$timeView = $db->loadResult();
echo $timeView;
jexit();
}
无论如何,在页面中我试图用php调用此函数并且工作正常,但启用了缓存后脚本停止工作。他们告诉我,在Joomla中,反对意见应始终在Ajax中。但我是Ajax的专家,我试过这个,但没有结果:
<script>
$.ajax({
url: 'index.php?option=com_contushdvideoshare&task=updateView&format=raw',
success: function(data){
if(!data.length){
// Throw an error
return;
}
$('.container').html(data);
}
});
</script>
有人能帮助我吗?谢谢
答案 0 :(得分:0)
首先,您的第一个代码中应该有一个SQL注入漏洞:
function updateView() {
$db = JFactory::getDBO();
$videoid = JRequest::getInt('videoid');
if ($videoid) {
echo '0';
jexit();
}
$query = "update #__hdflv_upload SET times_viewed=1+times_viewed where id=".(int)$videoid;
$db->setQuery($query);
$db->query();
$query = "select times_viewed from #__hdflv_upload where id=".(int)$videoid;
$db->setQuery($query);
$timeView = $db->loadResult();
echo $timeView;
jexit();
}
如果你想要检索一个整数,请使用JRequest :: getInt('videoid'),Joomla将为你检查并验证输入。
你也可以直接在你的sql查询中转换为int,这是一个好习惯。
然后,缓存获取查询。您有两种解决方案可以改变这种行为:
这是js代码修改
$.ajax({
url: 'index.php?option=com_contushdvideoshare&task=updateView&format=raw',
method: "POST", //Use post method
cache: false, //Specify no cache
success: function(data){
if(!data.length){
// Throw an error
return;
}
$('.container').html(data);
}