-3

我正在为我的网站制作一个编辑帖子功能,但我坚持这一点。这是我的代码:

$post = htmlspecialchars($_GET["story"]);
mysql_select_db("xxxxxx", $con);

$sql="INSERT IGNORE INTO tool WHERE id=$post (title, details, author) 
VALUES
('$_POST[title]','$_POST[details]','$_SESSION[Username]')";

if (!mysql_query($sql,$con))
{
  die('Error: ' . mysql_error());
}
echo "The story<b> " . $_POST[title] . " </b>has been edited.";

mysql_close($con)

我知道错误与INSERT IGNORE INTO tool WHERE id=$post. 我显然不想将数据库中的每个帖子都更改为相同的内容,因此我需要它来查找帖子 ID,即$post,然后仅更改该特定数据库项目的信息。

4

5 回答 5

9

INSERT 用于新记录,如果要更改记录,则需要使用 UPDATE。

于 2012-04-26T12:44:07.020 回答
2

除了 SQL 注入,由于 @ThiefMaster 和 @djdy 反对(这是迫在眉睫的),最好使用 UPDATE 查询来更新(编辑)现有条目(而不是 INSERT IGNORE ,其中 INSERT 只能用于插入新条目) .

您的查询应该是:

$sql="
    UPDATE `tool` SET 
        `title` = '".mysql_real_escape_string($_POST['title'])."', 
        `details` = '".mysql_real_escape_string($_POST['details'])."', 
        `author` = '".mysql_real_escape_string($_SESSION['Username'])."' 
    WHERE `id` = $post;";

您必须id使用反引号转义 MySQL 保留字,如 等。mysql_real_escape_string()在传入查询的每个值上使用 a也是一个非常好的习惯。

于 2012-04-26T12:51:09.160 回答
1

哇,你有几个主要错误:

$post = mysql_real_escape_string($_GET["story"]); // why are you mixing $_POST and $_GET?
$title = mysql_real_escape_string($_POST["title"]); // always escape user-generated input that's being put into a SQL query statement
$detai = mysql_real_escape_string($_POST["details"]);
$author = mysql_real_escape_string($_SESSION["Username"]);

$sql = "UPDATE `tool` SET `title` = '$title', `details` = '$details', `author` = '$author' WHERE `id` = '$post'"; // correct syntax for an UPDATE query

请参阅http://dev.mysql.com/doc/refman/5.5/en/update.htmlhttp://php.net/manual/en/function.mysql-real-escape-string.php

于 2012-04-26T12:53:50.857 回答
1

您可以尝试 REPLACE 而不是 INSERT 语法是:

REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),... 

并参考这个网站http://dev.mysql.com/doc/refman/5.0/en/replace.html

于 2012-04-26T12:55:19.333 回答
0

您必须使用 error_reporting功能并获取错误描述。所以你可以发现你错在哪里。

另外要编辑记录,您必须使用类似的东西

update posts set title = 'new title', content = 'new content' where post_id = <your_post_id>

因此,您必须实现检测(提供)唯一帖子 ID 的功能。

于 2012-04-26T12:50:13.610 回答