2010-09-27 7 views
1

J'ai cette demande curl ci-dessous, qui a été résolue avec succès dans un autre message. À l'heure actuelle, mon PHP semble fonctionner à travers ce code sans aucune erreur, passe à la partie suivante de l'instruction IF et envoie l'email de confirmation. Il ne met tout simplement pas à jour la base de données comme il se doit à partir du service Web. Je vais devoir envoyer un courriel au créateur du service Web si cela ne fonctionne pas, mais je veux juste être sûr que le code est assez solide avant de le faire. Quelqu'un a des idées? Voici le code:PHP HTTP Publier au service REST ne pas mettre à jour la base de données

$url = 'http://127.0.0.1:85/AccountCreator.ashx'; 


$curl_post_data = array(
    'companyName' =>urlencode($companyName), 
    'mainContact' =>urlencode($mainContact), 
    'telephone1' =>urlencode($telephone1), 
    'email' => urlencode($email), 
    'contact2' => urlencode($contact2), 
    'telephone2' => urlencode($telephone2), 
    'email2' => urlencode($email2), 
    'package' => urlencode($package) 
    ); 

foreach($curl_post_data as $key=>$value) {$fields_string .=$key. '=' .$value.'&'; 
} 
rtrim($fields_string, '&'); 
//die("Test: ".$fields_string); 

$ch = curl_init(); 

curl_setopt ($ch, CURLOPT, $url); 
curl_setopt ($ch, CURLOPT_POST, count($curl_post_data)); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, $fields_string); 

$result = curl_exec($ch); 

curl_close($ch); 

Répondre

1

Premièrement, quel est le problème? Il serait plus facile de résoudre le problème si vous expliquiez exactement l'échec du code. En second lieu, il y a quelques choses étranges que vous faites dans ce code:

Je ne vois pas pourquoi vous faites

curl_setopt ($ch, CURLOPT_POST, count($curl_post_data)); 

CURLOPT_POST nécessite un paramètre booléen (true/false). Vous devez le définir sur true.

Deuxièmement, vous n'avez pas besoin d'encoder CURLOPT_POSTFIELDS manuellement. Faire un tableau et laisser cURL traiter avec elle en interne:

$curl_post_data = array(
    'companyName' =>$companyName, 
    'mainContact' =>$mainContact, 
    'telephone1' =>$telephone), 
    'email' => $email, 
    'contact2' => $contact2, 
    'telephone2' => $telephone2, 
    'email2' => $email2, 
    'package' => $package 
); 

Ceux-ci pourraient ne pas résoudre le problème, mais ils peuvent aider.

+0

Oui. Cela peut ne pas faire de différence (il est probable que le nombre est converti en un booléen, donc tout entier positif est interprété comme vrai), mais il se peut que les valeurs non booléennes soient ignorées. – lonesomeday

+0

Merci pour la réponse. Je l'ai changé pour vrai, et je vais tester. – 109221793

+0

Salut lonesomeday, vous aviez raison sur l'encodage, mon adresse e-mail ne s'affichait pas correctement avant, mais c'est maintenant que j'ai supprimé cela. J'ai mis à jour mon message pour énoncer le problème. Mon problème est que ce morceau de code devrait appeler un service Web pour créer un nouvel utilisateur dans la base de données, mais ce n'est pas fait. Cependant, je n'ai pas vu le code pour le service web car il a été écrit par quelqu'un d'autre, donc je ne sais pas où se situe le problème. C'est pourquoi je voulais éliminer le code ci-dessus comme un problème – 109221793

1

L'option CURLOPT_POSTFIELDS accepte un tableau associatif de données POST. Probablement préférable d'utiliser celui-là plutôt que de construire la chaîne de requête vous-même afin que vous ayez quelqu'un d'autre à blâmer quand il explose.

PHP Manual:

Les données à passer lors d'une opération HTTP "POST" . Pour publier un fichier, ajoutez un nom de fichier à l'aide de @ et utilisez le chemin d'accès complet. Cela peut être passé comme une chaîne urlencoded comme « para1 = val1 & para2 = val2 & ... » ou comme un tableau avec le nom du champ des données clés et champ comme valeur. Si la valeur est un tableau , l'en-tête Content-Type sera défini sur multipart/form-data.

Questions connexes