1

我正在尝试从我的表单中删除多个值(它是一个汽车租赁系统,我想让员工能够从记录中删除汽车)。我是 PHP 新手,但这就是我现在所拥有的。

<?php
$link = mysql_connect ("xxxx", "xxxx", "xxxx");
mysql_select_db ("xxxx");

    $query = "SELECT * from car";
    $result = mysql_query ($query);
    echo ("<form action=\"deleting2.php\" method=\"GET\">");
    echo "<table id = 'table-3'>";
    echo "<thead>";
    echo "<th>Car ID</th>
    <th>Car Name</th>
    <th>Fuel Type</th>
    <th>Transmission</th>
    <th>Engine Size</th>
    <th>Doors</th>
    <th>Total</th>
    <th>Available</th>
    <th>Date Added</th>
    <th>Delete</th> ";
    echo "</thead>";
    for ($i = 0; $i < mysql_num_rows ($result); $i ++)
      {        
       $row = mysql_fetch_object ($result);
       echo "<tbody>";
       echo "<tr>";
       echo "<td>$row->ID</td>";
       echo "<td>$row->CARNAME</td>";
       echo "<td>$row->FUELTYPE</td>";
       echo "<td>$row->TRANSMISSION</td>";
       echo "<td>$row->ENGINE_SIZE</td>";
       echo "<td>$row->DOORS</td>";
       echo "<td>$row->TOTAL</td>";
       echo "<td>$row->AVAILABLE</td>";
       echo "<td>$row->DATEADDED</td>";
       echo "<td><input type='checkbox' name='delete[]' value='$row->ID' /></td>";
       echo "</tr>";
       echo "</tbody>";
      }
      echo ("<tr><td colspan='6' align='center'><input type=\"submit\" value=\"Delete  \"></td> </tr></table></form>");
      echo  "</table>";
      mysql_close ($link);
      ?>

现在,当我按下删除按钮时,它会转到表单操作中提到的名为“deleting2.php”的 php 页面,该页面具有以下代码:

<?php
$link = mysql_connect ("xxxx", "xxxx", "xxxx");
mysql_select_db ("xxxx");

$ID='$_GET[ID]';

// DELETE ANY RECORDS IN DATABASE
for ($i = 0; $i < @mysql_num_rows ($result); $i ++)
{
if(isset($_GET['delete[]']) && $_GET['delete[]']=='$row->ID');
{
   $query=("DELETE FROM car WHERE ID='$_POST[ID]'");
    $result1 = mysql_query($query);
}
}
mysql_close ($link);

?>

问题是,它没有从我的数据库中删除任何内容。处理deleting2.php时地址栏中的URL为:

http://www.computing.northampton.ac.uk/~11430900/a1/webpages/deleting2.php?delete[]=6

据我所知,选择票的价值。在这里,我选中了对应的 ID 值为 6 的复选框。因此,复选框确实有效,它只是不对数据库做任何事情,不会删除该值。我尝试了很多教程,但我无法使用复选框将其删除。任何帮助将非常感激。

4

3 回答 3

1

如您的问题中所述,您不需要通过以下循环进行迭代

for ($i = 0; $i < @mysql_num_rows ($result); $i ++)
{
if(isset($_GET['delete[]']) && $_GET['delete[]']=='$row->ID');
{
   $query=("DELETE FROM car WHERE ID='$_POST[ID]'");
    $result1 = mysql_query($query);
}
}
mysql_close ($link);

只是到以下。

将表单方法更改为 POST。

使用以下代码。内爆是必要的,因为 $_POST['delete'] 将是一个数组

if(isset($_POST['delete']) && count($_POST['delete']) > 0) {
    $query=("DELETE FROM car WHERE ID in ('".implode(',',$_POST['delete'])."')");
    $result1 = mysql_query($query);
}
于 2012-12-10T13:55:00.873 回答
0

您的数据需要清理,但如果您希望 ID 是数字,这应该没问题:

$id = (int)$_GET['ID'];    
$query=("DELETE FROM car WHERE ID=$id");

您确实需要查看其余代码以进行SQL 注入攻击。

于 2012-12-10T13:41:05.483 回答
0

首先,在实现数据库条目删除时要非常小心,因为您最终可能会得到空数据库。

其次,始终清理您的输入以防止SQL Injection.

第三,学习PDO或至少使用mysqli_*函数,而不是mysql_像现在不推荐使用的那样,并且可以在任何下一个 PHP 版本中删除。

现在,对于您的问题,您将 ID 值设置为delete[]数组值,这意味着您应该这样做:

// DELETE THE DESIRED RECORDS IN DATABASE
foreach($_GET['delete'] as $id) {
    $result = mysql_query("DELETE FROM car WHERE ID = '" . mysql_real_escape_string($id) . "'");
    // do something with the $result here ...
}

其他选择可能是只期望整数:

// DELETE THE DESIRED RECORDS IN DATABASE
foreach($_GET['delete'] as $id) {
    $result = mysql_query("DELETE FROM car WHERE ID = '" . (int)$id . "'");
    // do something with the $result here ...
}
于 2012-12-10T13:47:47.863 回答