【问题标题】:PHP: Send form data to php script which then posts data to another form processor like zapier.com?PHP:将表单数据发送到 php 脚本,然后将数据发布到另一个表单处理器,如 zapier.com?
【发布时间】:2013-09-13 11:18:48
【问题描述】:

我使用的是 zapier.com 的第 3 方表单处理器。问题是,在将数据提交到第 3 方表单处理器后,我需要一种方法来重定向用户。 Zapier.com 接受 post、get 和 put 提交。

我在想:

  1. 客户提交表单
  2. 我的 php 表单处理器捕获数据
  3. 我的 php 表单处理器然后通过 POST 或 GET 将数据提交到第 3 方表单处理器
  4. 然后我的 php 表单处理器将用户重定向到感谢页面。

我可能想多了,但我认为这样做的唯一方法是制作一个表单来发布已发布到其中的数据。否则,表单只会将我的用户发送到第 3 方处理器,而不会将他们重定向到我选择的任何页面。第 3 方表单处理器无法让我使用自定义重定向。

【问题讨论】:

  • 使用此方案,您可能无法知道信息是否已成功提交给第 3 方表单处理器。此外,如果您有一些示例代码/测试页面,那将会很有帮助。
  • 现在它只是一个普通的 html 表单,在表单的“action”字段中带有第 3 方表单处理器的 URL。但是我需要一种方法来将用户也重定向到我确定的页面,在他们提交表单而不是他们去第 3 方处理器之后。
  • 如何 curl 将数据发布到第三方处理器?
  • 这听起来你可以直接通过对第三方处理器的 ajax 调用来 POST/GET 表单数据。我不知道这个第三方处理器是什么,但它应该能够响应您的 AJAX 调用。
  • Pep,我只能将 post、get 或 put 用于第 3 方处理器。 @SergueiFedorov,我试图通过 ajax 使用 AbrahamSustaita 的答案来完成它,但即使表单成功提交,我也会遇到错误触发器。我在这里发布了这个问题:stackoverflow.com/questions/18743487/…

标签: php forms post get zapier


【解决方案1】:

使用 javascript 和 Ajax 可以这样做(使用 jQuery):

$("#idOfTheForm").submit(function(e) {
    e.preventDefault();
    $.ajax({
        method : "post",
        url : this.action,
        data : $(this).serialize(),
        success : function() {
            window.location = "yourUrlOfThanks.html";
        },
        error : function() {
            alert("Something went bad");
        }
    });
});

所以基本上它是:向这个表单的操作 url 发送一个发布请求,一旦它抛出一个 200 代码(找到并且一切正常)然后重定向到我的页面。如果出现问题,服务器将抛出 40* 状态码,脚本将进入错误函数。

【讨论】:

  • 我不断收到错误弹出消息,而不是重定向到成功 URL。但是,我可以确认数据已正确发布,并且我通过控制台收到了根据萤火虫的 200 代码。有什么想法吗?
  • @Damainman 你能给出第三方在页面上写什么的html吗?在我看来,如果请求是在添加 jQuery 脚本之前通过 ajax 完成的,它会捕获事件并阻止它冒泡到 js 的其余部分。是不是加了js?没有我给你的代码,它是用 ajax 完成的吗?例子的网址?第三方脚本的名称?
  • 我在这里为我在使用您的 ajax 方法时遇到的问题创建了一个新问题:stackoverflow.com/questions/18743487/…
  • 看起来它与跨域 ajax 问题有关,因为我正在尝试发布到第 3 方处理器。
【解决方案2】:

您可以使用Guzzle代理用户请求。

    $client = new Guzzle\Http\Client();

    $request = $client->post('/3rd.party.php')
        ->addPostField('user_field_1', $_POST['user_field_1'])
        ->addPostField('user_field_2', $_POST['user_field_2']);

    $response = $request->send();

    if ($response->isSuccessful()) {
        //show message
    }

缺点是您不能 100% 确定表单提交确实成功。为了实现这一点,您可以废弃$request->getBody() 并检查是否存在已知成功消息。

【讨论】:

  • 哦,请确保清理从 $_POST 获得的数据!
  • 感谢您的建议。我需要确保表单提交确实成功。但是,该页面不会真正提交已知的成功消息。检查 http 200 代码就足够了吗?但是我无权访问服务器配置来为此安装必要的组件。
  • 正如我所说,您可以废弃返回的页面以确保它成功,而不仅仅是检查返回的状态代码。你可以使用github.com/fabpot/Goutte
  • 而且你不需要 composer 来使用这些库,只需下载它们并像使用任何其他 php 库一样使用它们。
猜你喜欢
  • 2016-04-13
  • 2014-10-16
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
相关资源
最近更新 更多