HTML form:GET・POSTとaction・nameをPHPで確認
HTML <form>は入力コントロールをフォームにまとめてサーバーに送信します。actionは処理先アドレスを選択し、methodは送信方法を選択します。GETは値をURLクエリに入れ、POSTはリクエストボディに入れますが、POST自体はデータを暗号化しません。
action、method、nameの役割
action はブラウザが要求するアドレスです。省略した場合、フォームは現在のドキュメントのアドレスに送信されます。デフォルトのメソッドは get で、状態を変更しない検索や取得に適しています。作成や更新には一般的に post を使用し、サーバー側での認証、認可、およびリクエストの検証が行われます。
コントロールの id は、ドキュメント内でそれを識別し、そのラベルと関連付けます;name は送信されるデータのキーです。名前のない通常の入力、disabledで無効化されたコントロール、チェックされていないラジオボタンやチェックボックスは省略されます。フォームを入れ子にしないでください。
完全な練習フォームを準備してください
受信サーバーを確認するには、単にHTMLファイルを開くだけでは不十分です。PHP 8.x がインストールされたローカル環境に空の練習用フォルダーを作成し、以下の2つのファイルをそのフォルダーに保存してください。この例は受信した値を表示しますが、データを保存したり、メールを送信したり、アカウントを変更したりすることはありません。
最初のファイルはindex.htmlです。2番目の送信ボタンはformmethodを使用しているため、同じ入力をGETおよびPOSTで比較できます。
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>GETとPOSTのフォーム練習</title>
</head>
<body>
<h1>リクエスト方式の比較</h1>
<form action="receive.php" method="get">
<p>
<label for="query">検索語</label>
<input type="text" id="query" name="q" maxlength="80" required>
</p>
<p>
<label for="note">メモ</label>
<textarea id="note" name="note" maxlength="300"></textarea>
</p>
<button type="submit">GETで確認</button>
<button type="submit" formmethod="post">POSTで確認</button>
<button type="reset">初期化</button>
</form>
</body>
</html>
2番目のファイルはreceive.phpです。リクエストメソッド用の入力コレクションから文字列を読み取り、配列や無効な長さの値を拒否します。出力はHTMLコンテキストに応じてエスケープされます。
<?php
declare(strict_types=1);
header('Content-Type: text/html; charset=UTF-8');
$method = $_SERVER['REQUEST_METHOD'];
if ($method !== 'GET' && $method !== 'POST') {
header('Allow: GET, POST');
http_response_code(405);
exit('対応していないリクエスト方式です。');
}
$input = $method === 'POST' ? $_POST : $_GET;
$q = $input['q'] ?? '';
$note = $input['note'] ?? '';
if (!is_string($q) || !is_string($note) || trim($q) === '' ||
strlen($q) > 320 || strlen($note) > 1200) {
http_response_code(400);
exit('検索語とメモの文字列を確認してください。');
}
function h(string $text): string {
return htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
?>
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>受信結果</title>
</head>
<body>
<h1>受信結果</h1>
<p>リクエスト方式: <?= h($method) ?></p>
<p>検索語: <?= h($q) ?></p>
<p>メモ: <?= h($note) ?></p>
<p><a href="index.html">フォームに戻る</a></p>
</body>
</html>
HTML maxlength とサーバーの長さチェックは異なる基準を使用します。このサーバーの例では strlen でバイトを制限しています; 完全な文字数ポリシーを再現しているわけではありません。重要な入力はサーバーの実際のアプリケーションルールに従って検証してください。
例を実行し、GET と POST を比較してください。
両方のファイルが含まれるフォルダでこのコマンドを実行し、http://127.0.0.1:8000/index.html を開きます。php が見つからない場合は、インストールパスと PATH 設定を確認してください。PHP の組み込みサーバーはローカル開発と練習のためであり、本番用ではありません。
php -S 127.0.0.1:8000
- 空の検索語での送信は必須バリデーションによりブロックされます。
- 検索語としてHTMLを、ノートとしてPracticeを入力し、GETで送信します。URLクエリにはqとnoteが含まれ、レスポンスにはメソッドとしてGETが表示されます。
- フォームに戻り、同じ値を入力してPOSTで送信します。入力値はURLに追加されず、レスポンスにはPOSTが表示されます。開発者ツールではNetworkパネルでボディを確認できます。
- メモに
<b>Practice</b>を入力して送信すると、太字ではなくタグを含む文字列として表示されます。終了後はターミナルでCtrl+Cを押してサーバーを停止します。
送信方法、セキュリティ、および一般的な失敗を確認します
POSTの内容は開発者ツールやサーバーで引き続き表示されるため、データを転送中に保護するにはHTTPSが必要です。GETクエリはアドレス、履歴、ログに残る可能性があるため、パスワードなどの機密情報を入れないでください。HTMLの必須入力やmaxlengthチェックはユーザーを助けますが、サーバー側の検証に代わるものではありません。
ファイルアップロードフォームには一般的にmethod="post"とenctype="multipart/form-data"が必要です。デフォルトのエンコーディングはapplication/x-www-form-urlencodedです。実際のファイル処理には、この文字列入力演習を超えて、サイズ、タイプ、保存場所のチェックも必要です。
404レスポンスの場合、相対アクションパスとファイル名を確認してください。値が欠落している場合は、名前とサーバーが正しいリクエストメソッドに対してコレクションを読み取っているかを確認してください。通常のアクションボタンには誤って送信されないようにtype="button"を明示的に設定してください。リセットは常にフィールドを空にするのではなく、元のデフォルトを復元します。MDNフォームリファレンスおよびPHPフォームチュートリアルを参照してください。




