Как получить имя для сохранения в списке mailchimp с PHP + JS?

Я получаю только адрес электронной почты, хотя я вписал свое имя в форму. Пожалуйста, прости меня, я не специалист по кодированию. Я знаю только основные HTML, и я просто получаю некоторые коды, которые я нахожу в Интернете.

Моя форма рассылки выглядит так:

 <form id="subscribe" class="form" action="<?=$_SERVER['PHP_SELF']; ?>" method="post">
<div class="form-group form-inline">
<input size="15" type="text" class="form-control required" id="NewsletterName"name="NewsletterName" placeholder="Your name" />
<input size="25" type="email" class="form-control required" id="NewsletterEmail"name="NewsletterEmail" placeholder="[email protected]" />
<input type="submit" class="btn btn-default" value="SUBSCRIBE" />
<span id="response">
<? require_once('assets/mailchimp/inc/store-address.php'); if($_GET['submit']){ echo
storeAddress(); } ?>
</span>
</div>
</form>

мой файл js выглядит так:

jQuery(document).ready(function() {
jQuery('#subscribe').submit(function() {
// update user interface
jQuery('#response').html('<span class="notice_message">Adding email address...</span>');var name = jQuery('#NewsletterName').val().split(' ');

var fname = name[0];
var lname = name[1];

if ( fname == '' ) { fname=""; }
if ( lname == '' || lname === undefined) { lname=""; }
// Prepare query string and send AJAX request
jQuery.ajax({
url: 'assets/mailchimp/inc/store-address.php',
data: 'ajax=true&email=' + escape(jQuery('#NewsletterEmail').val()),
success: function(msg) {

if (msg.indexOf("Success") !=-1) {
jQuery('#response').html('<span class="success_message">Success! You are now
subscribed to our newsletter!</span>');
} else {
jQuery('#response').html('<span class="error_message">' + msg + '</span>');
}
}
});

return false;
});
});

и мой PHP-файл выглядит так:

<?php

function storeAddress(){

require_once('MCAPI.class.php');  // same directory as store-address.php

// grab an API Key from http://admin.mailchimp.com/account/api/
$api = new MCAPI('mymailchimpapi');

$merge_vars = Array(
'EMAIL' => $_GET['email'],
'FNAME' => $_GET['fname'],
'LNAME' => $_GET['lname']
);

// grab your List's Unique Id by going to http://admin.mailchimp.com/lists/
// Click the "settings" link for the list - the Unique Id is at the bottom of that page.
$list_id = "myuniqueid";

if($api->listSubscribe($list_id, $_GET['email'], $merge_vars , $_GET['emailtype']) === true) {
// It worked!
return 'Success!&nbsp; Check your inbox or spam folder for a message containing a
confirmation link.';
}else{
// An error ocurred, return error message
return '<b>Error:</b>&nbsp; ' . $api->errorMessage;
}

}

// If being called via ajax, autorun the function
if($_GET['ajax']){ echo storeAddress(); }
?>

Я не знаю, должен ли я также добавить

 if($api->listSubscribe($list_id, $_GET['fname'], $merge_vars , $_GET['fname']) === true)

в файле php. Кто-нибудь знает, где проблема? Или что-то не так в файле JS?

0

Решение

Ваша строка запроса ajax включает только ajax=true&email= так $_GET['fname'] будет неопределенным Было бы полезно, если бы вы сделали некоторую проверку пользовательского ввода на сервере для безопасности

Более простой способ компилировать данные из формы — использовать serialize()

jQuery('#subscribe').submit(function() {
var formData= $(this).serialize() ;
jQuery.ajax({
url: 'assets/mailchimp/inc/store-address.php',
data: formData,
success: function(....
........................

return false;
});

Ссылка: API-интерфейсы serialize ()

2

Другие решения

Исправлена!!!! Спасибо Charlietfl за указание на проблему. Я погуглил эту часть и смог найти решение. Я попытался добавить код serialize (), но он выдает ошибку страницы после нажатия кнопки отправки.

Я добавил это в мой файл JS:

data: 'ajax=true&email=' + escape(jQuery('#NewsletterEmail').val()) + '&fname=' + escape(jQuery('#NewsletterName').val()),

так что весь код:

jQuery(document).ready(function() {
jQuery('#subscribe').submit(function() {
// update user interface
jQuery('#response').html('<span class="notice_message">Adding email address...</span>');var name = jQuery('#NewsletterName').val().split(' ');

var fname = name[0];
var lname = name[1];

if ( fname == '' ) { fname=""; }
if ( lname == '' || lname === undefined) { lname=""; }
// Prepare query string and send AJAX request
jQuery.ajax({
url: 'assets/mailchimp/inc/store-address.php',
data: 'ajax=true&email=' + escape(jQuery('#NewsletterEmail').val()) + '&fname=' +
escape(jQuery('#NewsletterName').val()),
success: function(msg) {

if (msg.indexOf("Success") !=-1) {
jQuery('#response').html('<span class="success_message">Success! You are now
subscribed to our newsletter!</span>');
} else {
jQuery('#response').html('<span class="error_message">' + msg + '</span>');
}
}
});

return false;
});
});
0

По вопросам рекламы [email protected]