2015-02-24 91 views
0

我想發佈已經從日期選擇器填充到我的數據庫的文本框的值,但我不斷獲取1970-01-01發佈的值。我已經研究過這個,看不出我要出錯的地方,下面是輸入類型。格式化日期選擇器發佈到MySQL數據庫

<label for="from">From:</label> 
<input type="text" id="from" name="from"> 
<label for="to">To:</label> 
<input type="text" id="to" name="to"> 

形式裏面我再有:

$fromdate = date('Y-m-d', strtotime($_POST['from'])); 
$todate = date('Y-m-d', strtotime($_POST['to'])); 

$request = mysql_query("INSERT INTO messages (fromdate, todate) VALUES ('$fromdate', '$todate')") or die(mysql_error()); 

有誰知道我怎樣才能解決這個問題?

謝謝

回答

1

你插入的是一個字符串。如果您將其插入DATE字段,則需要將其轉換爲日期。這個語法會根據您使用的數據庫而有所不同。 MySQL爲此使用STR_TO_DATE,而Oracle使用TO_DATE。如果我知道您使用的數據庫類型,我可以幫助您構建查詢。

編輯:這是你的代碼。您需要在查詢本身內部利用MySQL STR_TO_DATE函數。

$request = mysql_query("INSERT INTO messages (fromdate, todate) 
         VALUES (STR_TO_DATE(\''.$fromdate.'\',\'%Y-%m-%d\'), 
           STR_TO_DATE(\''.$todate.'\',\'%Y-%m-%d\')") 
or die(mysql_error()); 

另外,當你去生產時,用die()來處理mysql錯誤並不是一個好習慣。它可能會提供您不希望它們擁有的惡意用戶信息。

+0

謝謝Michael,我正在使用MySQL。這只是一個做$ fromdate = date('Y-m-d',strtodate($ _ POST ['from']))的問題嗎? – user2244961 2015-02-24 22:09:38

+0

已經嘗試過,但現在它根本不張貼到數據庫。我沒有改變這些 - $ fromdate = date('Y-m-d',strtotime($ _ POST ['from'])); $ todate = date('Y-m-d',strtotime($ _ POST ['to']));我應該有嗎? – user2244961 2015-02-24 22:31:32

+0

我認爲我的答案中有一個語法錯誤。您需要轉義任何您不想由PHP解析的單引號。我編輯了我的答案以反映這一點。另外,您可以很方便地看到您從POST數據獲取的日期字符串類型。在SQL中使用STR_TO_DATE應該消除在PHP中執行任何日期操作的需要。 – 2015-02-25 01:46:59

1

strtotime()不能正確猜測格式的問題。

因此,你可以:

無論是格式化的DatePicker的標準輸出: option-altField - 你可以忽略定期現場並傳送到數據庫的altField

或PHP輸出格式化 代替strtotime($_POST['from']))可以使用像這樣的東西

$myDate = DateTime::createFromFormat('date-time-format-from-datepicker',$_POST['from'])->format('Y-m-d') 

要做出正確格式的'date-time-format-from-datepicker',你可以se php date formatting symbols table - 這將需要一些時間,但它必須工作

+0

我試過重新格式化它,但現在沒有向DB發佈任何信息,爲什麼? – user2244961 2015-02-24 22:41:35

+0

嘗試在插入到數據庫之前轉儲日期重新格式化後獲得的內容。可能它的格式仍然不正確。或者簡單地轉儲您的查詢並嘗試在控制檯中執行。也許你有插入執行的mysql警告。然後從mysql控制檯啓動「顯示警告」並獲取說明。 – 2015-02-24 22:51:23