0

我的一个页面我称之为删除功能

$Sql=mysql_query("SELECT Id FROM products");
    $Result=mysql_fetch_row($Sql);
    $Id=$Result[0];
    DeleteRecords("products","Id",$Id)

在functions.php上我在下面做了这个函数

function DeleteRecords($Table,$Exp,$Value)
{
if(isset($_GET['delete']))
{
$Sql="DELETE FROM $Table WHERE $Exp=$Value";
$Result=mysql_query($Sql);
if($Result)
    {
        echo "<script>alert('Record Deleted')</script>";
        echo "<script>window.location='products.php';</script>";    
    }
}
}

现在,当我单击删除链接时:

<a href='".$_SERVER['PHP_SELF']."?delete=$Id'>Delete</a>

它删除第一行。似乎 $Id 有问题

请帮助我如何删除我选择的行;

最好的办法是所有的事情都应该在函数中完成,我只需要在我的页面上调用函数!

4

1 回答 1

0

您选择所有产品:

$Sql=mysql_query("SELECT Id FROM products");

然后将第一个元素的 id 分配给$Id

$Id=$Result[0];

然后你传递$Id给你的函数 - 在那里调用相同的值$Value

DeleteRecords("products","Id",$Id)

最后在您的函数中检查是否$_GET['delete']已设置。如果是,则$Id在删除查询之前使用结果的第一个元素(而不是传递的值$_GET['delete']

$Sql="DELETE FROM $Table WHERE $Exp=$Value";

所以你永远不会使用$_GET['delete'].


你可以写:

 DeleteRecords("products","Id", $_GET['delete']);

并在函数中:

$Value = intval($Value);

if (0 != $Value) {
    $Sql="DELETE FROM $Table WHERE $Exp=$Value";
    $Result=mysql_query($Sql);
    […]

这至少可以防止 SQL 注入。并非适用于所有情况,而是一个起点。有一个关于“Bobby Tables”的不错的网站可以为您提供更多相关信息。

于 2013-03-11T00:35:26.357 回答