HTMLフォームの情報をPOSTメソッドで送信し、送信されたデータをPHPスクリプトで取得しHTMLに埋め込み表示してみます。フォームの各フィールドははformタグ中でinput、select、textareaタグ等を用いて指定します。特にinputタグは下表の様にtype属性が色々あります。
inputタイプ | type属性 |
---|---|
テキスト入力 | type="text" |
パスワード入力 | type="password" |
ラジオボタン | type="radio" |
チェックボックス | type="checkbox" |
送信ボタン | type="submit" |
ボタン | type="buttun" |
フォームデータの送信先はformタグのaction属性で指定します。また、そのときのリクエストメソッドの指定はformタグのmethod属性で指定し、ここではPOSTを用いるのでmethod=”post”と記述します。POSTはGETメソッドと異なり特に文字制限はありません。
ソースコード
form_test.html
< html > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" > < title >HTMLフォーム情報の送信テスト</ title > </ head > < body > < form action = "show_form_data.php" method = "post" > ID:< input type = "text" name = "user_id" />< br /> PASS:< input type = "password" name = "pass" />< br /> 性別:< input type = "radio" name = "sex" value = "1" checked />男性 < input type = "radio" name = "sex" value = "2" />女性< br /> 学年:< select name = "grade" > < option value = "1" selected>1年生</ option > < option value = "2" >2年生</ option > < option value = "3" >3年生</ option > < option value = "4" >4年生</ option > </ select >< br /> 所有デジタル機器: < input type = "checkbox" name = "have_dig[0]" value = "1" />PC < input type = "checkbox" name = "have_dig[1]" value = "1" />Cell< br /> コメント:< br />< textarea name = "comment" cols = "30" rows = "5" ></ textarea >< br /> < input type = "submit" value = "送信" /> </ form > </ body > </ html > |
フォームデータは同ディレクトリに設置したshow_form_data.phpファイルに送信しています。
show_form_data.php
<?php // 変数の初期化 $user_id = "" ; $pass = "" ; $sex = "1" ; $grade = "1" ; $have_dig = array ( "0" , "0" ); $comment = "" ; // POSTリクエストがあった時 if ( $_SERVER [ "REQUEST_METHOD" ] == "POST" ) { $user_id = htmlspecialchars( $_POST [ "user_id" ], ENT_QUOTES); $pass = htmlspecialchars( $_POST [ "pass" ], ENT_QUOTES); $sex = $_POST [ "sex" ]; $grade = $_POST [ "grade" ]; if (isset( $_POST [ "have_dig" ])) { foreach ( $_POST [ "have_dig" ] as $key => $value ) { $have_dig [ $key ] = $value ; } } $comment = htmlspecialchars( $_POST [ "comment" ], ENT_QUOTES); } else { echo "フォームページからアクセスしてください。" ; exit (1); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > <html> <head> <meta http-equiv= "Content-Type" content= "text/html; charset=UTF-8" > <title>HTMLフォームのPOSTの受信テスト</title> </head> <body> 送信されたデータは、<br /> ID:<?= $user_id ?><br /> PASS:<?= $pass ?><br /> 性別:<? echo $sex ? "男性" : "女性" ; ?><br /> 学年:<?= $grade ?>年生<br /> 所有デジタル機器: <? if ( $have_dig [0] == 1) echo "PC" ; if ( $have_dig [1] == 1) echo ( $have_dig [0] == 1 ? "、" : "" ) . "Cell" ; ?><br /> コメント:<?= $comment ?><br /> </body> </html> |
POSTリクエストでshow_form_data.phpへアクセスした場合はexit関数でスクリプトを終了します(→PHP: exit – Manual)。
htmlspecialchars関数で特殊文字をエスケープします(→PHP: htmlspecialchars – Manual)。今回はPOSTメソッドに関する練習用スクリプトなのでバリデーション処理は入れていませんが、実際はセキュリティ対策と合わせて色々フィルタするなり、リダイレクトで別ページに誘導するなりの処理が必要です。最近はこの辺の処理をフレームワークで上手くラップしてくれるのでかなり楽になっています。
あと、余談ですがforeach文では操作対象の配列のコピーを作成して、コピーに対して処理していきます。
コメント
[…] PHP: フォーム情報の送信・受信 – POSTメソッド […]