有人称我的Snipplr提交内容之一为“废话”,因为我使用的if ($_SERVER['REQUEST_METHOD'] == 'POST')
不是if ($_POST)
检查请求方法对我来说似乎更正确,因为这是我真正想要做的。两者之间在操作上有区别吗?还是仅仅是代码清晰性问题?
===
代替==
此处0 == 'POST'
。
$_SERVER['REQUEST_METHOD']
是数字0
?据我所知,这是不可能的。
有人称我的Snipplr提交内容之一为“废话”,因为我使用的if ($_SERVER['REQUEST_METHOD'] == 'POST')
不是if ($_POST)
检查请求方法对我来说似乎更正确,因为这是我真正想要做的。两者之间在操作上有区别吗?还是仅仅是代码清晰性问题?
===
代替==
此处0 == 'POST'
。
$_SERVER['REQUEST_METHOD']
是数字0
?据我所知,这是不可能的。
Answers:
好吧,他们确实没有做同样的事情。
$_SERVER['REQUEST_METHOD']
包含请求方法(惊奇)。
$_POST
包含任何帖子数据。
POST请求可能不包含POST数据。
我检查了请求方法-实际上,我从未想过要测试$_POST
阵列。不过,我检查了必填字段。因此,空的发布请求会给用户很多错误消息-这对我来说很有意义。
如果您的应用程序需要根据post类型的请求做出反应,请使用以下命令:
if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') { // if form submitted with post method
// validate request,
// manage post request differently,
// log or don't log request,
// redirect to avoid resubmition on F5 etc
}
如果您的应用程序需要对通过邮寄请求收到的任何数据做出反应,请使用以下命令:
if(!empty($_POST)) { // if received any post data
// process $_POST values,
// save data to DB,
// ...
}
if(!empty($_FILES)) { // if received any "post" files
// validate uploaded FILES
// move to uploaded dir
// ...
}
它是特定于实现的,但是您将同时使用+ $ _FILES超全局变量。
他们都是正确的。就个人而言,我更喜欢您的方法的详细程度,但这实际上取决于个人喜好。
立即运行if($ _ POST)不会引发错误-$ _POST数组存在,无论请求是否通过POST标头发送。在布尔检查中,将空数组强制转换为false。
您可以在大多数浏览器中通过按Enter键(即,无需单击“提交”按钮)来提交表单,但这并不一定将Submit作为变量发送-因此可以提交空白表单,$_POST
即将为空,但表单仍会已向php页面生成了一个http发布请求。在这种情况下if ($_SERVER['REQUEST_METHOD'] == 'POST')
更好。
$_POST
它不会为空:它将是一个具有空值的数组。
$this->method = $_SERVER['REQUEST_METHOD'];
if ($this->method == 'POST' && array_key_exists('HTTP_X_HTTP_METHOD', $_SERVER)) {
if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'DELETE') {
$this->method = 'DELETE';
} else if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'PUT') {
$this->method = 'PUT';
} else {
throw new Exception("Unexpected Header");
}
}
只要我可能需要使用多种方法来访问我的PHP脚本,我实际上所做的就是:
if (in_array($_SERVER['REQUEST_METHOD'],array("GET","POST","DELETE"))) {
// do wathever I do
}
它们的工作方式相同,但$_POST
应使用,因为它更清洁。您可以添加isset()
到它以检查它是否存在。
$_POST
将始终存在,尽管它可能为空(强制转换为boolean false
)。您所说的“清洁工”是什么意思?