我遇到过使用的脚本:
isset($_POST['submit'])
以及使用的代码:
$_SERVER['REQUEST_METHOD']=='POST'
我想知道这两者之间的区别,哪种方法最好。
答案 0 :(得分:7)
isset($_POST['submit'])
如果您已经知道某个特定值总是被发送,因此表示预期的表单提交(在这种情况下为submit
字段),此代码将告诉您两件事:
POST
方法提交的,而不是GET
,PUT
等。submit
字段已通过。$_SERVER['REQUEST_METHOD'] == 'POST'
这告诉你一件事,一个表单是通过POST
方法提交的。使用它的原因包括:
GET
,PUT
等。)前者是
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!isset($_POST['name'])) {
// at this point you know that `name` was not passed as part of the request
// this could be treated as an error
}
}
对战:
if (!isset($_POST['name'])) {
// the `name` field was not passed as part of the request
// but it might also be a GET request, in which case a page should be shown
}
重要强>
检查请求中的提交按钮字段是不可靠的,因为表单可以通过其他方式提交(例如在文本框中按Enter键)。
$_POST
通过使用此表达式,您可以声明:
POST
答案 1 :(得分:4)
他们做不同的事情。
第一个检查是否设置了submit
数组中的键($_POST
)。
第二个检查$_SERVER
数组中的键的值是否为'POST'
。我想有人会用这个来判断数据是否已经使用“get”或“post”方法发送,但通常你不关心使用的是什么方法,而是关注发送了什么数据。
你想做什么?
答案 2 :(得分:4)
这意味着两件不同的事情。第一个,检查表单何时提交,参数submit
已通过。许多人使用此代码段来验证是否已发送表单。这是有效的,因为提交按钮在技术上是<input>
,因此它的值与表单中的任何其他元素一起发送。
<?php
if(isset($_POST['submit'])) { // This way form and form logic can be adjacent to each other
// Logic
}
?>
<form method='POST' action='<?= $_SERVER['REQUEST_URI'] ?>'>
<!--- other form stuff -->
<input type="submit" name="submit" value="Send!" />
</form>
第二个代码段测试表单是否使用POST方法提交。这并不一定意味着按下了表单按钮。如果未通过POST提交,则超级全局$_POST
将为空。
答案 3 :(得分:0)
第一个语句检查请求方法是否为Post
以及请求是否包含元素submit
的值。第二种方法仅检查请求方法是否为Post
。
要检查表单是否已发布,第二个表单更好,因为它更清晰,只做一件事而且只做一件事。但是我不会过分担心使用哪一个。