基本的に、私はできないと思いますが、間違っていると証明されることは非常にうれしいです。
PHPでHTMLメニューを動的に生成し、現在のユーザーごとに1つのアイテムを追加し、<a href="process_user.php?user=<user>>
のようなものを取得しますが、GETよりもPOSTを優先します。
クリック可能なHREFリンクからGETするのではなく、POSTパラメーターとして情報を渡す方法はありますか?
更新:申し訳ありませんが、JSの使用は許可されていません。
更新の更新:@Robが「アンカーの代わりにボタンを使用し、ボタンをリンクのようにスタイルするだけで、同じフォーム内の非表示フィールドに値を設定できます。 POST経由で送信されます」
JavaScriptを必要としない、リンクとしてスタイル設定されたフォームを使用できます。
<form action="/do/stuff.php" method="post">
<input type="hidden" name="user_id" value="123" />
<button>Go to user 123</button>
</form>
CSS:
button {
border: 0;
padding: 0;
display: inline;
background: none;
text-decoration: underline;
color: blue;
}
button:hover {
cursor: pointer;
}
URLのパラメーターはGETパラメーターであり、要求本文が存在する場合、POSTデータです。したがって、基本的な前提は定義上、達成不可能です。
アクションに基づいて、POSTを使用するか、GETを使用するかを選択する必要があります。 破壊的アクション、つまりサーバーの状態を永続的に変更(削除、追加、編集)するものは、常にPOSTリクエストによって呼び出される必要があります。純粋な「情報検索」は、不変のURL(つまりGETリクエスト)を介してアクセスできる必要があります。
POSTリクエストを作成するには、<form>
を作成する必要があります。 could代わりにPOSTリクエストを作成するためにJavascriptを使用しますが、Javascriptを基本的なものに使用することはお勧めしません。送信ボタンをリンクのように見せたい場合は、通常の送信ボタンを使用して通常のフォームを作成し、CSSを使用してボタンのスタイルを変更するか、Javascriptを使用してボタンをフォームを送信するリンクに置き換えることをお勧めしますJavascriptを使用する(目的の動作をより良く再現するものに応じて)。 プログレッシブエンハンスメントの良い例でしょう。
リンクがクリックされると、リンクにajax投稿リクエストを実行させることができます。
JQueryの場合:
$('a').click(function(e) {
var $this = $(this);
e.preventDefault();
$.post('url', {'user': 'something', 'foo': 'bar'}, function() {
window.location = $this.attr('href');
});
});
また、リンクにjavascriptを使用してPOSTフォームを送信させることもできます。
<form action="url" method="post">
<input type="hidden" name="user" value="soemthing" />
<a href="#">CLick</a>
</form>
<script>
$('a').click(function(e) {
e.preventDefault();
$(this).parents('form').submit();
});
</script>
私の実装も共有したいと思います。ただし、JavaScriptが必要です。
<form action="./index.php" id="homePage" method="post" style="display: none;">
<input type="hidden" name="action" value="homePage" />
</form>
<a href="javascript:;" onclick="javascript:
document.getElementById('homePage').submit()">Home</a>
これの良い点は、GETリクエストとは異なり、URLのパラメーターを表示しないことです。これはより安全です。
いいえ、できません。 POSTの定義を読むことをお勧めします: http://en.wikipedia.org/wiki/POST_%28HTTP%29
またはこのページ: http://en.wikipedia.org/wiki/GET_%28HTTP%29#Request_methods
まず、免責事項:POSTとURLパラメーターとの結婚は素晴らしい考えだとは思いません。他の人が提案したように、ユーザー情報を渡すために隠しフォームを使用する方が良いでしょう。
しかし、質問により、PHPがそのようなケースをどのように処理しているかに興味がありました。理論的には可能であることが判明しました。ここに証拠があります:
post_url_params.html
<!DOCTYPE html>
<html>
<head></head>
<body>
<form method="post" action="post_url_params.php?key1=value1">
<input type="hidden" name="key2" value="value2">
<input type="hidden" name="key3" value="value3">
<input type="submit" value="click me">
</form>
</body>
</html>
post_url_params.php
<?php
print_r($_POST);
print_r($_GET);
echo $_SERVER['REQUEST_METHOD'];
?>
出力
Array ( [key2] => value2 [key3] => value3 )
Array ( [key1] => value1 )
POST
PHPはURLパラメーターを$ _GET変数に保存し、フォームデータを$ _POST変数に保存することがはっきりとわかります。ただし、これは非常にPHPおよびサーバー固有のものであり、間違いなく依存するものではないでしょう。
これは、phpスクリプトが非表示フィールドを持つ各エントリのフォームを生成し、hrefがjavascriptを使用してフォームをポストする場合に機能します。