0

我尝试使用 select 然后使用 insert 或 delete ... Insert And 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();

    }
4

1 回答 1

0

有几个问题,一些涉及安全性,一些涉及代码样式(您正在为 Joomla 编码,不要使用 php 等效项):

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

$_POST不应该使用,使用JFactory::getApplication()->input->get('paramname')更具体的getInt等之一;

现在到代码:

$rows $result 和 $del 没有被使用;

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

上的测试$_POST["submitCheck"]不测试记录的数量;您应该使用两个查询进行重组;首先,select count(*),max(id) from .... where userid = $user->id;如果查询返回计数>5,则使用 max(id) 选择要删除的行;但更简单的是,仅在 count<5 时插入并完全避免删除。请记住让用户知道,否则它看起来就像一个错误。

于 2013-10-27T08:23:21.663 回答