检查表单是否已经提交-PHP

检查表单是否已经提交以确定是否应该将表单的变量传递给验证类的最佳方法是什么?

一开始我想也许:

isset($_POST)

但是,随着超全球的定义无处不在,这个结论总是会成立。我不想用以下方法迭代表单中的每个元素:

if(isset($_POST['element1']) || isset($_POST['element2']) || isset(...etc

在写这个问题时,我想到了一个更基本的解决方案,添加一个隐藏字段作为标志,我可以检查。

有没有比添加我自己的旗帜更“干净”的方法呢?

343963 次浏览

对于一般检查是否有 POST行动使用:

if ($_POST)

编辑 : 正如注释中所说,这种方法在某些情况下不起作用(例如复选框和没有名称的按钮)。你真的应该用:

if ($_SERVER['REQUEST_METHOD'] == 'POST')

怎么样

if($_SERVER['REQUEST_METHOD'] == 'POST')

if ($_SERVER['REQUEST_METHOD'] == 'POST').

使用

if(isset($_POST['submit'])) // name of your submit button

你也可以使用:

is_array($_POST)

实际上,提交按钮已经执行了这个功能。

试试这个表格:

<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)";
}

试试这个

 <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">

另一方面,在表单中添加令牌并验证它以检查数据是否未从外部发送也总是一种良好做法。以下是步骤:

  1. 生成一个唯一的标记(可以使用 hash) Ex:

    $token = hash (string $algo , string $data [, bool $raw_output = FALSE ] );
    
  2. Assign this token to a session variable. Ex:

    $_SESSION['form_token'] = $token;
    
  3. Add a hidden input to submit the token. Ex:

    input type="hidden" name="token" value="{$token}"
    
  4. then as part of your validation, check if the submitted token matches the session var.

    Ex: if ( $_POST['token'] === $_SESSION['form_token'] ) ....