簡體   English   中英

使用cURL的Drupal hook Webform提交兩次

[英]Drupal hook webform using cURL submits twice

我正在使用自定義模塊來攔截表單提交,然后cURL將數據提交到第三方網站(在本例中為Pardot ...,但在其他CRM(如Marketo)中也得到了相同的結果)。

所有這些都可以正常工作,並且數據已正確提交,但是Drupal提交了兩次。 我已經在Drupal之外嘗試了相同的cURL函數,並且它僅發送一次,所以在Drupal中發生了一些事情,導致該函數運行兩次,我想是這樣。

有人知道為什么會這樣嗎? 謝謝!

更新:所以我進行了更多的特異性測試,無論表格的數量或指定一個表格都無所謂……它總是提交兩次。

function hook_form_alter(&$form, &$form_state, $form_id) {
  if (strstr($form['#form_id'], 'webform_client_form_')) {
    array_unshift($form['#submit'], 'hook_pardot_submit');
  }
}
/**
 * Send post data to pardot via curl
 */
function hook_pardot_submit($form, &$form_state) {
  // Values sent from form 
  $values = $form_state['values']['submitted'];

  if ( ! function_exists('curl_init')) {
   error("Curl is not setup on this PHP server and is required for this script.");
  }

  //Open cURL connection
  $ch = curl_init();
  if (curl_error($ch) != "") {
    die("Error: $error");
  }

  // Submit data to pardot
  curl_setopt($ch, CURLOPT_URL, "http://mypardoturl.com");
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($values,'', '&'));
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
  curl_setopt($ch, CURLOPT_HEADER, FALSE);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

  //Execute pardot PHP cURL
  $result = curl_exec($ch);

  //close cURL connection
  curl_close($ch);
}

因此,在進行更多調試之后,結果發現Drupal form_alter函數(在上面調用了Submit函數)被調用了兩次,從而使Pardot獲得了兩次提交。

發生這種情況的原因是, 主題名稱和此自定義模塊名稱相同 卸載模塊后,將模塊文件夾,.info和.module名稱更改為與主題名稱不同,它僅調用form_alter函數一次。

您的網站中是否有多個Web表單? 也許2?

因為此刻函數hook_form_alter帶有使用'strstr'的if語句運行。 您應該在此處的if語句中更加具體,並使用帶有相等運算符 (“ ==”)的網絡表單的表單ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM