【问题标题】:Detecting whether a form has been submitted with PHP使用 PHP 检测表单是否已提交
【发布时间】:2009-07-26 15:50:42
【问题描述】:

我正在寻找一种使用 PHP 处理表单的简洁方法,该方法可以验证和缓存数据,但不需要将 PHP 与表单 HTML 混合。基本上,我希望能够用纯 HTML 编写一个表单,并在到达目的地的途中拦截该表单,对其进行处理,然后让数据愉快地继续前进,或者返回发送验证错误和缓存结果的表单回来吧。

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

我一直在查看this list of HTTP Headers,但没有看到任何有用的信息。尽管我以前从未费心查看 HTTP 标头,但我很容易遗漏一些东西。

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

【问题讨论】:

  • 这种方法如何解释返回验证错误和重新填充表单?
  • 两种方式。首先,有一个记录器类,每个视图都包含一个实例。每个视图所做的第一件事是显示任何用户反馈。其次,每个布局都会自动加载一些核心 js 函数。其中一个函数将恢复缓存的值,并将错误类添加到错误的字段。

标签: php validation forms


【解决方案1】:

当涉及到 GET 请求时,没有通用的方法来区分表单提交和简单链接。

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

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

<input type="hidden" name="this_is_a_form" />

到每一种形式。 (对于加分,您可以截取表单 HTML 并即时添加上述行。)

【讨论】:

  • 嗯,当我检索 HTML 以包含在视图中时,我可以这样做。我想知道开销是多少。
【解决方案2】:

你几乎有两种选择:

  1. 使用 ajax。
  2. 提交到 middleman.php 并重定向到流程的第 2 步,或返回表单。

我会推荐 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”)

【讨论】:

  • 我的目标是在没有任何开箱即用的 Javascript 的情况下工作(虽然我将在回程中使用 jQuery 来获得一些额外的闪光,但没有它它也能正常工作)。此外,Ajax 解决方案不会使数据对数据库插入安全。其次,我真的很想保持表单的纯度,让它的 action 属性指向它的确切位置。
【解决方案3】:

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

旁注:出于安全/数据完整性原因,在服务器端进行数据验证很重要。如果需要,您可以在此基础上添加客户端 (javascript) 验证,以改善用户体验。但是您也必须进行服务器端验证。

【讨论】:

    【解决方案4】:

    您可以通过以下方式查看:

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

    “提交”是提交按钮的名称...

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      相关资源
      最近更新 更多