我正在尝试生成一个脚本,将博客上的评论插入MySsl数据库中的“评论”表
<form action="insertcomment.php" method="post">
<p class ="ctitle">Leave a Comment:</p>
<p>
<label for="name"><b>PostID:</b></label>
<input type="text" id="postid" name="name" maxlength="4" /> <br/>
<label for="name"><b>Name:</b></label>
<input type="text" id="name" name="name" maxlength="25" /> <br/>
<label for="email"><b>Email:</b></label>
<input type="text" id="email" name="email" maxlength="50" /> <br/>
<label for="website"><b>Website:</b></label>
<input type="text" id="website" name="website" maxlength="25" /> <br/>
<label for="content"><b>Comment:</b></label>
<textarea id="content" name="content" cols="10" rows="4" maxlength="800"></textarea> <br/>
<input type="submit" value="Submit Comment" name="submit_comment" /> <br/>
</p>
</form>
我的PHP脚本如下:
<?php
include("dbconnect.php");
$con=new dbconnect();
$con->connect();
error_reporting(E_ALL);
if(isset($_POST['submit'])) {
$sSql = "INSERT INTO comments
( post_id,name, email, website,content)
VALUES ('$_POST[postid]','$_POST[name]', '$_POST[email]', '$_POST[website]', '$_POST[content]')";
mysql_query($sSql);
echo '<h2> Your Comment is submitted</h2><br />';
}
?>
但是我无法将我的评论插入数据库。我的'comments'表有comment_id,post_id,名称,电子邮件,网站,内容,date_published字段。 comment_id是主键。它有auto_increment选项。默认情况下,date_published会显示当前时间戳。我无法弄清楚我的错误是什么。任何想法都将不胜感激。
谢谢!
答案 0 :(得分:1)
您应该使用mysqli或PDO,但如果您需要使用即将弃用的mysql插件:
<?php
include("dbconnect.php");
$con=new dbconnect();
$con->connect();
error_reporting(E_ALL);
if(isset($_POST['submit'])) {
foreach ($_POST as $key => $value) {
$$key = mysql_real_escape_string($value); // You should always sanitize user inputs.
}
$sSql = "INSERT INTO comments
( post_id,name, email, website,content)
VALUES ($postid,'$name', '$email', '$website', '$content')"; // No quotes around $postid because I'm assuming post_id column is an int type.
mysql_query($sSql);
echo '<h2> Your Comment is submitted</h2><br />';
}
?>
请注意,单引号已从$ postid中删除。这是因为如果table post_id是int类型,那么你不应该在整数值周围加上引号。
另外,请注意我已使用mysql_real_escape_string()函数来清理输入。您永远不应该将直接用户输入的变量引用到SQL中。这是非常危险的,因为用户可以使用SQL注入攻击来访问您不应该甚至可能丢弃表的数据库。
尽管如此,我建议尽可能转换为mysqli或PDO,因为mysql插件即将被折旧。