2011-03-15 87 views
0

我想用複選框刪除多個記錄。我已經加載每個複選框與記錄ID:從使用PHP的超鏈接刪除多個MySQL記錄

<?php $row_count = 1; do { ?> 
    <tr <?php if ($row_count%2) { ?>bgcolor="#F4F4F4"<?php } ?>> 
     <td align="center" ><input name="checkbox[]" type="checkbox" id="checkbox[]" value="<?php echo $row_contactlist['contact_id']; ?>"></td> 
     <td align="center" ><p><?php echo $row_contactlist['contact_id'];?></p></td> 
    </tr> 
    <?php $row_count++; } while ($row_contactlist = mysql_fetch_assoc($contactlist)); ?> 

我運行刪除使用以下鏈接:

<a class="addcontact" href="delete.php?mContact=<?php for($i=0;$i<=$row_count;$i++) { $del_id = $checkbox[$i]; } echo $del_id ?>" style="border-bottom:0px" >Delete Contact(s)</a> 

運行delete.php

if (isset($_GET['mContact'])) { 
mysql_query("DELETE FROM contacts WHERE contact_id = ".$_GET['mContact'].""); 
mysql_query("DELETE FROM history WHERE history_contact = ".$_GET['mContact'].""); 
mysql_query("DELETE FROM notes WHERE note_contact = ".$_GET['mContact'].""); 
redirect('You have deleted some contacts',"contacts.php"); 
} 

的重定向工作,即聯繫人頁面重新加載'你已經刪除了一些聯繫人',它看起來像我沒有得到任何錯誤,但沒有聯繫人被刪除。

更新: 感謝球員非常迅速的反應。總PHP newb,所以一切都非常讚賞。

所以我會用一個按鈕填滿不是超鏈接:

<td colspan="5" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" id="delete" value="Delete"></td> 
+2

哦,夥計!你將得到如此多的驗證投訴! – JohnP 2011-03-15 17:32:28

+0

複選框的ID不應該相同。 – Gaurav 2011-03-15 17:45:16

+5

希望沒有什麼可以蜘蛛您的網站,或者你下次會看到空的數據庫。 – 2011-03-15 17:45:25

回答

0

我相信你正在處理選擇要刪除的條件的混合。

將用戶帶到刪除頁面的鏈接與代碼中的複選框無關。

我相信你想做的事是

  1. 創建複選框(如果你想要的東西,在默認情況下被刪除,設置checked="checked"
  2. 更改<a href..>到一個提交按鈕
  3. delete.php複選框將位於數組$_GET['checkboxes']中,您可以通過這個數組迭代

現在,解決問題s @JohnP暗指:

  1. 這是非常不安全的方式來做到這一點,除非您在發佈之前已經刪除了所有驗證代碼。
  2. 我會建議通過$_POST通過一點點安全性通過默默無聞
  3. 檢查用戶是否有權刪除他們試圖刪除的行。
  4. 對每個刪除(或更新)查詢設置一個LIMIT 1,以便您不會意外刪除數據庫中的所有行。

UPDATE

如果你想有一個刪除鏈接,你將需要添加do...while循環內的鏈接。看起來你已經有了這個循環之外的鏈接,並且循環遍歷每個結果並將它們全部添加到mContact令牌中。作爲一個單一的長字符串,您的處理腳本沒有分隔符的信息解析方式。

+0

感謝帕特里克的回覆。我會試着讓我的頭$ _POST,和迭代的做..而 – user634319 2011-03-15 18:37:52

0

而不是重定向的馬上,註釋掉您重定向功能,並允許它完成mysql_query()來電之後在網頁上停留。你是否看到有錯誤報告(如果在php.ini中爲display_errors = on)你的錯誤日誌是否報告錯誤?

此外,當然,我不會是唯一一個說...你必須驗證$_GET['mContact']然後將其傳遞到mysql_query。這非常容易受到SQL注入攻擊。你必須檢查它是一個整數,或者你的記錄contact_id是什麼數據類型。

此外,使用超鏈接刪除數據庫中的記錄而沒有確認頁面是不明智的。此頁面是否會被索引器抓取?索引器將命中刪除鏈接並導致刪除。首選方法是使用帶有提交按鈕的表單進行刪除。

+0

什麼都不傳遞給mContact,即delete.php爲空 – user634319 2011-03-15 18:28:52

+0

我想我有很多想法。感謝您的驗證提示。 – user634319 2011-03-15 18:36:33

0

爲什麼你不把history_contactnote_contact的外鍵引用contact_idCASCADE DELETE?如果您刪除聯繫人

這樣,MySQL將採取刪除孩子對你的照顧..

(正如先前的文章表明,驗證對SQL注入您的數據輸入!)

+0

好建議。我認爲這也是我的名單。謝謝你的幫助 – user634319 2011-03-15 18:39:45