我遇到过使用的脚本:
isset($_POST['submit'])
Run Code Online (Sandbox Code Playgroud)
以及使用的代码:
$_SERVER['REQUEST_METHOD']=='POST'
Run Code Online (Sandbox Code Playgroud)
我想知道这两者之间的区别,哪种方法最好.
isset($_POST['submit'])
Run Code Online (Sandbox Code Playgroud)
如果您已经知道将始终发送特定值,因此表示预期的表单提交(submit在这种情况下为字段),此代码将告诉您两件事:
POST方法,而不是GET,PUT等submit领域已通过.$_SERVER['REQUEST_METHOD'] == 'POST'
Run Code Online (Sandbox Code Playgroud)
这告诉你一件事,一个表单是通过该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
}
}
Run Code Online (Sandbox Code Playgroud)
与:
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
}
Run Code Online (Sandbox Code Playgroud)
重要
检查请求中的提交按钮字段是不可靠的,因为可以通过其他方式提交表单(例如在文本框中按Enter键).
$_POST
Run Code Online (Sandbox Code Playgroud)
通过使用此表达式,您可以声明:
POST这意味着两个不同的事情。首先,检查提交表单时是否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>
Run Code Online (Sandbox Code Playgroud)
第二个片段测试表单是否是使用 POST 方法提交的。这并不一定意味着表单按钮被按下。如果不是通过 POST 提交,那么超级全局$_POST将为空。