5

この質問のタイトルが少し広いように見えることをお詫びします。残念ながら、私はまだ jquery に本当に慣れていないので、これを機能させるために過去に多くの助けを借りました。

私はここにライブのウェブサイトを持っています: http://www.rattletree.com ユーザーが電子メールボックスをクリックすると、名前と都市のフィールドがドロップダウンして入力されるニュースレターのサインアップフォームがあります。これはすべて正常に機能しますが、現在の方法では、情報が直接私のメール アドレスに送信され、その人をメール マーケティング プログラムに手動で入力する必要があります。プログラムが提供する埋め込みコードから必要な情報を取得して、この情報をメール マーケティング プログラムに直接送信したいと考えています。私は数日間それに取り組んできましたが、情報をプログラムに送信してdivを非表示にしないこともあれば、divを非表示にしてフォームを適切に送信できないこともあります。私は少し迷っています。誰かがこれら2つのことを適切にマージするのを手伝ってくれることを願っています.

私自身の電子メールアドレスに送信している現在のライブ Web サイトの作業コードは次のとおりです。

(ヘッダー内)

<div class="outeremailcontainer">
    <div id="emailcontainer">
        <?php include('verify.php'); ?>
        <form action="../index_success.php" method="post" id="sendEmail" class="email">
            <h3 class="register2">Newsletter Signup:</h3>
            <ul class="forms email">
                <li class="name">
                    <label for="yourName">Name: </label>
                    <input type="text" name="yourName" class="info" id="yourName" value="<?php echo $_POST['yourName']; ?>" /><br />
                </li>
                <li class="city"><label for="yourCity">City: </label>
                    <input type="text" name="yourCity" class="info" id="yourCity" value="<?php echo $_POST['yourCity']; ?>" /><br />
                </li>
                <li class="email">
                    <label for="emailFrom">Email: </label>
                    <input type="text" name="emailFrom" class="info" id="emailFrom" value="<?php echo $_POST['emailFrom']; ?>" />
                     <?php if(isset($emailFromError)) echo '<span class="error">'.$emailFromError.'</span>';
                     ?>
                </li>
                <li class="buttons email">
                     <button type="submit" id="submit">Send</button>
                     <input type="hidden" name="submitted" id="submitted" value="true" />
                </li>
            </ul>
        </form>
    <div class="clearing">
    </div>
  </div>
</div>

スクリプト:

$(document).ready(function () {
    $('#emailFrom').focus(function () {
        if ($('#overlay').length) {
            return;
        } // don't keep adding overlays if one exists

        $('#sendEmail').find('.name, .city').slideDown(300, function () {
            $(this).show();
        });

        $('.outeremailcontainer').css({
            position: 'relative',
            bottom: 0,
            left: 0,
            zIndex: 1001
        });

        $('<div id="overlay"></div>').appendTo('body');
    });

    $('#overlay').live('click', function () {
        $('#sendEmail').css({
            backgroundColor: 'transparent'
        }).find('.name, .city').slideUp(300);

        $('.outeremailcontainer').css({
            position: 'static'
        });
        $('#overlay').remove();
    });
});

ページの下部にあるインクルード:

$(document).ready(function () {
    $("#submit").click(function () {
        $(".error").hide();
        var hasError = false;
        var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;

        var emailFromVal = $("#emailFrom").val();

        if (emailFromVal == '') {
            $("#emailFrom").after('<span class="error"><br />You forgot to enter the email address to send from.</span>');
            hasError = true;

        } else if (!emailReg.test(emailFromVal)) {
            $("#emailFrom").after('<span class="error"<br />>Enter a valid email address to send from.</span>');
            hasError = true;
        }

        var yourNameVal = $("#yourName").val();
        if (yourNameVal == '') {
            $("#yourName").after('<span class="error"><br />You forgot to enter your name.</span>');
            hasError = true;
        }

        var yourCityVal = $("#yourCity").val();
        if (yourCityVal == '') {
            $("#yourCity").after('<span class="error"><br />You forgot to enter your city.</span>');
            hasError = true;
        }
        if (hasError == false) {
            $(this).hide();
            $("#sendEmail li.buttons").append('<img src="/wp-content/themes/default/images/template/loading.gif" alt="Loading" id="loading" />');
            $.post("/includes/sendemail.php",
                //emailTo: emailToVal, 
                {
                    emailFrom: emailFromVal,
                    yourName: yourNameVal,
                    yourCity: yourCityVal
                },
                function (data) {
                    $("#sendEmail").slideUp("normal", function () {
                        $("#sendEmail").before('<h3 class="register2">Thank you!  You\'re on the email list!</h3><p class="emailbox">Click <a href="http://rattletree.com/Songs/Live_EP/Chikende.mp3">HERE</a> for your free song.</p>');
                    });
                }
            );
        }
        return false;
    });
});

