0

继承人的代码:

    <?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)


?>

所以首先让我描述一下这应该做什么。这应该是为我的新闻系统编辑帖子。它一直有效,直到最近。我不知道我做了什么改变使它停止工作。我已经尝试了我所知道的一切,更改了每一个小细节,并删除/添加了部分代码。

怎么了:

当我第一次编辑帖子时,标题和细节完全被抹去了。我不知道为什么。它只发生在每个单独的帖子上,1 次。如果我第二次编辑,它保持不变,完全没有问题。

也许如果您在我上面的代码中没有发现明显的缺陷,那么我所描述的情况可能会帮助您找出问题所在。

老实说,我在这方面尽了最大努力,我不确定发生了什么。任何帮助总是受到赞赏。

4

4 回答 4

0

当我第一次编辑帖子时,标题和细节完全被抹去了。

我想第一次你没有发布标题详细信息(导致空白),$_POST['title']$_POST['details']第二次你是。

当这些为空白时,您需要检查您提交的表单。Fiddler等工具非常适合这种情况。

此外,您确实需要了解 SQL 注入和防范它的方法。

于 2012-05-28T17:44:14.740 回答
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";
}

并且为了记录,强烈建议将参数化查询用于此类操作。

于 2012-05-28T17:42:20.920 回答
0

$post你的查询放在引号之间:

WHERE `id` = '$post'
于 2012-05-28T17:47:15.903 回答
0

您正在混合 $_GET 和 $_POST。

$post = htmlspecialchars($_GET["story"]); 

尝试

$post = htmlspecialchars($_POST["story"]);

确保您的表格确实发布了所有这些

于 2012-05-28T17:47:29.363 回答