2013-08-28 128 views
1

我很新的PHP,但對C有很好的理解,訪問POST數據

當我想訪問的API我創建了一些用PHP後的數據我用:

$_POST['date_set'] 

獲取的值傳遞的日期 - 這一切能夠完美,但是我讀了我應該獲取這樣的:

$date_set = trim(urldecode($_POST['date_set'])); 

這始終返回日期00:00:00值它存儲後在我的數據庫。

當我直接訪問使用$ _ POST [「date_set」]我得到什麼價值被張貼,例如:2013年8月28日10時31分03秒

有人能告訴我,我是什麼搞亂?

+4

不需要使用'urldecode',因爲PHP會自動執行$ _POST,$ _GET和$ _COOKIE – 2013-08-28 11:35:34

+0

_這將始終返回一個00:00:00的值作爲存儲在我的DB中的日期._ - 您的問題可能出現在從數據庫中存儲和檢索日期值的代碼中。該代碼沒有在這裏顯示,所以我們可能無法幫助你。 – Mels

+0

在保存數據之前使用strtodate strtotime,數據庫期望日期字符串以某種其他格式 –

回答

1

您只運行urldecode數據是URL編碼的。在填充$_POST之前,PHP將解碼它,所以你當然不應該使用它。 (如果你正在處理雙重編碼的數據,你可能不得不這樣做,但是正確的解決方案應該不是對數據進行雙重編碼)。

trim刪除前導空白和尾隨空白。如果您有可輸入流氓空間的自由表單輸入,這將非常有用。之後你需要做進一步的理智檢查。

+0

不認爲它可能是數據庫中日期列的數據類型/格式問題以及他可能保存的字符串格式? –

+1

@Deepanshu - 這個問題說它「一切都很完美」,直到他做了某人(錯誤地)告訴他他應該做的無稽之談。所以不行。 – Quentin

2

你應該嘗試一下像,

$date_set = $_POST['date_set'].explode(' ');//('2013-08-28 10:31:03').explode(' ') 
echo $date_set[1]; 

echo date('H:i:s',strtotime($_POST['date_set']))); 
//echo date('H:i:s',strtotime('2013-08-28 10:31:03')); 

如果你是很新的PHPdate()

1
urldecode — Decodes URL-encoded string 

Description 
string urldecode (string $str) 
Decodes any %## encoding in the given string. Plus symbols ('+') are decoded to a space character. 

urldecode:僅用於GET請求。你應該沒問題,只能使用$ _POST ['date_set']。

http://php.net/manual/en/function.urldecode.php

1

你最好再做這樣

if(isset($_POST['date_set'])){ 
$date_set = $_POST['date_set']; 
} 

那麼你可以使用$ date_set你怎麼想。 如果您仍然收到$ date_set的00:00:00,則問題來自爲您提供$ _POST值的代碼。