PHP-$GET和DeletefromMySQL
我有一个a href,看起来是这样的: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";
文件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);