PHP-$GET和DeletefromMySQL

PHP-$GET和DeletefromMySQL,php,Php,我有一个a href,看起来是这样的: 文件delete-news.php如下: <?php if(isset($_GET["?deleteID='.$id."])) { $result = mysql_query("DELETE FROM 'news' WHERE id='$id'"); echo mysql_error(); if($result) echo "succces"; } else { echo "GET NOT SET";

我有一个a href,看起来是这样的:

文件delete-news.php如下:

<?php 

if(isset($_GET["?deleteID='.$id."])) 
{

    $result = mysql_query("DELETE FROM 'news' WHERE id='$id'");
    echo mysql_error();
    if($result)
        echo "succces";
}
else { echo "GET NOT SET"; }

?>

您需要检查
$\u GET
中的
删除ID
。稍后,将其引用为
$\u GET['deleteID']
。另外,在
$\u GET['deleteID']
上调用
mysql\u real\u escape\u string()
,以检索查询参数
$id

if(isset($_GET["deleteID"])) 
{
    $id = mysql_real_escape_string($_GET['deleteID']);
    $result = mysql_query("DELETE FROM `news` WHERE id='$id'");
    echo mysql_error();
    if($result)
        echo "succces";
}
else { echo "GET NOT SET"; }

$\u GET
将使GET变量的每个元素都已分解,因此不需要包含URL数据。因此,在您的示例中,链接
?deleteID=123
将生成
$\u GET['deleteID']

尝试使用它,但也要记住清理从URL接收的值。如果它将是一个数值,我建议将其转换为:

$deleteID = (int)$_GET['deleteID'];

用这个,看在上帝的份上,逃避你的投入

if(isset($_GET['deleteID'])) {
    $result = mysql_query("DELETE FROM `news` WHERE id='".mysql_real_escape_string($_GET['deleteID']). "'");
    echo mysql_error();
    if($result)
        echo "succces";

} else {
    echo 'GET NOT SET';
}
请尝试以下方法:

<?php 
    if(isset($_GET['deleteID'])) 
    {
        $id = intval($_GET['deleteID']);
        $result = mysql_query("DELETE FROM `news` WHERE id='$id'");
        echo mysql_error();
        if($result) echo "succces";

    } else { 

        echo "GET NOT SET";

     }
?>

请注意,对系统的更改只能通过POST进行,而不能通过POST进行。否则(例如),您可能会得到一个删除整个站点的爬行机器人。有关更多参考资料,请参阅本文:


由于$\u GET关联数组不包含?deleteID='。$id,因此您无法获取任何集合

为了获得id,您需要这样做:

$id = $_GET['deleteID'];

这是非常不安全的,因为它允许SQL注入。相反,要:

$query = sprintf("DELETE * FROM news WHERE id=%d",
         mysql_real_escape_string($id),
$result = mysql_query($query);

我希望这能有所帮助。

@wiero-我有一些更改,但仍然
GET NOT SET
永远不要使用GET请求执行删除操作。你的网站上有一个webspider,你所有的数据都不见了:是的,请转义你的输入。您正面临SQL注入攻击Unhamzzz-这意味着什么?我从周二起就是PHP/MySQL用户。Google SQL注入:在编写更多PHP之前,您需要研究一下这个问题。这将返回
您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解在第1行“news”附近使用的正确语法,其中id='11'
您不应该在
中包装表名。
,请改用反勾号(有关详细信息,请参阅下面的回复)。:-)最好在将其插入查询时进行转义,如果OP覆盖$id的值,或者复制到其他地方并更改为非int变量,该怎么办?@genesis这实际上是worse@Dunhamzzz:'我有一个a href,看起来是这样的:'这将返回
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在第1行id='11''附近使用的正确语法。
@USer yes,
news
上的单引号转换为反引号。如上所述,在将其插入查询时最好转义,如果OP覆盖了
$id
的值,或者复制到其他地方并更改为非int变量,该怎么办?在执行sql语句之前,您可能希望确保
$id>0
。是的,这是正确的。然而,我认为OP实际上知道他在做什么关于
id>0
:实际上可能有一行的值为负值,但如果找不到行,查询本身不会失败。最好在将其插入查询时转义,如果OP覆盖$id的值,或者复制到其他位置并更改为非int变量,会怎么样。总会有例外,我不能阻止一个。好吧,你可以通过在查询中转义来迎合所有这些。
$result = mysql_query("DELETE FROM 'news' WHERE id='$id'");
$query = sprintf("DELETE * FROM news WHERE id=%d",
         mysql_real_escape_string($id),
$result = mysql_query($query);