ユーザーとの対話

ユーザーとの対話

  • 入力フォームに入力されたデータは、「$_GET[ 名称 ]」や「$_POST[ 名称 ]」取得できます
出力
  • ブラウザに表示


《例1》

  • 変数を{ }で囲む
  • Dreamweaverでは、変数の色にならないため判別しにくくなります
<?php
echo "あなたの名前は、{$name}ですね。";
?>


《例2》

<?php
echo 'あなたの名前は、' . $name . 'ですね。';
?>


《例3》

  • HTML要素の部分は、PHPの記述に含めない
  • 変数の値のみを出力する
<p>あなたのお名前は、<?php echo $name; ?>ですね。</p>
エラー
  • 正しく表示されない
  • 基本的には、綴りミスであることがほとんどです
  • 構文の記述にミスがない場合は、変数名の記述ミスです(他のページに変数の値を渡す処理の中で起こるミス)


var_dump()

  • 引数に指定した式に関しての型や値を含む構造化された情報を返します
  • print_r()よりも詳細な情報が含まれ、変数の数やそれぞれの変数に関する情報が表示されます
<?php
$name = $_POST[ 'your_name' ];

var_dump($name);
?>

GETメソッド

  • form要素のmethpd属性を「get」にします
  • GETメソッドで送信されたフォームの値は、$_GET[ 'フィールド名' ] で取得できます
  • GETメソッドの場合は、URLの後ろにデータがつきます(表示されます)
  • name属性「your_name」という名前をつけています
  • 入力フォームの内容をサーバーに送信するには、「submit」ボタンが必要です
  • 「submit」ボタンは、「value="送信"」で文字列「送信」が表示されます
  • 「submit」ボタンがクリックされたときに呼び出すプログラムは、action属性で指定します


《index.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>GETで送信</title>
</head>
<body>
<form action="check.php" method="get">
<p>お名前 <input type="text" name="your_name"></p>
<p><input type="submit" value="送信"></p>
</form>
</body>
</html>


《check.php

  • $_GETで入力されたデータを読み取り、echoで文字を出力する
<?php
$yname = $_GET['your_name'];
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>GETで取得</title>
</head>
<body>
<p>こんにちは、<?php echo $yname; ?>さん。</p>
</body>
</html>





入力フィールドに以下のように記述すると、プログラムが実行されてしまいます。




つまり、悪意のある第三者に、データを盗み出すプログラムなどが実行されてしまい、とても危険です。


クロスサイトスクリプティング(Cross Site Scripting XSS

  • HTMLエスケイプ処理をしていれば、「<script>」は「&lt;script&gt;」に置換されるので、実行されることはありません
  • CSSではなく「XSS」と書くのは、Cascading Style Sheetsと区別するため
PHPでHTMLエスケイプ
  • htmlspecialchars関数を使います
<?php
$yname = $_GET['your_name'];
$h = htmlspecialchars( $yname );
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>GETで取得</title>
</head>
<body>
<p>こんにちは、<?php echo $h; ?>さん。</p>
</body>
</html>

POSTメソッド

  • form要素のmethpd属性を「post」にします
  • POSTメソッドで送信されたフォームの値は、$_POST[ 'フィールド名' ] で取得できます
  • POSTメソッドの場合は、URLの後ろにデータがつかず、URLとは別にデータが送信されます
  • Webブラウザの「更新」ボタンをクリックしてリロードしようとすると、再送信するかどうかを尋ねる確認メッセージが表示されます


《index.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>POSTで送信</title>
</head>
<body>
<form action="check.php" method="post">
<p>お名前 <input type="text" name="your_name"></p>
<p><input type="submit" value="送信"></p>
</form>
</body>
</html>


《check.php

<?php
$yname = $_POST['your_name'];
$h = htmlspecialchars( $yname );
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>POSTで取得</title>
</head>
<body>
<p>こんにちは、<?php echo $h; ?>さん。</p>
</body>
</html>