【问题标题】:Deleting database values Using PHP, not working使用 PHP 删除数据库值,不起作用
【发布时间】:2015-08-25 06:06:47
【问题描述】:

我正在尝试从我的表单中删除多个值(它是一个汽车租赁系统,我想让员工能够从记录中删除汽车)。我是 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 的复选框。所以,复选框确实有效,它只是不对数据库做任何事情,不会删除该值。我尝试了很多教程,但我无法使用复选框将其删除。任何帮助将不胜感激。

【问题讨论】:

标签: php mysql checkbox sql-delete


【解决方案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);
}

【讨论】:

    【解决方案2】:

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

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

    您确实需要查看代码的其余部分以防SQL injection 攻击。

    【讨论】:

    • 将研究 sql 注入。正如我所说,我对此很陌生,会尝试一下。谢谢你:)
    【解决方案3】:

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

    其次,始终清理您的输入以防止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 ...
    }
    

    【讨论】:

    • 我正在尝试所有建议,但仍未删除。
    • 好的,成功了!工作脚本是这样的:
    • @GauravRavindra 很高兴我能帮上忙。如果您的问题已解决,请立即接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    相关资源
    最近更新 更多