检查表单是否已提交以确定是否应该将表单的变量传递给我的验证类的最佳方法是什么?
一开始我想也许:
isset($_POST)
但是它总是返回true,因为超全局变量在任何地方都是定义的。我不想遍历表单中的每个元素:
if(isset($_POST['element1']) || isset($_POST['element2']) || isset(...etc
在写这个问题的时候,我想到了一个更基本的解决方案,添加一个隐藏字段作为我可以检查的标志。
是否有一种"更干净"的方式来做到这一点,而不是添加我自己的旗帜?
一般检查是否有POST
操作使用:
if ($_POST)
EDIT:如注释所述,此方法在某些情况下(例如,没有名称的复选框和按钮)不起作用。你真的应该使用:
if ($_SERVER['REQUEST_METHOD'] == 'POST')
if($_SERVER['REQUEST_METHOD'] == 'POST')
实际上,提交按钮已经完成了这个功能。
Try in FORM:
<form method="post">
<input type="submit" name="treasure" value="go!">
</form>
在PHP处理程序中:
if (isset($_POST['treasure'])){
echo "treasure will be set if the form has been submitted (to TRUE, I believe)";
}
使用
if(isset($_POST['submit'])) // name of your submit button
if ($_SERVER['REQUEST_METHOD'] == 'POST')
.
试试这个
<form action="" method="POST" id="formaddtask">
Add Task: <input type="text"name="newtaskname" />
<input type="submit" value="Submit"/>
</form>
//Check if the form is submitted
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['newtaskname'])){
}
我也有同样的问题-还要确保在输入按钮中添加name=""
。这个方法对我很有效。
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['add'])){
echo "stuff is happening now";
}
<input type="submit" name="add" value="Submit">
另一方面,向表单添加令牌并验证它以检查数据是否不是从外部发送的也是一种很好的做法。步骤如下:
-
生成一个唯一的令牌(你可以使用哈希)Ex:
$token = hash (string $algo , string $data [, bool $raw_output = FALSE ] );
-
将此令牌分配给会话变量。例:
$_SESSION['form_token'] = $token;
-
添加一个隐藏输入来提交令牌。例:
input type="hidden" name="token" value="{$token}"
-
那么作为验证的一部分,检查提交的令牌是否匹配会话变量。
Ex: if ( $_POST['token'] === $_SESSION['form_token'] ) ....
您也可以使用:
is_array($_POST)