使用POST更新mysql表

时间:2011-03-05 15:41:53

标签: php mysql

这是查询:

if (isset($_POST['editMessage'])) {
    $result = mysql_query("UPDATE messages SET message = '".htmlspecialchars($editedmessage)."' WHERE id = '".$id."'");
    if ($result) {
        die("<strong>Message has been edited!</strong>");
    } else {
        die("<strong>Error ".mysql_error()."</strong>");
    }
}

使用此表格:

    <form action="index.php" method="post">
<textarea name='editedmessage' rows='5' cols='70'><?php echo $_POST['editedmessage'];?></textarea>
    <input type='submit' name='editMessage' value='Edit'>

它没有显示错误,它更新了表字段,但没有将编辑后的消息输入到字段中,因此字段更新并且根本不显示任何信息。

我哪里错了?

5 个答案:

答案 0 :(得分:2)

htmlspecialchars($editedmessage)
  1. 您似乎无法在任何地方定义$editedmessage,您的意思是$_POST['message1']
  2. 那应该是mysql_real_escape_string( htmlspecialchars( ... ) )

答案 1 :(得分:1)

尝试另一种方式,正确的你得到一个资源:

if(!$result) {
   die('Died: ' . mysql_error());
} else {
   echo "Edited:";
}

答案 2 :(得分:0)

你错过了这一行:

$editedmessage = $_POST['editMessage'];

答案 3 :(得分:0)

你错了

$result = mysql_query("UPDATE messages SET message = '".htmlspecialchars($_POST['editedmessage'])."' WHERE id = '".$id."'");

答案 4 :(得分:0)

您在查询中使用$editMessage而不是_POST [editMessage](除非您已打开注册全局变量,显然您没有)。

但是,如果不首先在editMessage上运行mysql_real_escape_string(),请不要这样做,并且不要在其上运行htmlspecialchars()!编码数据不属于数据库。

要么$editMessage = $_POST['editMessage'];,要么直接在查询中使用_POST,但是为了善良而将其包装在mysql_real_escape_string()中!

但是,当你回复它时,你想要在$ _POST ['message1']上运行htmlspecialchars()htmlentities()或至少string_tags()。此页面是易受攻击的XSS(跨站点脚本)。