Joomla - 一个函数中的一些查询

时间:2013-10-26 18:31:48

标签: php sql joomla

我尝试使用select然后使用insert或delete ... Insert和Delete工作正常但是Select选项根本不起作用。我想使用select来显示表中的单行和行数。我有什么不对吗?

 global $Itemid;
    $user = JFactory::getUser();
    $db2 = JFactory::getDBO();
    $mediaid = $_POST["addMediaId"];
    $delid = $_POST['delRow'];


        $query = ' SELECT id'
        . ' FROM #__mediamall_favourite_media'
        . ' WHERE mediaid = "'.$mediaid.'" AND userid = "'.$user->id.'"';

                    $db2->setQuery($query);
        $db2->query();

                $rows = $db2->getNumRows();
        $result = $db2->loadRowList();
        $del = $db2->loadObject();


    if(isset($_POST["submitCheck"]) && $_POST["submitCheck"] == "1") {             
        $query = " INSERT INTO `#__mediamall_favourite_media` (`id`, `userid`, `mediaid`) VALUES (NULL,'".$user->id."','".$mediaid."')";
    }    
    elseif(isset($_POST["submitCheck"]) && $_POST["submitCheck"] == "0") {     
        $query = " DELETE FROM `#__mediamall_favourite_media` WHERE `id` = '".$delid."' "; 
    }  

    if($query) {
        $db2->setQuery($query);
        $db2->query();

    }

1 个答案:

答案 0 :(得分:0)

有几个问题,一些涉及安全性,一些涉及代码风格(你编写Joomla,不使用php等价物):

您必须对来自用户的值使用$db->quote()以防止SQL注入攻击;

不应使用

$_POST,使用JFactory::getApplication()->input->get('paramname')或其中一个更具体的getInt等;

现在代码:

$ rows $ result和$ del未使用;

如果你这样做,你不需要->query() - > loadObject,你可以使用 - > loadObjectList来收集你需要的所有数据。

$_POST["submitCheck"]上的测试不测试记录数量;你应该重新调整两个问题;第一个,select count(*),max(id) from .... where userid = $user->id;如果查询返回计数> 5,请使用max(id)选择要删除的行;但更简单,只有插入if count< 5并且完全避免删除。请记住让用户知道它只是一个错误。