我尝试使用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();
}
答案 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并且完全避免删除。请记住让用户知道它只是一个错误。