Php 使用cURL将表单发布到两个位置

Php 使用cURL将表单发布到两个位置,php,forms,post,curl,mailchimp,Php,Forms,Post,Curl,Mailchimp,昨天我问我如何才能劫持我的MailChimp联系表来发送额外的电子邮件(当满足某些条件时) 我写了一篇文章,将action=“…从MailChimp URL更改为我自己的process\u email.php,代码如下: extract($_POST); $url = 'http://myMailchimpUser.us2.list-manage.com/subscribe/post'; $fields = array( 'u' => urlencode($u), 'id'

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

我写了一篇文章,将
action=“…
从MailChimp URL更改为我自己的
process\u 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);
我还没有添加将电子邮件发送给我自己的代码,但这应该是无关紧要的。我在这段代码中遇到的问题是,它没有将我重定向到MailChimp页面,而是在
process\u email.php
中实际加载(并且在引导时加载不正确)


我知道,如果我使用JavaScript,我可以完成我想做的事情,但在我看来,这不是正确的方法。有人能为我提供帮助吗?

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

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

$(文档).ready(函数(){
$(“#提交按钮”)。单击(函数(事件){
event.preventDefault();
$.post(“your_email_parser.php”,$('#form id').serialize(),function(){
$('#表单id')。提交();
});
});
});
...
...

cURL的目的不是重定向用户,而是创建一个从服务器到
$url
的完整请求。您是否希望用户被重定向到
$url
?是的,我可能应该重新打开,或者再次问原始问题。我真的只想知道如何运行我自己的PHP脚本(发送快速邮件)(或之前)像往常一样发布我的mailchimp表单。前面的问题说cURL是一种方式,但看起来不像这样。cURL是一个选项,但你必须使用他们的api。就像我昨天说的,在表单提交上有一个Javascript事件,在提交到实际的mailchimp页面之前用数据提醒你的服务器会更容易。使用jQuery提交查找ajax表单。在这种情况下,如果您想将用户信息发布到另一个脚本,而不改变行为,则应添加
curl\u setopt($ch,CURLOPT\u RETURNTRANSFER,true);
。因为默认情况下,CURL将获取输出并打印它。@Xeoncross-谢谢。我将进一步阅读CURL。不过我可能会放弃并使用js。啊,太好了。谢谢。我最后尝试了类似的方法(使用提交事件处理程序)但结果比你的答案复杂得多-而且还是有点问题。我现在正在做另一个项目,但我会在尝试后给你一个复选标记。嘿,不知道你是否能对此提供一些见解-仍然不能正常工作:(将其发布到my_email_解析器很好,但出于某种原因,它不会在之后将表单提交给mailchimp。行
$(“#mailchimp_注册”)。提交();
似乎正在执行,这肯定是我表单上的正确id,但什么也没有发生。很难说;但本例中的一个不同之处是,我使用了一个单击事件(而不是提交事件)捕获数据并将其发布到您的电子邮件解析器的这一行
$(“#提交按钮”)。单击(函数(事件){
。如果您使用类似于
$('#表单id').submit(函数(事件){event.preventDefault()})
的东西,您的表单将永远无法正常发布,因为您停止了所有提交事件。请尝试在
$('#表单id')之前放置一个
警报()
以确保您正在到达目的地,并且可能使用链接或除单击事件以外的其他内容
$(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>