检测表单是否已使用PHP提交

时间:2009-07-26 15:50:43

标签: php validation forms

我正在寻找一种干净的方式来处理使用PHP进行数据验证和缓存的表单,但不需要将PHP与表单HTML混合。基本上,我希望能够用纯HTML编写表单并截取表单到达目的地,处理它并让数据快乐,或返回表单发送验证错误和缓存结果回来吧。

这是我正在开发的一个小框架的所有部分,以帮助学习。我最初的计划是使用Routing对象来嗅探GET和POST数据,但该数据并不总是表明存在表单。

我一直在浏览this list of HTTP Headers,但我没有看到任何有用的东西。虽然我以前从未打扰过看过HTTP Headers,所以我很容易丢失一些东西。

或者是否有其他可靠的方法来检测表单提交?

4 个答案:

答案 0 :(得分:4)

在GET请求方面,没有通用的方法来区分表单提交和简单链接。

使用纯HTML,只有表单可以生成POST请求,因此对REQUEST_METHOD进行过滤可能是一个可行的解决方案。 (但是,这显然不会捕获GET请求,而AJAX也可以生成POST请求,所以......)

如果您控制表单,我建议添加类似

的内容
<input type="hidden" name="this_is_a_form" />

到每个表格。 (对于奖励积分,您可以截取表单HTML并动态添加上面的行。)

答案 1 :(得分:0)

你几乎有两个选择:

  1. 使用ajax。
  2. 提交至middleman.php并重定向至流程的第2步,或返回表单。
  3. 我建议使用ajax来避免不必要的页面加载。你可以这样做:

    (假设在这里使用jQuery因为它是我所知道的)

    $.post("middleman.php", {option1: options}, function(data){
        if (data == 1) window.location = 'step2.html';
        else $("#notificationArea").text("sorry, form incorrect")}, "html");
    

    然后你的middleman.php将回显1为正确提交的表单,或其他任何错误。

    此外,此JavaScript通知用户不正确。您还可以回显表单特定部分的特定错误消息。 (这也假设你有一个div“notificiationArea”,可以持有noficiation)

答案 2 :(得分:0)

我建议您了解现有框架如何完成数据验证。我使用QCubed,它们完全按照您的描述(拦截用户输入并在处理之前验证它)。这是描述其表单处理流程的教程:http://examples.qcu.be/assets/_core/php/examples/basic_qform/process_flow.php。 Form_Validate正是您描述的阶段。

附注:出于安全性/数据完整性原因,在服务器端进行数据验证非常重要。如果需要,您可以添加客户端(javascript)验证,以改善用户体验。但是你也需要进行服务器端验证。

答案 3 :(得分:0)

您可以查看:

if(!empty($_POST) && isset($_POST['submit']))

其中“submit”是您提交按钮的名称......