检查表单是否已提交 - PHP

时间:2011-10-10 10:28:55

标签: php forms validation

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

首先我想到了:

isset($_POST)

但是,随着超级全球无处不在,这种情况总会如此。我不想用以下方法遍历表单的每个元素:

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

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

除了添加自己的旗帜之外,还有一种“更干净”的方法吗?

9 个答案:

答案 0 :(得分:178)

一般检查是否有POST动作使用:

if (!empty($_POST))

编辑:如评论中所述,此方法在某些情况下不起作用(例如,使用复选框和没有名称的按钮)。你真的应该使用:

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

答案 1 :(得分:165)

怎么样

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

答案 2 :(得分:68)

实际上,提交按钮已经执行此功能。

尝试使用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)";
}

答案 3 :(得分:31)

使用

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

答案 4 :(得分:29)

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

答案 5 :(得分:13)

试试这个

 <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'])){

    }

答案 6 :(得分:0)

我遇到了同样的问题-还要确保在输入按钮中添加name=""。好吧,该修复程序对我有用。

if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['add'])){
    echo "stuff is happening now";
}

<input type="submit" name="add" value="Submit">

答案 7 :(得分:0)

换句话说,向您的表单添加令牌并进行验证以检查数据是否不是来自外部的,这也是一种好习惯。步骤如下:

  1. 生成唯一令牌(可以使用哈希),例如:

    $token = hash (string $algo , string $data [, bool $raw_output = FALSE ] );
    
  2. 将此令牌分配给会话变量。例如:

    $_SESSION['form_token'] = $token;
    
  3. 添加隐藏的输入以提交令牌。例如:

    input type="hidden" name="token" value="{$token}"
    
  4. 然后作为验证的一部分,检查提交的令牌是否 匹配会话变量。

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

答案 8 :(得分:-6)

你也可以使用:

is_array($_POST)