概要と目標
データの受け取り方法を理解し、
データの送受信をやってみる。
フォームから送信されたデータの受取方法や、安全な出力方法を習得し、
消費税計算機を作れるようになろう。
フォームから送信されたデータの受取方法や、安全な出力方法を習得し、
消費税計算機を作れるようになろう。
データの送信はHTMLのみで出来る。GETまたは、POSTで送信する。
form要素<form action="送信先" method="get(初期値) または post">
...
</form>
送信先: 空の場合は、自分自身のファイルに送信する
| GET | POST | |
|---|---|---|
| 送信方法 |
URLの末尾にデータを付加 |
HTTPのリクエストボディ部分にデータを不可 |
| メリット | フォームを利用せずにデータを送信できる | データの中身が見えない |
| デメリット |
|
送信後にデータは消える |
| 主な利用用途 |
|
|
いつでもデータにアクセスしたい時は GET。POST を使う。
h1要素の下に、「get」で送信する入力フォームを作成
<form action="receive.php">
<p><label>お名前: <input type="text" name="your_name"></label></p>
<p><input type="submit" value="送信"></p>
</form>
get」は、「$_GET」、post」は、「$_POST」。
データの受け取りは、送信したフォームの method属性 に合わせて、$_GETまたは、$_POSTというPHPが予め用意している変数を使う。
このようにPHPが予め用意している変数のことを スーパーグローバル変数と呼ぶ。
スーパーグローバル変数の変数名は、「_」から始まり全て大文字になっている。
// GET(クエリ情報)の受け取り
$_GET[name属性の属性値]
// POST(ポストデータ)の受け取り
$_POST[name属性の属性値]
h1要素の下に、$_GETで受け取った値を表示
<?php
// GETの受け取り
echo 'こんにちは'. $_GET['your_name'] .'さん';
?>
form要素 に method="post"属性 を追加
<form action="receive.php" method="post">
<p><label>お名前: <input type="text" name="your_name"></label></p>
<p><input type="submit" value="送信"></p>
</form>
$_GET での受け取り部分をコメントにし、$_POSTで受け取った値を表示
<?php
// GETの受け取り
// echo 'こんにちは'. $_GET['your_name'] .'さん';
// POSTの受け取り
echo 'こんにちは'. $_POST['your_name'] .'さん';
?>
ただし、上記のコードにはXSSという脆弱性がある。
このままでは、下記のコードを入力するときちんとJavaScriptが実行されます。
<script>alert('XSS');</script>
JavaScriptが実行できるということは、JavaScriptで出来ることはなんでも出来ます。
ユーザーが入力した内容はそのまま出力しない。htmlspecialchars という関数を使うことで無害化してから出力できる。
htmlspecialchars関数 ・・・ HTMLの特殊文字を文字参照に変換する関数htmlspecialchars(無害化する文字列, クォートなどの扱い, 文字コード)
省略可
引数の詳細はPHPマニュアルを参照
$_POSTによる受け取り部分をコメントにし、htmlspecialchars() 関数を使った$_POSTの出力を追記
<?php
// GETの受け取り
// echo 'こんにちは'. $_GET['your_name'] .'さん';
// POSTの受け取り
// echo 'こんにちは'. $_POST['your_name'] .'さん';
// XSS対策
echo 'こんにちは'. htmlspecialchars( $_POST['your_name'], ENT_QUOTES, 'utf-8' ) .'さん';
?>
「training」フォルダ内の「index.html」と「receive.php」を開き
"post" <form action="receive.php" method="post">
<dl>
<dt><label for="plice">金額</label></dt>
<dd>
¥ <input type="text" name="price" id="plice">
</dd>
<dt>消費税</dt>
<dd>
<ul>
<li><label><input type="radio" name="tax" value="1.05"> 5%</label></li>
<li><label><input type="radio" name="tax" value="1.08" checked> 8%</label></li>
<li><label><input type="radio" name="tax" value="1.1"> 10%</label></li>
</ul>
</dd>
</dl>
<p><input type="submit" value="計算する"></p>
</form>
解答例は全問題のチェックボックスが on になるとご覧いただけます。
<?php
$result = $_POST['price'] * $_POST['tax'];
?>
<p>¥ <?php echo htmlspecialchars( $result, ENT_QUOTES, 'utf-8' ); ?></p>
解答例は全問題のチェックボックスが on になるとご覧いただけます。
データの受け取りには$_GETや、$_POSTといったスーパーグローバル変数を使う。
$_GETを使う$_POSTを使うhtmlspesialchars関数で無害化する