2013-10-04 100 views
0

因此,我最近開始學習PHP,現在我試圖將代碼到我的數據庫。 數據通過表單從用戶輸入。查詢不起作用 - INSERT INTO

這裏是我的代碼:

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(); 
    } 

} 

出於某種原因,它不添加任何數據我的數據庫。我與我的數據庫的連接工作正常,我沒有看到我的查詢中有錯誤。

有人在此代碼中看到錯誤嗎?或者可以幫助我找出問題所在?

+3

嘗試包裝你的變量(在查詢中)在''s –

+4

*旁註:*停止使用已棄用的'mysql_ *'函數。改用MySQLi或PDO。 – Raptor

+1

試試這個:'echo「出錯了」。 '' – hjpotter92

回答

2

您的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現在已經過時。 閱讀大紅色框here。現在應該開始使用MySQLi或PDO,但它仍然相對容易更改。

+0

Thx!這實際上解決了我的問題!從這個錯誤中學到了很多!不會忘記即將發佈的單引號! =) – Kevinvhengst

+0

不用擔心,但是請注意,請停止使用mysql_query。開始使用不贊成使用的接口是一個好主意,PDO或MySQLi會好很多。他們還將幫助您防止代碼中存在的SQL注入漏洞。我在答覆中提供的鏈接中有信息。 –

1

您需要用單引號括起字符串,日期和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')"); 
+0

這解決了我的問題!完全忘了''.. Thx! – Kevinvhengst

1

支持MySQL只以下日期格式:

YYYY-mm-dd 

,但你的代碼有不同的格式

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

嘗試以下操作:

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

而你已經通過了ID爲null,我想你已經選擇了ID作爲主鍵。主鍵不能爲空。如果您的ID字段支持自動遞增,則不需要傳遞任何內容。

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

希望它能起作用。

+0

這不是解決問題的方法,但這是我的新信息,thx !! =) – Kevinvhengst

+0

爲什麼使用'date'函數你認爲值得嗎?mysql有本地支持日期時間ie'NOW ()'function。 – Shushant

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

看來你的錯誤是NULL插入的blog_id值。主鍵是blog_id列。如果您通過NULL插入blog_id,則數據無法推送到您的數據庫。由於blog_id是主鍵,因此不需要手動插入blog_id。它會自動插入。

+0

是的,blog_ID是我的主鍵,但是你說我不需要給它'NULL'來讓它自動得到它的id?現在它工作正常,每次都自動添加ID號 – Kevinvhengst

1

請參閱下面的變化,然後再試一次:

$blogdate = date("Y-m-d"); 
$addBlogQuery = mysql_query("INSERT INTO `blog` (`blog_title`, `blog_category`, `blog_content`, `blog_date`) 
           VALUES ('$blogtitle', '$blogcategory', '$blogcontent', '$blogdate')"); 
1

使用更安全的方法,使用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; 
} 
1

嘗試下面的查詢有沒有需要使用PHP date功能MySQL不得不日期和時間函數

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

原生支持這裏是SQL測試SQL Fiddle