0

所以我最近开始学习 PHP,现在我试图将代码输入我的数据库。数据是通过表单从用户输入的。

这是我的代码:

if(isset($_POST['submit'])) {

    $blogtitle = $_POST['blogTitle'];
    $blogcategory = $_POST['blogCategory'];
    $blogcontent = $_POST['blogContent'];
    // aanmaak date van de blog
    $blogdate = date("d/m.Y"); 

    // Checkt of alle velden zijn ingevuld
    if (!empty($blogtitle) && !empty($blogcategory) && !empty($blogcontent)) {

        //echo "je zit nu bij de query";

        $addBlogQuery = mysql_query("INSERT INTO blog (blog_ID, blog_title, blog_category, blog_content, blog_date)
                                     VALUES (NULL, $blogtitle, $blogcategory, $blogcontent, blogdate )");

        if ($addBlogQuery) {
            echo "blog added successfully";
        }
        else {
            echo "something went wrong";
        }
    }
    else {
        $this->notFilledErrorAction();
    }

}

出于某种原因,它没有在我的数据库中添加任何数据。我与数据库的连接工作正常,我的查询中没有发现错误。

有人在此代码中看到错误吗?或者可以帮助我找出问题所在?

4

7 回答 7

3

您的INSERT语句中有语法错误:

    $addBlogQuery = mysql_query("INSERT INTO blog (blog_ID, blog_title, blog_category, blog_content, blog_date)
                                 VALUES (NULL, $blogtitle, $blogcategory, $blogcontent, blogdate )");
                                       You are missing a $ here------------------------^

您还需要将变量用'单引号括起来:

    $addBlogQuery = mysql_query("INSERT INTO blog (blog_ID, blog_title, blog_category, blog_content, blog_date)
                                 VALUES (NULL, '$blogtitle', '$blogcategory', '$blogcontent', '$blogdate' )");

此外,现在不推荐使用 mysql_* API。请阅读这里的大红框。您现在应该开始使用 MySQLi 或 PDO,而它仍然相对容易更改。

于 2013-10-04T07:42:34.000 回答
2

尝试以下查询不需要使用 phpdate函数 mysql 对日期和时间函数具有本机支持

INSERT INTO blog
(`title`, `category`, `content`, `date`, `id`)
VALUES
('Title here', 'category here','blog content here', NOW(), 1);

这是 SQL 测试SQL Fiddle

于 2013-10-04T07:55:35.140 回答
2

使用更安全的方式,使用 PDO - 停止使用MYSQL_*它已弃用的 PDO 自行转义,您不需要使用 mysql_real_escape_string

<?php
 $user="root";
  $pass="";
  $db = new PDO('mysql:host=hostname;dbname=databasename', $user, $pass); //establish new connection
$sql ="INSERT INTO blog (blog_ID, blog_title, blog_category, blog_content, blog_date)
                                     VALUES (NULL, ?, ?, ?, ?)";
try{
$stmt = $db->prepare($sql);
$stmt->execute(array($a, $b, $c, $d));
if($stmt->rowCount()>0){
//done
}
}catch(PDOException $e){
echo $e->getMessage();
?>

在插入数据库之前,您应该清理数据以防止 SQL 注入和 XSS。使用这个功能:

function sanitize($data){
    $data= htmlentities(strip_tags(trim($data)));
    return $data;
}
于 2013-10-04T07:48:42.600 回答
2

请参阅以下更改并重试:

$blogdate = date("Y-m-d"); 
$addBlogQuery = mysql_query("INSERT INTO `blog` (`blog_title`, `blog_category`, `blog_content`, `blog_date`)
                                 VALUES ('$blogtitle', '$blogcategory', '$blogcontent', '$blogdate' )");
于 2013-10-04T07:43:06.603 回答
2

您需要用单引号 ( ') 将字符串、日期和 DATETIME 值括起来。

而且你还没有包含在你的 SQL 中。

请将您的 SQL 修改为:

$addBlogQuery = mysql_query("INSERT INTO blog (blog_ID, blog_title, blog_category, blog_content, blog_date)
                                     VALUES (NULL, '$blogtitle', '$blogcategory', '$blogcontent', 'blogdate' )");
于 2013-10-04T07:39:46.283 回答
2

Mysql 仅支持以下日期格式:

YYYY-mm-dd

但你的代码有不同的格式

$blogdate = date("d/m.Y");

尝试以下操作:

$blogdate = date("Y-m-d");

并且您已通过 ID 为空,我认为您已选择 ID 作为主键。主键不能为空。如果您的 ID 字段支持自动增量,则无需传递任何内容。

$addBlogQuery = mysql_query("INSERT INTO blog (blog_title, blog_category, blog_content, blog_date)
                                     VALUES ($blogtitle, $blogcategory, $blogcontent, blogdate )");

希望它会奏效。

于 2013-10-04T07:39:50.570 回答
1
$addBlogQuery = mysql_query("INSERT INTO blog (blog_title, blog_category, blog_content, blog_date) VALUES ($blogtitle, $blogcategory, $blogcontent, blogdate )");

看来您的错误是插入blog_idby的值NULLblog_id列是主键。如果您 insert blog_idby NULL,则数据无法推送到您的数据库。因为blog_id是主键,所以不需要blog_id手动插入。它会自动插入。

于 2013-10-04T07:40:27.347 回答