2017-03-03 87 views
0

我開發了一個wordpress插件,它是一個表單生成器。該插件允許用戶輸入列表ID,API ID,名字,姓氏和電子郵件地址變量,以便在表單提交時將表單提交同步到選定的mailchimp列表中。PHP注意:未定義索引:將表單提交同步到mailchimp列表時

我有這個工作,但最近發現它不再發送信息到mailchimp。

檢查了我的調試文件,我收到以下錯誤:

[03-Mar-2017 11:53:47 UTC] PHP Notice: Undefined index: emailId in .../plugins/layers-form-builder/includes/class-send-form.php on line 37 
[03-Mar-2017 11:53:47 UTC] PHP Notice: Undefined index: emailSubject in .../plugins/layers-form-builder/includes/class-send-form.php on line 38 
[03-Mar-2017 11:53:47 UTC] PHP Notice: Undefined index: mcListID in .../plugins/layers-form-builder/includes/class-send-form.php on line 41 
[03-Mar-2017 11:53:47 UTC] PHP Notice: Undefined index: mcAPIkey in .../plugins/layers-form-builder/includes/class-send-form.php on line 42 
[03-Mar-2017 11:53:47 UTC] PHP Notice: Undefined index: formData in .../plugins/layers-form-builder/includes/class-send-form.php on line 54 

下面是當表單提交觸發腳本,這通過AJAX處理數據:

<script> 
jQuery(document).ready(function($) { 
    $('#layers-widget-form_builder-17 .builderForm').each(function() { 
     $(this).on("submit", function(event) { 
      event.preventDefault(); 
      var formData = $(this).serialize(); 
      var emailId ='[email protected]'; 
      var emailSubject ='New website form submission'; 
      var mcListID ='2d2fbcd34d'; 
      var mcAPIkey ='7f306818ee8b588162a7be1ac72d213b-us10'; 
           var mcEmail = $(this).find('input[name="email"]').val(); 
               var mcLname = $(this).find('input[name="last_name"]').val(); 
               var mcFname = $(this).find('input[name="first_name"]').val(); 
          var mcForm = $(this); 

      $('#layers-widget-form_builder-17 .builderForm').addClass('loading'); 
      $.ajax({ 
        type  : 'POST', // define the type of HTTP verb we want to use (POST for our form) 
        url   : 'http://thedistractionsband.co.uk/wp-content/plugins/layers-form-builder/includes/class-send-form.php', // the url where we want to POST 
        data  : {'formData' :formData,'emailId':emailId, 'emailSubject':emailSubject, 'mcListID':mcListID, 'mcAPIkey':mcAPIkey, 'mcEmail':mcEmail, 'mcFname':mcFname, 'mcLname':mcLname}, // our data object 
        dataType : 'json', // what type of data do we expect back from the server 
        encode  : true 
       }) 
       .done(function(data) { 
        // log data to the console so we can see 
        console.log(data); 
        //setTimeout(function(){$('#overlay').hide();}, 4000); 
        //$('#overlay').remove(); 
        $('.successMsg').html('<i class="fa fa-check"></i> Your message has been sent!'); 
        $('.form-builder-submit').hide(); 
        setTimeout(function(){ 
         $('.successMsg').hide(); 
         $('.builderForm').removeClass('loading'); 
         $('.form-builder-submit').show();}, 3000); 
        // Reset form after submission 
        $(".builderForm")[0].reset(); 
       }) 
       .fail(function (jqXHR, textStatus) { 
        console.log(textStatus); 
        $('.successMsg').html('<i class="fa fa-cross"></i> Oops, there seems to have been an error when submitting the form'); 
        setTimeout(function(){$('.successMsg').hide();}, 3000); 
       }); 

      event.preventDefault(); 




     }); 
    }); 

}); 

</script> 

這裏是class-send-form.php的內容(帶有錯誤的文件)

<?php 
/* Layers Form Builder Plugin 
* Script to send custom form 
*/ 
require_once('../../../../wp-load.php'); 

