【问题标题】:Submitting a form to a php script and returning将表单提交到 php 脚本并返回
【发布时间】:2014-08-23 10:31:59
【问题描述】:

我有一个联系表单,最初"onsubmit" 调用一个javascript 函数来验证内容。如果此函数返回 true,则将数据发布到 php 文件。

在这个文件的末尾我想返回联系页面,目前我正在使用这个:

header('Location: ' . $_SERVER['HTTP_REFERER']);

有没有更好的方法?

我还想更改联系人页面上某个元素的 css 以在我返回时显示(感谢信息),这可能吗?我可以将它设置为在初始 javascript 函数中使用 jQuery 显示,但是当它转到 php 文件时会被清除。

谢谢

【问题讨论】:

  • Javascript 运行客户端,PHP 运行服务器端。当您使用位置标签时,它会将您发送到一个新的 PHP 页面,实质上是重新加载联系页面。这意味着在第一个页面加载后执行的任何客户端脚本都已被清除,您将返回到原始页面加载状态。
  • 谢谢。我明白这一点,这就是为什么我希望有更好的方法来做到这一点。有什么想法吗?
  • 看看下面的 Matt The Ninja 的解决方案。他建议您每次都将表单提交给 PHP,然后当您在 PHP 脚本中时,您可以验证并显示谢谢,或者验证失败并显示错误提示,从而避免混乱的客户端处理问题。

标签: javascript php jquery html contact-form


【解决方案1】:

感谢各种人的回答,我最终找到了一些方法来做到这一点。谢谢大家。

最简单的方法是使用以下标题重定向到联系人感谢页面:

header("Location: http://{$_SERVER['SERVER_NAME']}/contact-thankyou.html");

我改为使用 SERVER_NAME,因为 HTTP_REFERER 不是一个很好的解决方案。

第二个解决方案,有点难看,但完成的工作是返回到具有这样标题的同一页面:

header("Location: http://{$_SERVER['SERVER_NAME']}/contact.html?submitted");

然后使用以下Javascript检测查询参数并更改css:

if (window.location.search.substring(1) == "submitted")
        {
            $("#message-sent").css({"display": "block"});
        }

这不是一个很好的解决方案,因为我更喜欢使用 php 获取查询参数,但我必须在必须构建模板系统的页面上使用 html 和 Javascript。

谢谢大家。

【讨论】:

    【解决方案2】:

    HTTP_REFERER 不是在 PHP 中完成历史 -1 的最佳解决方案。

    documentation中所述:

    将用户代理引向当前页面的页面地址(如果有)。这是由用户代理设置的。不是所有的用户代理都会设置这个,有些提供修改 HTTP_REFERER 作为一个特性的能力。简而言之,它不能真正被信任

    最好的解决办法是在header函数中显式写要返回的页面。

    对于第二个问题,可以使用查询参数进行重定向:

    header('Location: script.php?valid=1');
    

    然后在你的视图中测试它:

    if (isset($_GET['valid']) && $_GET['valid'] == '1') {
         // display the message
    }
    

    【讨论】:

      【解决方案3】:

      post 到 self 然后你如果 post 后的语句被处理重定向。 您是否像您所说的那样使用标头重定向。

      所以让它在表单的操作部分发布给自己

      <form action="yourpage.php">
      

      然后添加 PHP 来处理 yourpage.php 上的帖子

      if(isset($_POST)){
       //Handle POSTed data.
      
       //if handled correctly
       {
        header("Location: somewhere.com")
       }
      }
      

      【讨论】:

      • 这种方法的优点是您可以将您的 Javascript 验证代码移动到 PHP 端,这本质上更安全,因为它将在服务器上运行,而不是在客户端上,即使是业余网络开发人员可能会搞砸代码。
      • 更安全是的,但这并不能解决我显示感谢信息的问题,并且显示来自 php 的错误更加困难。在 Javascript 中,我可以直接在页面上显示错误。不过,我毫不怀疑这是一种更好更安全的方式。
      • 您仍然可以显示感谢信息。如果数据正确发布(或重定向到感谢页面),只需将其显示为 if 语句的一部分。显示来自 php 的错误应该不难看到这里stackoverflow.com/questions/1053424/…
      • 我去看看。我想你误解了我所说的错误,我的意思是用户错误,例如无效的电子邮件。
      • 啊,当然,但是在提交表单之前你是用 JS 处理这些的,对吧?只有通过验证才能发布表单?
      【解决方案4】:

      假设您的联系页面名称是index.php。您可以使用正确的操作设置表单(尽管默认情况下应该是这种方式),然后在标题中检查提交参数。代码如下

      <?php
        if (array_key_exists("submit_btn",$_REQUEST) {
          //display a thank you
        }
      ?>
      
      <!-- more code here-->
      
      <form action="index.php">
        <input name="whatever" type="text">
        <input type="submit" name="submit_btn">
      </form>
      

      【讨论】:

      • 听上去是个好主意,如何在标题中添加参数?
      • 以上,我只是通过查看submit_btn 命名元素在请求中是否可用来检查表单是否已提交。这就是我所说的提交参数的意思。每当该人提交表单时,该参数将被传递到提交页面
      【解决方案5】:

      使表单将数据提交到联系表单的同一页面。 然后从 PHP 脚本检查是否已提交表单,执行处理代码并返回带有感谢信息的 div。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多