inputやselect、checkboxなどのフォームをpostしてみます。
サンプルコード
index.html
formを送信するページです。
formのmethodの指定にはgetとpostがありますが、今回はpostを使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | < form action = "thanks.php" method = "post" > < dl class = "form-item" > < dt >名前</ dt > < dd > < input type = "text" name = "name" /> </ dd > </ dl > < dl class = "form-item" > < dt >選択</ dt > < dd > < select name = "select" > < option value = "" >選択</ option > < option value = "セレクト1" >セレクト1</ option > < option value = "セレクト2" >セレクト2</ option > < option value = "セレクト3" >セレクト3</ option > </ select > </ dd > </ dl > < dl class = "form-item" > < dt >チェック</ dt > < dd > < label >< input type = "checkbox" name = "check[]" value = "チェック1" />チェック1</ label > < label >< input type = "checkbox" name = "check[]" value = "チェック2" />チェック2</ label > < label >< input type = "checkbox" name = "check[]" value = "チェック3" />チェック3</ label > </ dd > </ dl > < dl class = "form-item" > < dt >ラジオ</ dt > < dd > < label >< input type = "radio" name = "radio" value = "ラジオ1" />ラジオ1</ label > < label >< input type = "radio" name = "radio" value = "ラジオ2" />ラジオ2</ label > < label >< input type = "radio" name = "radio" value = "ラジオ3" />ラジオ3</ label > </ dd > </ dl > < dl class = "form-item" > < dt >テキストエリア</ dt > < dd > < textarea name = "textarea" cols = "30" rows = "10" ></ textarea > </ dd > </ dl > < div class = "form-btn" > < input type = "submit" value = "送信" /> </ div > </ form > |
checkboxのように1つのnameに対してvalueが複数ある場合、name属性の値の最後に「[]」を付ける必要があります。
こうすると、checkboxのvalueが配列として受け取れるようになります。
thanks.php
postしたformを受け取るページです。
postで送信したformの値は$_POSTで取得できます。
連想配列の形で格納されているので、$_POST[‘name’]のようにすることで、各nameでpostしたvalueを取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <?php $name = htmlspecialchars( $_POST [ 'name' ]); $mail = htmlspecialchars( $_POST [ 'mail' ]); $select = htmlspecialchars( $_POST [ 'select' ]); $checks = $_POST [ 'check' ]; $radio = htmlspecialchars( $_POST [ 'radio' ]); $textarea = htmlspecialchars( $_POST [ 'textarea' ]); ?> <!DOCTYPE html> <html lang= "ja" > <head> ・ ・ ・ </head> <body> <dl class = "form-item" > <dt>名前</dt> <dd><?php echo $name ; ?></dd> </dl> <dl class = "form-item" > <dt>選択</dt> <dd><?php echo $select ; ?></dd> </dl> <dl class = "form-item" > <dt>チェック</dt> <dd> <?php if ( $checks != null) { foreach ( $checks as $check ) { echo htmlspecialchars( $check ) . ' ' ; } } ?> </dd> </dl> <dl class = "form-item" > <dt>ラジオ</dt> <dd><?php echo $radio ; ?></dd> </dl> <dl class = "form-item" > <dt>テキストエリア</dt> <dd><?php echo str_replace ( "\r\n" , '<br />' , $textarea ); ?></dd> </dl> </body> </html> |
今回のformのようにユーザーが入力した内容を表示する場合、HTMLタグが含まれていると文字列ではなくタグとして出力されてしまいます。
そのため、出力前にhtmlspecialchars()を使って変換する対応が必要になります。
checkboxの値は配列で格納されているので、foreachを使って出力しています。
textareaはそのままだと改行して表示されないので、str_replace()などの文字列を置換する関数を使い、出力前に改行タグを追加する処理が必要です。
【参考サイト】
- PHPプログラム解説&講座 Lesson8-4 ~チェックボックスから受け取り~ ぷろぐらむるーむ
- PHP: htmlspecialchars – Manual
- PHPで改行を削除する方法: 小粋空間
コメントが承認されるまで時間がかかります。