这个查询有问题吗?

时间:2012-05-28 17:39:46

标签: php sql

下面是代码:

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


?>

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

发生了什么:

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

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

我老老实实地在这一方面做到了最好,我不确定发生了什么。任何帮助总是受到赞赏。

4 个答案:

答案 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"]);

确保您的表单发布所有这些