0

我正在尝试生成一个脚本来将博客上的评论插入到 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 />';
}


?>

但我无法将我的评论插入数据库。我的“评论”表有评论 ID、帖子 ID、姓名、电子邮件、网站、内容、发布日期字段。comment_id 是主键。它有选项 auto_increment。date_published 默认给出当前时间戳。我无法弄清楚我的错误是什么。任何想法将不胜感激。

谢谢你!

4

1 回答 1

1

您应该使用mysqliPDO,但如果您需要使用即将贬值的 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 中删除。这是因为如果表 post_id 是 int 类型,那么您不应该在整数值周围加上引号。

另外,请注意我使用了 mysql_real_escape_string() 函数来清理您的输入。您永远不应该将用户直接输入的变量引用到 SQL 中。这是非常危险的,因为用户可以使用 SQL 注入攻击来访问他们不应该甚至可能删除表的数据库。

尽管如此,我还是建议尽可能转换为 mysqli 或 PDO,因为 mysql 插件即将贬值。

于 2012-07-08T22:15:04.517 回答