2011-03-15 52 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