下面是代码:
<?php
$post = htmlspecialchars($_GET["story"]);
$con = mysql_connect("localhost","xxx","xxx");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("xxx", $con);
$sql="
UPDATE `tool` SET
`title` = '".mysql_real_escape_string($_POST['title'])."',
`details` = '".mysql_real_escape_string($_POST['details'])."'
WHERE `id` = $post;";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "<a href=story.php?id=";
echo $post;
echo ">Back to the story</a>";
mysql_close($con)
?>
首先让我来描述一下这应该是做什么的。这应该是为我的新闻系统编辑一个帖子。它一直有效,直到最近。我不知道我改变了什么使它停止工作。我尝试过我所知道的一切,改变每一个细节,删除/添加部分代码。
发生了什么:
当我第一次编辑帖子时,标题和细节完全被删除。我不知道为什么。它只发生在每个帖子上,一次。如果我第二次编辑,它会保持不变,完全没有问题。
也许如果你在上面的代码中找不到明显的缺陷,那么我所描述的情况可能会帮助你找出问题所在。
我老老实实地在这一方面做到了最好,我不确定发生了什么。任何帮助总是受到赞赏。
答案 0 :(得分:0)
if (intval($post) > 0){
$sql= "UPDATE `tool` SET
`title` = '".mysql_real_escape_string($_POST['title'])."',
`details` = '".mysql_real_escape_string($_POST['details'])."'
WHERE `id` = 'intval($post)'
LIMIT 1";
}
对于记录,强烈建议使用参数化查询进行这些操作。
答案 1 :(得分:0)
当我第一次编辑帖子时,标题和详细信息 完全被抹去。
我想第一次你没有发布标题和详细信息(导致$_POST['title']
和$_POST['details']
为空白)而你是第二次。
当这些表单空白时,您需要检查您提交的表单。像Fiddler这样的工具非常适合这种情况。
另外,您确实需要了解SQL注入和防范它的方法。
答案 2 :(得分:0)
将查询中的$post
放在引号之间:
WHERE `id` = '$post'
答案 3 :(得分:0)
你正在混合$ _GET和$ _POST。
$post = htmlspecialchars($_GET["story"]);
试
$post = htmlspecialchars($_POST["story"]);
确保您的表单发布所有这些