2 votes

Comment faire $_POST dans une boucle

Mon hébergeur actuel ne permet pas l'accès à mysql à distance, je dois donc le contourner en faisant communiquer le script1 sur le serveur1 avec le script2 sur le serveur2. J'essaie d'envoyer des données de post à script2, qui prend ensuite ces données et les met dans mysql. Pour que ma question reste simple, j'ai réduit le code à ceci :

script1

for ( $counter = $counternumbernao; $counter <= $amountofcomments; $counter += 1) 
{
echo'
<form action="http://server2.x.com/form-receive.php" method="post">
<INPUT TYPE=HIDDEN NAME="comment_content" value=$comment_content>
<INPUT TYPE=HIDDEN NAME="comment_date" value=$comment_date">
<input type="submit" />
</form>
';
}

Comment puis-je modifier ce code, de sorte que chaque fois que la boucle se produit, elle envoie automatiquement les données $_POST à script2, qui les met ensuite dans mysql ? Je n'ai pas pensé qu'il était nécessaire d'inclure script2 car il n'est pas important pour ce problème.

3voto

GordyD Points 2722

Pourquoi ne pas utiliser cURL pour envoyer les données FORM au serveur2. Il vous permet d'envoyer des requêtes HTTP. Essayez le script suivant :

$url = "http://server2.x.com/form-receive.php";
$postvars = "comment_content=$comment_content&comment_date=$comment_date";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST ,1);
curl_setopt($ch, CURLOPT_POSTFIELDS ,$postvars);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1); 
curl_setopt($ch, CURLOPT_HEADER ,0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1);  
$data = curl_exec($ch);

2voto

Jack Murdoch Points 1986

Pour que cela se produise automatiquement sans que l'utilisateur final en soit conscient, le meilleur moyen est d'utiliser CURL (http://php.net/manual/en/book.curl.php).

Voici un exemple de ce que cela donnerait :

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://server2.x.com/form-receive.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);

$data = array(
    'foo' => 'bar',
    // Put data from $_POST here
);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

1voto

rineez Points 710

N'oubliez pas que le simple fait de faire écho à un formulaire n'entraînera jamais l'envoi des données du formulaire à un serveur. Tout ce qui est affiché en écho dans votre code php ne sera envoyé qu'au navigateur web (ou à tout autre agent utilisateur) qui a demandé la page php.

Je vote pour les réponses suggérant cURL.

Lorsque vous utilisez cURL comme dans l'exemple de Jack Murdoch, la commande cURL elle-même fonctionne comme un agent utilisateur HTTP et envoie une requête POST à http://server2.x.com/form-receive.php. Ainsi, dans form-receive.php, vous n'aurez qu'à écrire un programme php normal pour lire les données du tableau $_POST et lire/écrire dans la base de données. De cette façon, vous allez réellement construire un webservice sur le serveur 2.

-1voto

Tim Fountain Points 21921

Quelque chose comme ça :

echo '<form action="http://server2.x.com/form-receive.php" method="post">';
for ( $counter = $counternumbernao; $counter <= $amountofcomments; $counter += 1) 
{
    echo'
    <INPUT TYPE=HIDDEN NAME="comment_content[]" value=$comment_content>
    <INPUT TYPE=HIDDEN NAME="comment_date[]" value=$comment_date">
    <input type="submit" />
    ';
}
echo '</form>';

Le formulaire de réception script recevra alors des tableaux de données dans $_POST['comment_content'] et $_POST['comment_date'].

-1voto

Arek Jablonski Points 339

Essayez d'utiliser JQuery et la méthode post() (http://api.jquery.com/jQuery.post/) Il suffit ensuite de générer un tableau JS avec tous les enregistrements, puis de l'exécuter dans une boucle et ENJOY ! Cette solution sera probablement plus rapide qu'un bouclage/rafraîchissement uniquement en PHP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X