2009-04-26 16 views
2

私はフォームを吐き出すPHPファイルを持っています。私は、このPHPファイルをサーバー側(現在は "include"を使用)と呼んで、それを記入して送信したいと考えています。仮想PHPフォーム

これは実際のフォームPHPを仲介する必要がないので、データが独自のPHPファイルで理解できるようにプレゼンテーションレイヤーを処理するだけです。

これは可能ですか?フォーム "method"はPOSTです。

答えて

4

フォームに記入してinclude()を使用して送信することはできません。フォームを送信するということは、HTTPをWebサーバーに送信する必要があることを意味します。そのため、探しているのはPOSTリクエストをエミュレートすることです。 PHPにはこれを行うためのCURLという人気のあるライブラリがあります。あなただけのフォームを提出したかのように

$ch = curl_init('http://www.example.com/yourform.php'); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'var1=value1&var2=value2&whatever=stuff'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); 

$outputは、ページ出力が含まれます:

はこのような何かを試してみてください。

+0

このCURL要求は同じセッション内で実行されますか? (現在のPHPセッションが使用されます) そして、同じ "環境"内で実行されますか? (グローバル変数にアクセスできます)? –

+1

いいえセッションを伝播する場合でも、CURL要求にCookieを追加できます。 私はあなたが少し問題を混乱させるかもしれないと思います。 PHPスクリプト内のフォームをPHPスクリプトに送信することはできません。フォームはPHPスクリプト内には存在しません... Webページ上にのみ存在します。フォームが提出されると、PHPはそれを一連の変数($ _POST配列)として読み込みます。 フォームを同じPHPスクリプトの中からスクリプトに提出することについて話しているのであれば、必要な処理を行うhandleForm()関数を記述し、$ _POST配列を手動で設定して関数を実行してください。 – zombat

1

あなた自身にフォームを提出しますか? CURLのようなサウンドがこれを行う方法になりますが、別のHTTPセッションを作成することになります。それ以外の場合は、POST変数をエミュレートして、外部スクリプトからフォームのアクションを呼び出すことができます。

+0

を呼び出します?)POSTデータの配列ですが、フォームのアクションをどのように呼び出すのですか?どのようなPHP関数を使用できますか? –

1

あなたのコメントに基づいて、現在のリクエスト内でこのフォームの提出をシミュレートしようとしているようです。私はあなたがcURLでそれを行うことができるかどうかはわかりません - 私はあなたのPHPスクリプトの各呼び出しが独立して実行されると思うので、スクリプトの現在の実行からのグローバル変数はcURL要求を処理する実行によって共有されません。

私は、これがフォームの送信を処理するための関数を作成することです扱うだろう方法は:

function handle_form($postdata) { 
    // whatever you would normally do, just replace $_POST with $postdata 
} 

// to handle a normal form submission: 
handle_form($_POST); 

この方法で、あなただけのフォームフィールドを持つ配列を作成することで、フォームの送信をシミュレートすることができます値:

$formvals['fieldname1'] = 'fieldvalue1'; 
$formvals['fieldname2'] = 'fieldvalue2'; 

と私は(おそらく読み取り専用に充填に関する部分を理解

handle_form($formvals);