// function to send data to mailchimp 
function rudr_mailchimp_subscriber_status($email, $status, $list_id, $api_key, $merge_fields = array('FNAME' => '','LNAME' => '')){ 
$data = array(
    'apikey'  => $api_key, 
    'email_address' => $email, 
    'status'  => $status, 
    'merge_fields' => $merge_fields 
); 
$mch_api = curl_init(); // initialize cURL connection 

curl_setopt($mch_api, CURLOPT_URL, 'https://' . substr($api_key,strpos($api_key,'-')+1) . '.api.mailchimp.com/3.0/lists/' . $list_id . '/members/' . md5(strtolower($data['email_address']))); 
curl_setopt($mch_api, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Basic '.base64_encode('user:'.$api_key))); 
curl_setopt($mch_api, CURLOPT_USERAGENT, 'PHP-MCAPI/2.0'); 
curl_setopt($mch_api, CURLOPT_RETURNTRANSFER, true); // return the API response 
curl_setopt($mch_api, CURLOPT_CUSTOMREQUEST, 'PUT'); // method PUT 
curl_setopt($mch_api, CURLOPT_TIMEOUT, 10); 
curl_setopt($mch_api, CURLOPT_POST, true); 
curl_setopt($mch_api, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($mch_api, CURLOPT_POSTFIELDS, json_encode($data)); // send data in json 

    $result = curl_exec($mch_api); 
    return $result; 
} 

function getIfSet(&$value, $default = '') 
{ 
    return isset($value) ? $value : $default; 
} 

//$layers_email_address = Layers_Form_Builder_Widget::send_to_email(); 
$layers_email_address = $_REQUEST['emailId']; 
$layers_email_subject = $_REQUEST['emailSubject']; 

// mailchimp vars 
$mc_list_id = $_REQUEST['mcListID']; 
$mc_api_key = $_REQUEST['mcAPIkey']; 
$mc_email = getIfSet($_REQUEST['mcEmail']); 
$mc_fname = getIfSet($_REQUEST['mcFname']); 
$mc_lname = getIfSet($_REQUEST['mcLname']); 

// if there are any errors in our errors array, return a success boolean of false 
if (!empty($errors)) { 
// if there are items in our errors array, return those errors 
    $data['success'] = false; 
    $data['errors'] = $errors; 

} else { 
parse_str($_REQUEST['formData'], $formFields); 
$html='<html><body>'; 
foreach ($formFields as $key => $value) { 
    $html .= '<p><label>' . $key . ' :</label> ' . $value . '</p>'; 
} 
$html .='</body></html>'; 
$to = $layers_email_address; 
$subject = $layers_email_subject; 
$txt = $html; 
$headers = "From: <".$to.">". "\r\n"; 
$headers .= "MIME-Version: 1.0\r\n"; 
$headers .= "Content-Type: text/html; charset=ISO-8859-1"."\r\n"; 
wp_mail($to,$subject,$txt,$headers); 

//mailchimp test 
$email = $mc_email; 
$status = 'subscribed'; // "subscribed" or "unsubscribed" or "cleaned" or "pending" 
$list_id = $mc_list_id; // where to get it read above 
$api_key = $mc_api_key; // where to get it read above 
$merge_fields = array('FNAME' => $mc_fname,'LNAME' => $mc_lname); 

rudr_mailchimp_subscriber_status($email, $status, $list_id, $api_key, $merge_fields);  

// if there are no errors process our form, then return a message 

// show a message of success and provide a true success variable 
$data['success'] = true; 
$data['message'] = 'Success!'; 
} 

// return all our data to an AJAX call 
echo json_encode($data); 

My問題似乎存在圍繞這些線:

$layers_email_address = $_REQUEST['emailId']; 
$layers_email_subject = $_REQUEST['emailSubject']; 

// mailchimp vars 
$mc_list_id = $_REQUEST['mcListID']; 
$mc_api_key = $_REQUEST['mcAPIkey']; 
$mc_email = getIfSet($_REQUEST['mcEmail']); 
$mc_fname = getIfSet($_REQUEST['mcFname']); 
$mc_lname = getIfSet($_REQUEST['mcLname']); 

但是我不確知如何測試這個/調試這個問題,任何幫助將不勝感激,如果需要,我可以添加更多的代碼片斷。

+1

嘗試檢查isset(),例如, (isset($ _REQUEST ['emailId'])$ _REQUEST ['emailId']:「」) –

+0

謝謝@BrijalSavaliya - 我現在就試一試 - 然而,從我的第一部分代碼可以看出,這些變量已經設置 - 這會有所作爲嗎? –

+0

所以數據可以通過郵件發送,所以請嘗試witg POST數據,而不是REQUEST –

回答

0

更改所有$_REQUEST年代到$_POST

$_REQUEST['emailId']成爲$_POST['emailId']

0

個人而言,我用的var_dump($ _ REQUEST)或後續代碼var_dump($ _ POST)啓動確定這些值是否存在,以及在哪個變量中。