从使用PHP的超链接删除多个MySQL记录
我想用复选框删除多个记录。我已经加载每个复选框与记录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>
我相信你正在处理选择要删除的条件的混合。
将用户带到删除页面的链接与代码中的复选框无关。
我相信你想做的事是
- 创建复选框(如果你想要的东西,在默认情况下被删除,设置
checked="checked"
- 更改
<a href..>
到一个提交按钮 - 在
delete.php
复选框将位于数组$_GET['checkboxes']
中,您可以通过这个数组迭代
现在,解决问题s @JohnP暗指:
- 这是非常不安全的方式来做到这一点,除非您在发布之前已经删除了所有验证代码。
- 我会建议通过
$_POST
通过一点点安全性通过默默无闻 - 检查用户是否有权删除他们试图删除的行。
- 对每个删除(或更新)查询设置一个
LIMIT 1
,以便您不会意外删除数据库中的所有行。
UPDATE
如果你想有一个删除链接,你将需要添加do...while
循环内的链接。看起来你已经有了这个循环之外的链接,并且循环遍历每个结果并将它们全部添加到mContact
令牌中。作为一个单一的长字符串,您的处理脚本没有分隔符的信息解析方式。
感谢帕特里克的回复。我会试着让我的头$ _POST,和迭代的做..而 – user634319 2011-03-15 18:37:52
而不是重定向的马上,注释掉您重定向功能,并允许它完成mysql_query()
来电之后在网页上停留。你是否看到有错误报告(如果在php.ini中为display_errors = on
)你的错误日志是否报告错误?
此外,当然,我不会是唯一一个说...你必须验证$_GET['mContact']
然后将其传递到mysql_query
。这非常容易受到SQL注入攻击。你必须检查它是一个整数,或者你的记录contact_id
是什么数据类型。
此外,使用超链接删除数据库中的记录而没有确认页面是不明智的。此页面是否会被索引器抓取?索引器将命中删除链接并导致删除。首选方法是使用带有提交按钮的表单进行删除。
什么都不传递给mContact,即delete.php为空 – user634319 2011-03-15 18:28:52
我想我有很多想法。感谢您的验证提示。 – user634319 2011-03-15 18:36:33
为什么你不把history_contact
和note_contact
的外键引用contact_id
与CASCADE DELETE
?如果您删除联系人
这样,MySQL将采取删除孩子对你的照顾..
(正如先前的文章表明,验证对SQL注入您的数据输入!)
好建议。我认为这也是我的名单。谢谢你的帮助 – user634319 2011-03-15 18:39:45
哦,伙计!你将得到如此多的验证投诉! – JohnP 2011-03-15 17:32:28
复选框的ID不应该相同。 – Gaurav 2011-03-15 17:45:16
希望没有什么可以蜘蛛您的网站,或者你下次会看到空的数据库。 – 2011-03-15 17:45:25