2012-12-31 54 views
1

我想創建一個批量刪除按鈕。我正在嘗試創建一個輸入字段,其中管理員可以指定他/她想要刪除的行數。從SQL數據庫刪除特定數量的行

到目前爲止,我使用下面的代碼,試圖刪除輸入字段中指定的金額,但什麼也沒發生,並有在錯誤日誌中沒有任何錯誤:

helper.php

function deleteall($all) { 
    $db = JFactory::getDBO(); 
    $query = $db->getQuery(true); 
    $query->delete() 
    ->from('#__shoutbox'); 
    $db->setQuery($query, 0, $all); 
    $db->query(); 
} 

mod_shoutbox.php

if(isset($post['deleteall'])) { 
    $all = $post['all']; 
    modShoutboxHelper::deleteall($all); 
} 

如default.php

<form method="post" name="deleteall"> 
    <input name="all" type="text" value="" /> 
    <input name="deleteall" type="submit" value="mass delete" /> 
</form> 

我相信SQL查詢是很好,這個問題是在如default.php的HTML,但不是100%肯定的事。有人可以讓我知道我要去哪裏嗎?

更新:

$post,因爲我使用Joomla編碼標準已經確定。

+0

我不知道Joomla,但不應$ post是$ _POST? –

+0

當你調用函數deleteall'時,'$ all'的類型和值是什麼,你期望'$ db-> setQuery($ query,0,$ all);'do? - 您要查找的SQL關鍵字可能是「LIMIT」條款。 - 它屬於SQL,不屬於返回的行數。 – hakre

+0

不知道你在這個PHP代碼中做了什麼,但是你可以在SQL中使用'LIMIT'來限制要刪除的記錄:'從表格限制100中刪除' –

回答

1

我猜你正在嘗試做的事情是不可能的,因爲下面的原因。你怎麼能告訴db哪些行被刪除?你顯然應該有一個過濾器。 EG:DELETE FROM table_name WHERE ID BETWEEN 1 AND 2999。這裏僅刪除具有1 & 2999之間的ID的行。

否則你想要的是LIMIT。 EG:DELETE FROM table_name WHERE ID BETWEEN 1 AND 2999 LIMIT 1000LIMIT可以限制要刪除的行。

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name 
    [PARTITION (partition_name,...)] 
    [WHERE where_condition] 
    [ORDER BY ...] 
    [LIMIT row_count] 

在這裏你沒有任何語法錯誤,你出錯的地方是邏輯。希望解釋一切。如果您有任何問題,請告知我。

0

您的文章處理程序不正確。它應該是$ _POST ['deleteall']

+0

我使用Joomla編碼標準,並已定義;) – Lodder

+0

是default.php中包含mod_shoutbox.php,因爲我沒有看到它,也沒有指向它的表單操作。 –

+0

是的,一切都包括在內。這個留言箱功能齊全,所有其他功能都可以工作,即使是刪除單個留言的功能,但我似乎無法設置限制。我只能刪除每一行。 – Lodder

0

問題是,方法deleteall沒有收到它的$all參數(它沒有收到任何內容,所以0被查詢類使用)。