2013-02-11 82 views
0

我有一個簡單的形式,它有一個隱藏字段的值:當我通過表單上我的PHP處理腳本一切提交表單插入日期,mysql數據庫

<?php echo date('Y-m-d'); ?> 

進入數據庫除了日期。

這裏是我的SQL:

$sql = "INSERT INTO wp_reminders (dateofentry, ipaddress, type) VALUES ('$_POST[dateofentry]','$_POST[ipaddress]' ,'$_POST[type]')"; 

當我回聲日期的處理頁面上它顯示的罰款。

我已經安裝有以下在我的數據庫列:

dateofentry date NOT NULL 

任何想法,如果有什麼毛病以上?

+0

添加$ _POST的var_dump – user20232359723568423357842364 2013-02-11 22:05:09

+2

您的代碼容易受到[SQL注入](http://php.net/manual/en/security.database.sql-injection.php)的影響。在進行查詢之前,您需要使用適當的數據庫庫方法來轉義您的數據。 – 2013-02-11 22:06:54

+0

在您發佈的代碼中沒有出現任何錯誤。我建議你迴應'$ sql'來協助調試問題。這將縮小問題的位置,也就是說,如果這是SQL語句中提供的日期文字的問題,或者SQL語句是否正確,並且問題出在MySQL服務器端。 – spencer7593 2013-02-11 22:14:08

回答

-1

您必須使用此語法來創建SQL查詢:

$sql = "INSERT INTO wp_reminders (dateofentry, ipaddress, type) VALUES ('".addslashes($_POST['dateofentry'])."','".addslashes($_POST['ipaddress'])."' ,'".addslashes($_POST['type'])."')";

在你的榜樣,你不包木窗與雙引號的索引鍵...

你真的不該將一個php變量放入一個字符串中,最好將它連接起來。

+2

請不要發佈巨大安全漏洞的答案。您應該*永遠不要*將'$ _POST'數據直接插入到查詢字符串中。連接與內插甚至不是問題,它根本不是「更好」。他們是一樣的。 – tadman 2013-02-11 22:19:58

+1

有人已經談論過安全問題,在解釋錯誤時不會增加複雜性就容易解釋。此外,我的答案是關於他的問題,以幫助解決問題,而不是教他如何安全。沒有期間。 – 2013-02-11 22:25:27

+1

上面的代碼純粹是爲了測試,只是想知道是否有人可以看到任何問題,而不是抨擊我的編碼技能。 – danyo 2013-02-11 22:27:08

0

插入MySQL的任何日期必須符合one of the formats that MySQL can parse或必須轉換。典型地,ISO 8601是優選的格式,YYYY-MM-DD HH:MM:SS

如果使用PDO:

$sql = "INSERT INTO wp_reminders (dateofentry, ipaddress, type) VALUES (:dateofentry, :ipaddress, :type)"; 
$statement = $pdo->prepare($sql); 
$statement->bindParam(":dateofentry", strtotime(date("Y-m-d H:i:s")), PDO::PARAM_STR); 
$statement->bindParam(":ipaddress", $_POST['ipaddress'], PDO::PARAM_STR); 
$statement->bindParam(":type", $_POST['type']), PDO::PARAM_STR); 
$statement->execute(); 

除非你期望的形式,需要很長的時間來處理,它可能是有意義的查詢創建時提供的日期。如果沒有,您可以始終將strtotime調用放入您的表單中。