php - MySQL 查询不插入行

标签 php mysql forms insert

我的处理程序中有一个表单:

<form action="../submitcomment.php" method="post">
                <input maxlength=100 size=60 type="text" name="IP" value="' . $ip . '" readonly="readonly" hidden="hidden">
                <input maxlength=100 size=60 type="text" name="BlogId" value="' . $blogId . '" readonly="readonly" hidden="hidden">
                <input maxlength=100 size=60 type="text" name="Date" value="' . $date . '" readonly="readonly" hidden="hidden">         
                <input maxlength=100 size=60 type="text" name="Name" placeholder="Enter Your Name">
                <input maxlength=100 size=60 type="text" name="Email" placeholder="Enter Your Email">
                <input maxlength=100 size=60 type="text" name="Comment" placeholder="Enter Your Comment">
                <br>
                <input type="submit" name="Submit" value="Submit Your Comment">
                </form>

操作是submitcomment.php:

$ip = $_POST['IP'];
$BlogId = $_POST['BlogId'];
$Date = $_POST['Date'];
$Name = $_POST['Name'];
$Email = $_POST['Email'];
$Comment = $_POST['Comment'];

$blog = new Blogs();

if (isset($_POST['Submit'])) 
{
    $addComment = $blog->insertComment($ip, $BlogId, $Date, $Name, $Email, $Comment);
    header('Location: http://www.ryan.archi.dev.netsite.co.uk/Blog?success=1');
}else{
    header('Location: http://www.ryan.archi.dev.netsite.co.uk/Blog?fail=1');
}

它引用了我的类中的函数:

function insertComment($ip, $BlogId, $Date, $Name, $Email, $Comment)
    {
        $query = "INSERT INTO BlogComments (Name, Comment, IPAddress, Email, BlogId, Date) VALUES ('$Name', '$Comment', '$ip', '$Email', '$BlogId', '$Date')";
        $oDatabase = new database;
        $connection = $oDatabase->Connect();
        $result = mysql_query ($query, $connection);
        return $result;
    }

尝试插入不会返回或引发任何错误。 据我所知这应该有效,你能发现我做错了什么吗?

最佳答案

问题在于名为 Date 的列 - date 是保留字(我猜是所有已知的 RDBMS)。

您必须在查询中转义这个词:

INSERT INTO BlogComments (Name, Comment, IPAddress, Email, BlogId, `Date`) VALUES ('$Name', '$Comment', '$ip', '$Email', '$BlogId', '$Date')

此外,您的代码使任何人都有机会进行 SQL 注入(inject)攻击,因此您至少应该逃避任何用户输入或更好地使用 MySQLi 或 PDO。

可以通过php函数http://php.net/mysql_real_escape_string进行转义:

$ip = mysql_real_escape_string($_POST['IP']);
$BlogId = mysql_real_escape_string($_POST['BlogId']);
$Date = mysql_real_escape_string($_POST['Date']);
$Name = mysql_real_escape_string($_POST['Name']);
$Email = mysql_real_escape_string($_POST['Email']);
$Comment = mysql_real_escape_string($_POST['Comment']);

关于php - MySQL 查询不插入行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10682547/

相关文章:

php - 未加载使用 .htaccess CSS 文件的 seo 友好 url

php - 从 Html 组合框的值中查询带有条件的 Select Sql

mysql - 'Extent1.Email' 中的未知列 'field list'

Mysql 外键困境

javascript - Jquery在表单输入类型 'file'更改上提交表单

PHP 表单不上传文件

php - 这是什么编程语言?

php - 用于搜索的 SQL 设置

php - 如何生成一个随机但唯一的数字并在我的图像标签源中显示该数字

javascript - 在同一页面中处理多个表单