使用PHP将字段插入MySql表

时间:2012-07-08 22:09:39

标签: php mysql

我正在尝试生成一个脚本,将博客上的评论插入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会显示当前时间戳。我无法弄清楚我的错误是什么。任何想法都将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分: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中删除。这是因为如果table post_id是int类型,那么你不应该在整数值周围加上引号。

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

尽管如此,我建议尽可能转换为mysqli或PDO,因为mysql插件即将被折旧。