私はこのようなものが欲しい:
<a href="http://localhost/index.php?get=abc&post=cde&post=efg">link</a>
ハイパーリンクのGETおよび2xPOST。どうやってやるの?何も働きたくない
PHPにGET配列があり、それらのGET変数を提供する正しいURLにつながるリンクを生成したいと思います。
同じ名前のGET変数を2つ持つことはできません。次のように、それらを配列に配置できます。
<a href="http://localhost/index.php?get=abc&post[]=cde&post[]=efg">link</a>
明確にするために、これはまだGETリクエストであり、リンクは通常POSTリクエストを生成できません。また、通常ではないことを達成しようとする必要があります。
編集:OPのcalrificationに答えるため。
$_GET
配列があり、そこに到達するためのリンクを生成したい場合は、次を使用できます。http_build_query()
HTTPの世界でGETとPOSTが何を意味するのか理解していないと思います。URLのクエリ文字列に入力するアイテムはすべてGETパラメータであり、同じ名前の2つを持つことはできません。POSTパラメータは、URLのクエリ文字列としてではなく、リクエストの一部として送信されます。
GETとPOSTはhttp操作です。
?を使用して値を送信する URLの区切り文字は異なりますが、関連しています。例えば:
foo.com/page.php?val1=1&val2=2
値はクエリ文字列値と呼ばれます。
GET操作の場合、値はクエリ文字列値として送信されます。POST操作の場合、値はPOSTリクエストの本文で送信されます。これが、大量のデータがサーバーに送信されるときにPOSTを使用する必要がある理由です。(クエリ文字列には最大長がありますが、HTTPリクエストにはありません。)
クエリ文字列値を含むURLに対してPOST操作を実行できます。これはAjaxリクエストでより一般的ですが、フォームで実行することもできます。action
URLをindex.php?val1=1&val2=2
フォームの(追加の)値がhttp本文として送信されるようなものに設定するだけです。method="post"
フォームに設定することを忘れないでください。
この例では、適切にエスケープすることを含め、クエリ文字列を自分で作成する必要があることに注意してください。
クエリ文字列値で値の名前を繰り返す
通常、これにより両方の値が送信されますが、サーバーは変数を上書きし、最後の値のみをクライアントソフトウェアに提示することになります。
したがって、次のようなURLを使用する場合
<a href="http://localhost/index.php?get=abc&post=cde&post=efg">
//phpとほとんどのサーバーサイドフレームワークによって次のようにデコードされます
gettoabcを設定します
投稿をcdeに設定
投稿をefgに設定
結果:2つの変数、getとpost
HTTP標準には、同じ名前の2つのクエリ文字列パラメータを送信できないということは何もありません。ただし、$_GETを使用してこれらの値を取得することはできません。$_GETは最後のものをピックアップします。代わりに、$ _SERVER['QUERY_STRING']を手動で解析する必要があります。それはそれほど難しいことではなく、PHPがサードパーティのツールによって生成されたURLパターンを処理しなければならないときに何度もそれを行いました。本当に気が向いている場合は、クエリ文字列解析ルーチンで$ _GETメンバーを配列として生成し、そのメンバーのインスタンスが複数検出された場合に使用できます。