2013-08-28 72 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值的代码。