使用PHP中的复选框删除多个记录

时间:2011-03-29 00:32:55

标签: php

我遇到了一个问题,我需要能够使用复选框删除多个记录。

这是我目前的代码。

<?php 
$host       = "localhost";
$user       = "root";
$pass       = "";
$dbName     = "ticket_history";
$table_name = "ticket_history";

################ Connect to the Database and SELECT DATA ####################################
$conn = mysql_connect($host, $user, $pass) or die ("Unable to connect");
mysql_select_db($dbName);
$query = "SELECT Date,Ticket_Number,Description,Result FROM $table_name";
$result = mysql_query($query);
$count=mysql_num_rows($result);
#############################################################################################
?>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<table width=50%>
    <form method="post" action="insert_ticket.php">
        <table width border='0'>
            <tr><td> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date:<input type="text" name="date"/></td>
            <td>Ticket #:<input type="text" name="ticket"/></td></tr>
            <table>
                <tr><td>Description:<TEXTAREA COLS=50 name="description"></TEXTAREA></td></tr>
                <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result     :<TEXTAREA COLS=50 name="result"></TEXTAREA></td></tr>
            <tr><td><input type="submit" name="submit" value="Add"/></td></tr>
            </table>
        </table>
    </form>
    <form method="post" action="delete_ticket.php">
    <input type="submit" name="delete" value="Delete"/>
    </form>
</table>

<?php
print "<table width=80% border=1>\n"; 
$cols = 0; 
while ($get_info = mysql_fetch_assoc($result)){ 
$id = $get_info->id;
if($cols == 0) 
{ 
  $cols = 1; 
  print "<tr>";
  print "<th>Select</th>";  
  foreach($get_info as $col => $value) 
  { 

    print "<th>$col</th>"; 
  } 
  print "<tr>\n"; 
} 
print "<tr>\n"; 
print "<td><input type='checkbox' name='selected[]' id='checkbox[]' value=$id></td>";
foreach ($get_info as $field) 
print "\t<td align='center'><font face=arial size=1/>$field</font></td>\n"; 
print "</tr>\n"; 
} 
print "</table>\n"; 
mysql_close();
?>

<!------------------------------------------------------------!>
</BODY>
</HTML>

Delete.php
<?php
$host       = "localhost";
$user       = "root";
$pass       = "";
$dbName     = "ticket_history";
$table_name = "ticket_history";

################ Connect to the Database and SELECT DATA ####################################
$conn = mysql_connect($host, $user, $pass) or die ("Unable to connect");
mysql_select_db($dbName);
$query = "SELECT Date,Ticket_Number,Description,Result FROM $table_name";
$result = mysql_query($query);
$count=mysql_num_rows($result);
#####################################


if($_POST['delete']) {
    $checkbox = $_POST['selected'];
    $countCheck = count($_POST['selected']);

    for($i=0;$i<$countCheck;$i++) {
        $del_id = $checkbox[$i];

    $sql = "DELETE FROM ticket_history WHERE Auto = $del_id";
    $result = mysql_query($sql);
    }
}
?>

我只想删除已检查的行。我将如何有效和高效地完成这项工作?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您的问题的简单答案是使用:

$sql = sprintf('DELETE FROM ticket_history WHERE Auto IN ()', 
    implode(',', $checkbox));

然而,当人们跳进去告诉你时,你很容易受到SQL注入攻击。你永远不应该相信用户输入。您正在使用ID进行删除,我假设该ID必须是整数。

使用类似的内容将验证:

$ids = array();
foreach($_POST['selected'] as $selected) {
    if (ctype_digit($selected)) {
        $ids[] = $selected;
    }
    else {
        // If one is invalid, I would assume nothing can be trusted
        // Depends how you want to handle the error.
        die('Invalid input');
    }
}

$sql = sprintf('DELETE FROM ticket_history WHERE Auto IN (%s)', 
    implode(',', $ids));

其他问题:

您似乎正在使用ID,但尚未在初始查询中选择该字段。

$query = "SELECT Date,Ticket_Number,Description,Result FROM $table_name";

然后你参考:

$id = $get_info->id;

检查HTML输出实际上是您所期望的。

在删除查询中,您将引用“自动”字段。那是你的身份证吗?

最后,没有检查用户是否有权这样做。如果这是一个公共站点,任何人都可以从该表中删除。


在一个表单中使用两个提交按钮的示例:

<?php
if (isset($_POST['create'])) {
    echo "Create!";
}
elseif (isset($_POST['delete'])) {
    echo "Delete!";
}
?>
<html>
    <form method="post">
        <input type="submit" name="create" value="Create"/>
        <input type="submit" name="delete" value="Delete"/>
    </form>
</html>