そして最後に、上記の名前、都市、および電子メール情報を送信したい場所に電子メール マーケティング プログラムが提供しているコードを次に示します。

<form action="https://madmimi.com/signups/subscribe/66160" method="post" id="mad_mimi_signup_form">
    <fieldset>
        <div class="mimi_field text email required">
            <label for="signup_email">Email</label>
            <input id="signup_email" name="signup[email]" type="text" placeholder="you@example.com" class="required">
            <div class="mimi_field_feedback"></div><span class="mimi_funk"></span>
        </div>
        <div class="mimi_field text required">
            <label for="signup_name" id="wf_label">Name</label>
            <input id="signup_name" name="signup[name]" type="text" class="required">
            <div class="mimi_field_feedback"></div><span class="mimi_funk"></span>
        </div>
        <div class="mimi_field text required">
            <label for="signup_city" id="wf_label">City</label>
            <input id="signup_city" name="signup[city]" type="text" class="required">
            <div class="mimi_field_feedback"></div><span class="mimi_funk"></span>
        </div>
        <div class="mimi_field action">
            <input id="webform_submit_button" value="Sign up!" type="submit" class="submit" data-default-text="Sign up!" data-submitting-text="Sending…" data-invalid-text="? You forgot some required fields">
        </div>
    </fieldset>
</form>

助けてくれてありがとう!

4

2 に答える 2

3

これを実現する簡単な方法があります。MadMimi の API と公式の PHP ラッパー ( GitHubで入手可能) を使用します。

jQuery や CORS への変更は必要ありません。

探しているリストに新しい購読者を追加する方法の例があります。

私はあなたのために例をカスタマイズしました:(これを/includes/sendemail.phpに追加してください)

<?php
require('MadMimi.class.php');
$mailer = new MadMimi('YOUR USERNAME (OR E-MAIL ADDRESS)', 'YOUR API KEY'); 
$user = array('email' => $_REQUEST['emailFrom'], 'name' => $_REQUEST['yourName'], 'city' => $_REQUEST['yourCity'], 'add_list' => 'My List');
$mailer->AddUser($user);
?>

これは、現在のハンドラ/includes/sendemail.phpと同じディレクトリにMadMimi.class.phpおよびSpyc.class.phpファイルを配置したことを前提としています。

実際のユーザー名と API キー (サインインしたときに MadMimi から取得できるはずです) をプラグインしてください。

そこに既存の電子メール スクリプトを残して、API 呼び出しを MadMimi に追加するだけで、誰かが購読するたびに通知を受け取ることもできますが、何もする必要はありません :)

于 2012-11-29T14:40:16.433 に答える
2

Javascript のクロスサイト POST はセキュリティ上のリスクです (あなたが知らないうちに、ペイパル Cookie が設定されたペイパル サイトに Web サイトが投稿を行っていると想像してください)。

/includes/sendemail.php を変更してプロキシとして機能させ、現在のように入力を受け取り、POST リクエストを madmimi.com に送信する必要があります。

たとえば、これを参照してください: How to send HTTPS posts using php

そのページの最初の回答のコードが機能する場合は、次のように変更できます

/includes/sendemail.php

<?php
$postfields = array('signup[email]'=>$_REQUEST['emailFrom'], 'signup[name]'=>$_REQUEST['yourName'], 'signup[city]'=>$_REQUEST['yourCity']);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://madmimi.com/signups/subscribe/66160');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$result = curl_exec($ch);
?>

これは、madmimi フォーム ページにフォーム フィールド名を変更する JavaScript コードがないことを前提としています (そのため、リクエストを送信する前に、signup[city] が signup-city のような別のものに変更されません)。もちろんすべてのリクエストは、ユーザーの Cookie が設定されていない状態で、あなたのサーバーから到着したものとして madimi に表示されます。スタック オーバーフロー ページのソリューションは curl を使用するため、その curl を使用するには、サーバーの PHP インストール ( http://php.net/manual/en/book.curl.php ) で使用できる必要があります。インストールされていない場合は、他のソリューションを利用できます。

メールも送信したい場合は、現在の sendemail.php スクリプトの上にこのコードを追加するだけで、以前と同じように動作し、さらに madmimi フォームに接続します。

元の sendemail.php のように、PHP スクリプトから呼び出し元のページに何か (OK、DONE、SENT など) を返す必要がある場合があります。それをスクリプトの末尾の ?> 行の前に追加するだけです。

于 2012-11-29T10:19:03.100 に答える