2011-09-25 70 views
0

我想在創建新記錄時發佈日期和時間。該記錄已創建,但'add_time'列在mySQL中爲空。試圖通過php與mySQL發佈日期...需要幫助

它有什麼問題?

$date = date("Y-m-d G:i:s") ; 

$order = "INSERT INTO cartons_added (add_time, type, part_no, add_type, add_qty, 
add_ref, add_by, add_notes) 

VALUES 
('$_POST[date]', 
'$_POST[type]', 
'$_POST[part_no]', 
'$_POST[add_type]', 
'$_POST[add_qty]', 
'$_POST[add_ref]', 
'$_POST[add_by]', 
'$_POST[add_notes]')"; 

$result = mysql_query($order); 
+4

取決於'add_time'列的類型和'$ _POST [date]'包含的內容。此外,你的腳本容易受到[SQL注入](http://php.net/manual/en/security.database.sql-injection.php) –

+2

這是一個非常糟糕的主意,簡單地使用'$ _POST'數據查詢。考慮使用[PDO](http://php.net/pdo)或者至少['mysql_real_escape_string()'](http://php.net/mysql_real_escape_string)。 – rid

回答

1

我相信不是:

VALUES 
('$_POST[date]', 
'$_POST[type]', 
'$_POST[part_no]', 
'$_POST[add_type]', 
'$_POST[add_qty]', 
'$_POST[add_ref]', 
'$_POST[add_by]', 
'$_POST[add_notes]')"; 

你打算用

// Use your $date variable 

VALUES 
('$date', 
'$_POST[type]', 
'$_POST[part_no]', 
'$_POST[add_type]', 
'$_POST[add_qty]', 
'$_POST[add_ref]', 
'$_POST[add_by]', 
'$_POST[add_notes]')"; 

所有這一切都需要處理大量針對SQL注入防護。拿最簡單的途徑就是圍繞在mysql_real_escape_string()所有$_POST瓦爾:

"... 
VALUES 
('$date', 
'" . mysql_real_escape_string($_POST['type']) ."', 
'" . mysql_real_escape_string($_POST['part_no']) ."', 
'" . mysql_real_escape_string($_POST['add_type']) ."', 
'" . mysql_real_escape_string($_POST['add_qty']) ."', 
'" . mysql_real_escape_string($_POST['add_ref']) ."', 
'" . mysql_real_escape_string($_POST['add_by']) ."', 
'" . mysql_real_escape_string($_POST['add_notes']) ."')"; 
+4

-1,23k代表你不能離開那個大的SQL注入漏洞。這只是疏忽。另外,你的代碼中有一個語法錯誤,所以它甚至不能工作。 – Johan

+0

@Johan完整答案成形了幾個編輯... –

+0

@Micheal,我建議你繼續編輯,因爲語法錯誤仍然存​​在。 – Johan

2

你永遠使用您創建的$date變量。您可能打算使用它而不是$_POST[date]

0

試試這個:

date('Y-m-d H:i:s'); 
0

你必須修復SQL注入漏洞:
還有一個語法錯誤,這不是 $_POST[add_ref],但 $_POST['add_ref']
你可以寫'$_POST[name]'(壞)而不是$_POST['name'],(好)但是這不是壞習慣。

更改代碼:

$query = "INSERT INTO cartons_added (add_time, type, part_no, add_type, add_qty, 
            add_ref, add_by, add_notes) 
    VALUES 
    ('$date', 
    '{mysql_real_escape_string($_POST['type'])}', 
    '{mysql_real_escape_string($_POST['part_no'])}', 
    '{mysql_real_escape_string($_POST['add_type'])}', 
    '{mysql_real_escape_string($_POST['add_qty'])}', 
    '{mysql_real_escape_string($_POST['add_ref'])}', 
    '{mysql_real_escape_string($_POST['add_by'])}', 
    '{mysql_real_escape_string($_POST['add_notes'])}') "; 

永遠不插入$_POST$_GET$_SESSION和一樣的東西直接進入查詢。
請參閱:How does the SQL injection from the "Bobby Tables" XKCD comic work?

+0

這暗示着使用了SQL注入保護。請不要-1每個人都沒有正確的答案 - 一個簡單的評論就足夠了,除非你是精英主義者。 – Bojangles

+0

SQL注入防護不是精英主義,它是必不可少的,如果人們用'$ _POST ['injectmehere']直接將查詢發佈到查詢中,那麼除了完全忽視基本防護外,並不意味着任何其他內容。 – Johan

+0

並且除了SQL注入**和**語法錯誤之外。涉及到的兩個答案(其中一個你正確刪除)甚至不會運行! – Johan