送信データを受け取る

PHPで送信データを受け取る - テキスト

テキストボックス
  • $_POST[ 'name' ]という変数に格納されている


《input.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>文字を入力する</title>
</head>
<body>
<form action="request.php" method="post">
<label for="name">名前:</label>
<input type="text" id="name" name="name">
<input type="submit" value="送信">
</form>
</body>
</html>


《request.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>文字を入力する部品</title>
</head>
<body>
こんにちは、
<?php print htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>
さん!
</body>
</html>


input(1行のテキスト)

<?php
  print $_POST[ 'name '];
?>


password(パスワード)

  • 「1234」は最も利用されているパスワードの文字列なので、実生活では使用不可
<?php
  print $_POST[ 'password' ];
?>


textarea(複数行のテキスト)

  • nl2br関数は、ブラウザに入力時の改行を変換して表示します(データベースに記録したり、メールで送信する場合は不要です)
<?php
  print nl2br($_POST[ 'message' ]);
?>
ユーザーからの入力を受け取る
  • PHPは「要素の名前(name属性)と値の組み合わせ」として、自動的に変数「$_POST」にセットします
  • 「$_POST」は、PHPが自動的に用意してくれる特別な変数(スーパーグローバル変数)です


「$_POST」から値を取り出すには、input要素のname属性を指定します。

$_POST[ 'name' ]
ユーザーからの入力値をそのまま表示してはいけない
<?php print ($_POST['name']); ?>

であっても、それなりに動作します。
しかし、以下のようにscript要素を入力することも可能です。


《実行結果》


このようにエラーを返すものと、実行してしまいダイアログボックスを表示してしまうブラウザもあります。
悪意のあるスクリプトを埋め込まれることも考えられます。

htmlspecialchars命令
  • 文字列に含まれるHTMLとして意味のあるもじを文字列に置き換え無害化します



htmlspecialchars ( 文字列, エスケープの種類, 文字コード);

<?php print htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>
  • 「ENT_QUOTES」は、シングルクォートも文字列として置き換えなさいという意味です
  • 「ENT_QUOTES」は、文字ではなく「定数」なので、クォートで囲んではいけません


《実行結果》


PHPで送信データを受け取る - テキスト以外

ラジオボタン
  • $_POST[ 'gender' ]という変数に格納されている
  • ブラウザには、valueの値が表示されます


《input.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ラジオボタン</title>
</head>
<body>
<form action="check.php" method="post">
性別<br>
<input type="radio" name="gender" id="gender_male" value="1"><label for="gender_male">男性</label>
<input type="radio" name="gender" id="gender_female" value="2"><label for="gender_female">女性</label>
<input type="radio" name="gender" id="gender_none" value="9"><label for="gender_none">解答しない</label> <br>
<input type="submit" value="送信">
</form>
</body>
</html>


《check.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ラジオボタン</title>
</head>
<body>
<?php print htmlspecialchars($_POST[ 'gender' ], ENT_QUOTES, 'UTF-8'); ?>
</body>
</html>

まとめ

  • 入力値の送信先は、<form>要素の action属性によって決まります
  • フォームからの入力値には、「$_POST[ '名前' ]」でアクセスできます
  • ユーザーからの入力値を表示するには、htmlspecialchars命令で「<」「>」のような文字を無害な文字列に置き換えなければなりません
  • フォームの送信方法には GETとPOST という形式があります
  • GETで送信されたデータには、変数 $_GET でアクセスできます