2015-12-26 3 views
0

Хорошо, я установил компонент для своей Joomla, но теперь я работаю над добавлением пользовательских просмотров счетчиков.Ajax вызов контроллера в 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

Прежде всего у вас есть 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 ВОЛЮ проверьте и подтвердите ввод для вас.

Вы также можете использовать для int непосредственно в своем запросе sql, который является хорошей привычкой.

Затем запросы получаются в кеше. У вас есть два решения, чтобы изменить это поведение:

  • Post запросы никогда не кэшируются, поэтому используйте запрос Ajax пост
  • Specify в функции AJAX, что этот запрос не должен быть кэшированные

Вот 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); 
    } 
Смежные вопросы