2009-08-21 6 views
1

J'essaye actuellement d'obtenir un script pour soumettre un formulaire à une page qui est externe à mon site mais enverra également les réponses données par le client à moi. La fonction mail() a bien fonctionné pour le mail ... mais comment puis-je prendre ces valeurs et les soumettre aussi à la page externe?Soumettre un formulaire et l'envoyer par courriel avec PHP

Merci pour votre aide!

Répondre

2

Si vous obtenez le formulaire pour soumettre à votre script, peut peut d'abord envoyer l'e-mail, puis utiliser cURL pour faire une requête HTTP à la page externe, POSTing les valeurs que vous souhaitez envoyer. Cela ne fonctionnera pas si le site externe se fie à des cookies que l'utilisateur a, parce que la demande est faite à partir de votre serveur web.

par exemple.

<?php 
//data to post 
$data = array('name' => 'tom', 'another_form_field'=>'a'); 

//external site url (this should be the 'action' of the remote form you are submitting to) 
$url = "http://example.com/some/url"; 

$curl = curl_init($url); 

curl_setopt($curl, CURLOPT_POST, 1); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 

//make curl return the content returned rather than printing it straight out 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 

$result = curl_exec($curl); 

if ($result === false) { 
    //curl error 
} 

curl_close($curl); 

//this is what the webserver sent back when you submitted the form 
echo $result; 
+0

Haine à demander, mais comment j'irais à ce sujet? –

+0

Incroyable, l'exemple a fonctionné comme un rêve, merci! –

-2

Pour POST, vous devrez définir la page externe comme l'action de traitement:

<form action="http://external-page.com/processor.php" method="POST"> 
    <!-- Form fields go here ---> 
</form> 

Si c'est GET, vous pouvez changer la méthode de formulaire pour GET, ou créer une chaîne de requête personnalisée:

<a href="http://external-page.com/processor.php?field1=value1&field2=value2">submit</a> 

Edit: Je viens de réaliser que vous voulez probablement envoyer ces à partir de votre classe de traitement de PHP. Dans ce cas, vous pouvez utiliser définir l'en-tête de l'emplacement avec la chaîne de requête personnalisée:

header("Location: http://external-page.com/processor.php?field1=value1&field2=value2"); 
+0

Non, ce n'est pas le problème. Actuellement, le formulaire fait déjà ci-dessus pour envoyer au formulaire de soumission qui a la fonction de courrier à l'intérieur. Alors, comment pourrais-je le soumettre à la page externe aussi? –

0

Vous pouvez envoyer un HTTP personnalisé POST demande à partir du script que vous utilisez pour envoyer l'e-mail. Essayez fsockopen pour établir la connexion, puis envoyez votre propre requête HTTP contenant les données que vous venez de recevoir du formulaire.

Édition:

Un peu plus spécifique. L'exemple this vous montre comment envoyer une requête HTTP POST simple. graines juste avec votre tableau $_POST comme ceci:

do_post_request(your_url, $_POST); 

et qui devrait faire l'affaire. Ensuite, vous pouvez éventuellement évaluer la réponse pour vérifier si tout s'est bien passé.

+0

Cela ne semble pas avoir fonctionné ... –

0

Vous allez devoir parcourir la source du formulaire externe pour déterminer les champs HTML name des champs pertinents et si le formulaire est soumis en utilisant GET ou POST.

Si le formulaire utilise la méthode GET, vous pouvez facilement générer une chaîne de requête qui suit la même forme que la forme réelle: http://example.com/form.php?name1=value1&name2=value2 ...

Si, d'autre part, la forme utilise la méthode POST, vous Je vais devoir générer une requête HTTP POST en utilisant quelque chose comme la bibliothèque cURL (http://us2.php.net/curl).

Questions connexes