2011-09-25 69 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