2015-10-20 1 views
1

Je tente d'envoyer les résultats d'un formulaire Web Drupal via un POST cURL à un tiers. Ma fonction cURL ne fonctionne pas, et j'ai du mal à trouver mon erreur. Je n'ai jamais utilisé cURL auparavant, donc je ne suis pas vraiment sûr de comment cela fonctionne, ou vraiment même ce qu'il fait. D'après ce que je peux dire, je rassemble l'URL à envoyer correctement, l'envoi échoue juste.Drupal 7 PHP cURL non exécuté

<?php 
module_load_include('inc','webform','includes/webform.submissions'); 
$uri = $_SERVER[REQUEST_URI]; 
$sid = substr($uri, 20); 
$submission = webform_get_submissions(array('sid' => $sid)); 
$nid = $submission[$sid]->nid; 

$sql = db_select('webform_submitted_data', 'w'); 
$sql->fields('w', array('sid','cid','data')) 
    ->condition('sid', $sid) 
    ->condition('cid', array(1,2,3,4,5,6,7,8),'IN'); 
$results = $sql->execute(); 

$post = NULL; 
$url = urlencode('http://ulm.datamark.com/services/lead_submission&client_code=DAV4516&source_code=DAVNCU'); 

foreach($results as $result) 
    { 
     if ($result->cid == 1) { 
      $post .= "first_name=" . urlencode($result->data); 
     } else if ($result->cid == 2) { 
      $post .= "&last_name=" . urlencode($result->data); 
     } else if ($result->cid == 3) { 
      $post .= "&email=" . urlencode($result->data); 
     } else if ($result->cid == 4) { 
      $post .= "&phone=" . urlencode($result->data); 
     } else if ($result->cid == 5) { 
      $who = $result->data; 
     } else if ($result->cid == 6) { 
      $post .= "&phone2=" . urlencode($result->data); 
     } else if ($result->cid == 8) { 
      $post .= "&comments=" . urlencode($result->data); 
     } 


    } 
dsm($who); 
dsm($url.$post); 


if ($who == "fs") 
{ 

$defaults = array( 
     CURLOPT_POST => 1, 
     CURLOPT_HEADER => 0, 
     CURLOPT_URL => $url, 
     CURLOPT_FRESH_CONNECT => 1, 
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_FORBID_REUSE => 1, 
     CURLOPT_TIMEOUT => 4, 
     CURLOPT_POSTFIELDS => http_build_query($post) 
    ); 

    $ch = curl_init(); 
    curl_setopt_array($ch, ($defaults)); 
    if(! $result = curl_exec($ch)) 
    { 
     echo "Something went wrong"; 
     trigger_error(curl_error($ch)); 
    } 
    curl_close($ch); 


?> 

Répondre

1

Mes yeux voient un couple des questions:

  1. Ne pas UrlEncode l'URL elle-même. Cette fonction est pour les données que vous passez dans la partie Query de l'URL (la partie après?)
  2. Il semblerait que vous manquiez le ? dans votre URL.
  3. Je pense que vous avez des problèmes logiques dans votre assemblage des données Post. Premièrement, vous encodez toutes les données $ result-> pour chaque champ de publication. Vous souhaitez probablement inclure un seul champ à la fois. Deuxièmement, vous passez une chaîne dans http_build_query(), qui attend un tableau ou un objet. Peut-être pouvez-vous refactoriser l'utilisation de $ post en tant que tableau, ce qui pourrait faciliter le débogage. Lisez les documents pour cURL et http_build_query pour voir ce que tout attend et fait. Par exemple, l'extension cURL peut faire beaucoup de travail pour vous si vous passez un tableau dans curl_setopt pour CURLOPT_POSTFIELDS.
+0

Merci beaucoup! 1 et 2 ont fait l'affaire. Je suis itératif par la façon dont je suis à cause de la façon géniale dont la base de données contient des informations (et de la façon dont j'ai dû le faire). Appréciez l'aide, le cURL fonctionne au moins ... Je ne sais pas si la troisième partie reçoit encore, mais je sais que le cURL fonctionne. –