2014-03-04 115 views
1

我有一個包含刪除按鈕的表單。我希望用戶能夠選擇他們希望一次刪除的所有項目。 我設法讓回顯顯示,但項目仍然保留在頁面上。你能指出爲什麼會發生?任何幫助表示讚賞!PHP用複選框刪除多行

刪除按鈕:

<input name="del_btn" type="submit" value="Delete"> 

的檢查:

if (isset($_POST['del_btn']) && $_POST['del_btn']){ 
     for($i = 0; $i < count($_POST['checkbox']); $i++){ 
      if (isset($_POST['checkbox'])) { 
       mysql_query("DELETE FROM `posts` WHERE `id` = '" . $_POST['checkbox'][$i] . "' LIMIT 1"); 
       echo 'deleted'; 
      } 
     } 
} 

的項目複選框:

<input name="checkbox[]" type="checkbox" id="<?php echo $id; ?>" /> 
+0

您的表單正在顯示帖子值。你可以在視圖文件中顯示一些輸入的代碼嗎? – Dan

+0

視圖字段只是一個在while循環內部的div,用於檢索該帖子的必要變量(id,title ..) – Gadgetster

+0

好的,請參閱下面我的回答中的#1。在if語句的末尾創建一個重定向。我不確定頁面上是否有文本字段。我明白你現在在說什麼。另一個選擇是使用jQuery來添加被檢查的隱藏行。 – Dan

回答

2

這真的取決於如何變量在控制器中定義,以及如何它們顯示在您的視圖文件中。

如果你想隱藏/在你的表格,你可以清除值:

  1. 刷新頁面:在創建發送用戶返回到新頁面的if (isset($_POST['del_btn']) && $_POST['del_btn']){語句的結束重定向。
  2. 使用jQuery隱藏選中複選框的div。
  3. 將帖子後的變量重新定義爲NULL後。
  4. 在視圖中爲您的值添加三元運算符,例如<input name="form_input" type="text" value=<?=isset($_POST['del_btn'] ? NULL : $form_input?>>這意味着在提交del_btn時,表單將顯示爲NULL。
+0

不清楚或隱藏,我想從數據庫中永遠刪除某種交易。根據我的理解,你的建議是將它從視野中隱藏嗎? – Gadgetster

+0

是的,他們將被從數據庫中刪除使用mysql_query(「DELETE FROM'posts' WHERE'id' ='」。$ _POST ['checkbox'] [$ i]。''LIMIT 1「);但是頁面在提交時不會自動重新加載。這假定您的查詢工作正常。 – Dan

+0

做一個重定向將是相同的,如果我刷新頁面的權利,所以我嘗試了兩種情況下,在刪除按鈕被點擊後帖子仍然存在 – Gadgetster

0

當您使用複選框你的元素變得比你可以使用多種方法中的一個數組:

使用AJAX(例如用jQuery),以避免提交:

<script> 
$(document).ready(function() { 
    $('[name="del_btn"]').click(function() { 
     $.post('/my/action.php', $('form').serialize(), function(r) { 
     if (r.success) { 
      alert('deleted....'); 
     } else { 
      alert('error'); 
     } 
     },'json'); 
     return false; // prevent submit 
    }); 
}); 
</script> 

比您可以簡化代碼如下:

<?php 
if (isset($_POST['checkbox']) && count($_POST['checkbox'])){ 
    $c = implode(',', array_map('intval', $_POST['checkbox'])); // sanitize data 
    $r = mysql_query("DELETE FROM `posts` WHERE `id` IN(" . $c .")"); 
    echo json_encode(array('success' => $r)); 
} 
+0

我希望只用php來做,因爲我對jquery不太瞭解 – Gadgetster

0
<input name="checkbox[]" type="checkbox" id="<?php echo $id; ?>" /> 

我認爲你必須把類似

<input name="checkbox[]" type="checkbox" value="<?php echo $id; ?>" /> 

請注意單詞「價值」,而不是「id」。您將ID放入id屬性中。如果你想獲取價值,那就是分配一個特定的目標。 (你可以使用Javascript或JQuery來做到這一點)。

對於您的情況,請使用標記「value」來確保您的複選框具有正確的ID值。迴應查詢,而不是單詞「已刪除」。

$queryDel = "DELETE FROM posts WHERE id = " . $_POST['checkbox'][$i] . " LIMIT 1"; 
echo $queryDel; 

如果您使用的是mysql_query(),請注意SQL注入。改用mysqli。使用準備好的語句來防止它或至少提供一些白名單或驗證。

希望這會有所幫助。謝謝。

+0

將id改爲value,並且什麼都沒做。 – Gadgetster

0
<input name="checkbox[]" type="checkbox" value ="<?php echo $id; ?>" id="<?php echo $id; ?>" /> 

試試這個會有用。並檢查值print_r($ _ POST),您將能夠看到所有後期值並能夠獲得正確的值。

+0

我做了print_r並得到了Array([del_btn] => Delete Selected [checkbox ] => Array([0] => 267))列表中的每個項目 – Gadgetster