2012-07-01 2 views
0

Я собираю сообщения формы через jQuery через метод the.val(), проверяя эти сообщения и передавая ошибки обратно на входы формы или передавая true для метода $ post, который вызывает скрипт PHP cURL.Как передать вложенный массив, используя php cURL

Типичная переменная будет выглядеть следующим образом:

var industs_servedVal = $('#industs_served').val(); 

В данном случае это выбор множественного поля формы. Я понимаю, что метод .val() в jQuery передает массив, поэтому это кажется разумным, и я прав, говоря, что var также будет собирать массив.

Я затем передать уаг industs_servedVal методе $ .post, как это (то скользит вверх благодарственное письмо):

$.post('../inc/form_sendsf_modified.php', { 
      othervars: othervarsVal; 
      industs_served: industs_servedVal,    

     }, function(data) { 
      $('#sendEmail').slideUp('slow', 'swing', function() { 
       $('#sendEmail').replaceWith('<h3>Thank you!</h3><p>Your message was sent to us. We\'ll get back to you as soon as we can.</p>'); 
      }); 
     }); 
    } 
    return false; 
}); 

Файл «form_sendSF_modified.php» обрабатывает эти сообщения и отправляет в отдел продаж Облако с использованием cURL. Это работает; однако проблема заключается в том, что Sales Force показывает «массив» как значения, полученные для массива нескольких полей, а не сами значения массива. Есть ли проблема в том, как я собираю массив и передаю его в отдел продаж. Является ли цикл foreach способным отправлять несколько значений массива полей, а также другие значения в виде массива, как показано в коде.

$post_data['00N70000002U2fA'] = $_POST['industs_served']; //Array 

//$otherpost data 



//cURL CODE for post 
//traverse array and prepare data for posting (key1=value1) 
foreach ($post_data as $key => $value) { 
    $post_items[] = $key . '=' . $value; 
} 
//create the final string to be posted using implode() 
$post_string = implode ('&', $post_items); 
//create cURL connection to SFDC 
$curl_connection = curl_init('https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8'); 
//set options 
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); 
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 
//set data to be posted 
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); 
//perform our request 
$result = curl_exec($curl_connection); 
//show information regarding the request 
//print_r(curl_getinfo($curl_connection)); 
//echo curl_errno($curl_connection) . '-' . 
curl_error($curl_connection); 
//close the connection 
curl_close($curl_connection); 
//End cURL 

ответ

0

Вы можете использовать массив самостоятельно (но он изменит заголовок Content-Type на multipart/form-data).

curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_data); 

Или вы можете использовать строку сборки с http_build_query функции, смотри пример # 3.

0

использование этого

$post = "ac=on&p=1&pr[]=0&pr[]=1&a[]=3&a[]=4&pl=on&sp[]=3&ct[]=3&s=1&o=0&pp=3&sortBy=date"; 
parse_str($post,$fields); 

$url = 'http://example.com/'; 


//open connection 
$ch = curl_init(); 

//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL, $url); 
curl_setopt($ch,CURLOPT_POST, true); 
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 

//execute post 
$result = curl_exec($ch); 

//close connection 
curl_close($ch); 
+0

Привет и добро пожаловать на SO, при предоставлении ответов, это большая практика, чтобы сопровождать его с объяснением. – Fluffeh

Смежные вопросы