【问题标题】:How to set up a PHP Curl POST request which can trigger via a JavaScript onclick event?如何设置可以通过 JavaScript onclick 事件触发的 PHP Curl POST 请求?
【发布时间】:2022-01-23 20:07:35
【问题描述】:

我想在 javascript 中跟踪表单上的提交按钮单击事件并将提交按钮单击事件发送到 curl PHP 端,并且 curl php 文件中的 url (https://trackcmp.net/event) 将发送我触发并存储到的事件数据库(ActiveCampaign)。

表单由 ActiveCampaign 创建并嵌入到 Wordpress 网站中。

下面是我制作的2个文件,第一个是ajax文件,第二个是PHP文件。

有人可以帮帮我吗?谢谢。

(function($){
$("_form_44__submit").on('click', function () {
    // fire the AJAX request on button click
    $.ajax({
       type: "POST",
       url: 'curl.php',
       dataType: 'json',
       headers: {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",},
       data: {actid: "actid",
    key: "key",
    event: "Click_Submit_Button_Event",
    visit: ["email"]
 },
    })
    .done(function (response) {
        console.log(response);
       // if you want to do something on success
    })
    .fail(function (xhr, status, error) {
        console.log('error');
       // if you want to do something on error
    });
  });
})
<?php


$actid = $_POST['actid'];
$key =  $_POST['key'];
$event =  $_POST['event'];
$visit =  $_POST['visit'];

$url = "https://trackcmp.net/event";

    $curl = curl_init(); //open connection /
    // changes the cURL session behavior with options POST
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    //curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_POSTFIELDS, array(
        'actid' => $actid,
        'key' => $key,
        'event' => $event,
        'visit' => $visit,
));
    //execute
    $result = curl_exec($curl); //handle $curl_init
    if ($result !== false) {
        $result = json_decode($result);
        if ($result->success) {
            echo 'Success! ';
        } else {
            echo 'Error! ';
        }

        echo $result->message;
    } else {
        echo 'cURL failed to run: ', curl_error($curl);
    }


?>

【问题讨论】:

    标签: javascript php curl integration activecampaign


    【解决方案1】:

    我假设 PHP curl 适合你,并且你有数据来填充 ajax 帖子中的值,所以:

    为了让数据到达以 $_POST 形式发布 PHP,您需要像这样发送它,例如 $.ajax 代码:

    $.ajax({
        type: "post",
        url: "curl.php",
        data: "actid=actid&key=somekey&event=Click_Submit_Button_Event&visit=email@at.com",
        success: function (data) {
            console.log('Submission was successful.');
            console.log(data);
        },
        error: function (data) {
            console.log('An error occurred.');
            console.log(data);
        },
    });
    

    看看数据的构建方式:你当然可以这样做:"actid="+actid+"&amp;key="+key+ ... etc

    这样您的 PHP 文件将能够读取表单数据。

    如果你要打印你的 $_POST,它看起来像:

    Array
    (
        [actid] => actid
        [key] => somekey
        [event] => Click_Submit_Button_Event
        [visit] => email@at.com
    )
    

    编辑这是一个完整的版本,带有表单点击和输入:

    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    </head>
    <html>
        <body>
            <form id="contactForm1" action="curl.php" method="post">
                Actid <input type="text" name="actid" /><br>
                Key <input type="text" name="key" /><br>
                Event <input type="text" name="event" /><br>
                Visit <input type="text" name="visit" /><br>
                <input type="submit" />
                <!-- Form input fields here (do not forget your name attributes). -->
            </form>
        </body>
    </html>
    
    
    
    <script type="text/javascript">
        var frm = $('#contactForm1');
    
        frm.submit(function (e) {
    
            e.preventDefault();
            console.log(frm.serialize()); /*show the data being sent from the form*/
            $.ajax({
                type: frm.attr('method'),
                url: frm.attr('action'),
                data: frm.serialize(),
                success: function (data) {
                    console.log('Submission was successful.');
                    console.log(data);
                },
                error: function (data) {
                    console.log('An error occurred.');
                    console.log(data);
                },
            });
        });
    </script>
    

    为你 PHP 我认为你误认为数组发送数据......你应该尝试这样的事情:curl.php: 发布数据将成为一个 json,我怀疑这是您需要发送到您的端点的内容......它看起来像这样:

    {"actid":"actid","key":"key","event":"Click_Submit_Button_Event","visit":"someEmail@at.com"}

    <?php
    $post = json_encode($_POST);
    print_r($post);
    
    $url = "https://trackcmp.net/event";
    
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    
    $headers = array();
    $headers[] = 'Content-Type: application/json';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
    $result = json_decode(curl_exec($ch),true);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    
    echo '<pre>';
    print_r($result);
    

    【讨论】:

    • 您好,非常感谢您的建议。你的建议非常好。但我有一些与我提出的问题有关的问题。实际上,我使用的表单嵌入在 Wordpress 网站 中。 表单类是“_form_44”。因此,我可以请您就如何触发嵌入在 Wordpress 中的表单提出建议吗?谢谢。
    • 提交表单时是否到达了 PHP 文件?你在这个过程中处于什么阶段?
    • 它适用于带有表单点击和输入部分的完整版本。但实际上,表单已经创建并在 Wordpress 网站内实现。但我不知道如何使用 ajax 调用来触发 Wordpress 中的表单。并在用户单击 php 文件 (trackcmp.net/event) 中的 url 时发送跟踪事件(提交)。你有什么解决办法吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 2017-11-21
    • 2017-04-23
    • 1970-01-01
    • 2016-09-11
    • 2015-12-09
    相关资源
    最近更新 更多