PHP,编辑在MySQL数据库
我做的后期编辑功能对于我的网站的职位,但我被困在此。这是我的代码:PHP,编辑在MySQL数据库
$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
,然后更改只是特定DB项目的信息。
而且SQL注入,如@ThiefMaster和@djdy反对(这是iminent)是更好的使用UPDATE查询更新(编辑)现有条目(而不是INSERT忽略其中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;";
你必须逃离MySQL的保留字像id
等,使用后引号。在传递给查询的每个值上使用mysql_real_escape_string()
也是一个非常好的习惯。
id不是保留字; p – 2012-04-26 12:56:23
得到通过我的工作现在...对不起那么ORA迷茫... :-) 但如果'id'成为不久的将来保留字,如果它逃脱它自己的查询不会失败今天:-) – shadyyx 2012-04-26 12:59:26
INSERT是新记录,你需要的,如果你想改变一个记录使用UPDATE。
必须使用的error_reporting functionality并获得错误描述。所以你可以检测你的错误。
而且编辑,您必须使用的东西记录像
update posts set title = 'new title', content = 'new content' where post_id = <your_post_id>
所以,你必须实现的功能,检测(提供)独特的帖子的ID。
哇,你有几大误区:
$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.html和http://php.net/manual/en/function.mysql-real-escape-string.php
你可以尝试更换,而不是INSERT语法:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
我闻到SQL注入!并考虑'error_reporting(E_ALL);'然后修复您得到的通知。 – ThiefMaster 2012-04-26 12:41:17
圣SQL注入http://en.wikipedia.org/wiki/SQL_injection – djdy 2012-04-26 12:43:04
让我们不要忘记我们的老朋友XSS http://en.wikipedia.org/wiki/Cross-site_scripting#Safely_validating_untrusted_HTML_input – freshnode 2012-04-26 12:48:33