【问题标题】:Using cURL to POST form to two places使用 cURL 将表单发布到两个地方
【发布时间】:2012-08-24 10:59:30
【问题描述】:

昨天我问a question 我如何才能劫持我的 MailChimp 联系表单以发送额外的电子邮件(当满足某些条件时)。

我将 MailChimp URL 中的 action="... 更改为我自己的 process_email.php,代码如下:

extract($_POST);
$url = 'http://myMailchimpUser.us2.list-manage.com/subscribe/post';
$fields = array(
    'u' => urlencode($u),
    'id' => urlencode($id),
    'group' => http_build_query ($group),
    'MERGE1' => urlencode($MERGE1),
    'MERGE2' => urlencode($MERGE2),
    'MERGE3' => http_build_query($MERGE3),
    'other_more_info_text' => urlencode($other_more_info_text),
    'submit' => urlencode($submit)
);

foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

$result = curl_exec($ch);
curl_close($ch);

我还没有添加将电子邮件发送给自己的代码,但这应该是微不足道的。我在使用 this 代码时遇到的问题是,它没有将我重定向到 MailChimp 页面,而是实际加载在 process_email.php 中(并且加载不正确以启动。)

我知道如果我使用 JavaScript,我可以完成我想做的事情,但在我看来,这不是正确的方法。谁能给我任何帮助?

【问题讨论】:

  • cURL 并不是为了重定向用户,而是从服务器创建一个完整的请求到$url。您是否希望将用户重定向到$url
  • 是的,我可能应该重新打开,或者再次询问原始问题。我真的只是想知道如何运行我自己的 PHP 脚本(发送快速邮件)作为(或之前)像往常一样发布我的 mailchimp 表单。上一个问题说 cURL 是要走的路,但它看起来不太像这种情况。
  • cURL 是一个选项 - 但您必须使用 their api。就像我昨天说的那样,在表单提交上添加一个 Javascript 事件会更容易,它会在 提交到实际的 mailchimp 页面之前用数据提醒你的服务器。使用 jQuery 查找 ajax 表单提交。
  • 在这种情况下,如果你想在不改变行为的情况下将用户信息发布到另一个脚本,你应该添加curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);。因为默认情况下 CURL 会获取输出并打印出来。
  • @Xeoncross - 谢谢。我会再阅读一下cURL。不过,我可能只是屈服并使用 js。

标签: php forms post curl mailchimp


【解决方案1】:

如果我理解正确:您想先在本地 POST 数据,然后让表单 POST 到 Mailchimp。如果这就是你想要做的,那么使用一些连接到表单(或表单按钮)的 JS 可能是最好的方法。我认为这适合您的情况的正确方法。

像下面这样的 jQuery 将首先在本地发布表单,一旦该请求完成,它将使用给定的操作 url (mailchimp) 提交表单。

$(document).ready(function(){
    $('#submit-button').click(function(event){
        event.preventDefault();
        $.post("your_email_parser.php", $('#form-id').serialize(), function(){
            $('#form-id').submit();
        });
    });
});

...

<form id='form-id' action='http://myMailchimpUser.us2.list-manage.com/subscribe/post' method='post'>
    ...
    <input type='submit' id='submit-button' />
</form>

【讨论】:

  • 啊,太好了。谢谢。我最终尝试了类似的东西(使用提交事件处理程序),但它最终比你的答案更加复杂 - 而且仍然有点错误。我目前正在处理另一个项目,但一旦我尝试了,我会给你一个复选标记。
  • 嘿,想知道您是否可以对此提供任何见解 - 仍然无法正常工作:(它可以很好地发布到 my_email_parser,但由于某种原因,之后它没有将表单提交给 mailchimp。
  • $('#mailchimp_signup').submit(); 行似乎正在执行,这绝对是我表单上的正确 ID,但没有任何反应。
  • 很难说;但是在这个例子中不同的一点是我使用了一个点击事件(不是提交事件)来捕获数据并将其发布到你的电子邮件解析器中的这一行$('#submit-button').click(function(event){。如果您使用$('#form-id').submit(function(event){event.preventDefault()}); 之类的东西,您的表单将永远无法正常发布,因为您停止了所有提交事件。尝试在$('#form-id').submit(); 之前放置一个alert() 以确保您到达那里,并且可能使用链接或&lt;input type='submit' id='submit-button' /&gt; 以外的其他内容进行点击事件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 2016-10-02
  • 2011-09-01
  • 1970-01-01
相关资源
最近更新 更多