[PHP]入力フォーム①
HTMLの<form>で取得したデータをサーバーに送り、PHPで処理することができる。
流れ
ユーザー:①HTMLフォームに書き込み、送信
↓
サーバー:②メモリで受け取る
③Apacheで処理
④PHPが結果を返す ※処理後、メモリからデータは消える
↓
⑤結果をHTMLでユーザーに返す
フォーム1−1
form1.html
<body>
<p>以下を記入して、「送信する」を押して下さい。</p>
<form action="form1.php" method="post">
<p>お名前:<input type="text" name="namae" ></p>
<p>ご年齢:<input type="text" name="age" >才</p>
<p><input type="submit" value="送信する"></p>
</form>
</body>
action:データの送り先のファイル名やURL。ここではform1.php
method : 送信方式。postかget
name属性:データの送り先(ここではform1.php)で変数処理をするための値
form1.php
form1.htmlからデータを受信し、処理をする。
受信は自動的に行うので、私たちは処理内容を書いていく必要がある。
<?php
$name = $_POST['namae'];
$age = $_POST['age'];
echo $name;
echo $age;
処理の流れ
①form1.htmlのお名前欄に入力された値は、$_POST['namae']という変数で、
年齢欄に入力された値は$_POST['age']という変数で受け取る
※$_POST['']で受け取りたいものと同じname属性を[' ']に入れる
↓
$_POST['namae'] の変数の値を 変数nameに代入
$_POST['age'] の変数の値を 変数ageに代入
②変数nameをブラウザに表示
変数ageをブラウザに表示
表示結果
フォーム1−2
表示結果を「あなたは〜〜です」となるようにする
form1.php
<?php
$name = $_POST['name']; →→
$age = $_POST['age'];
echo '<p>あなたのお名前は'.$name.'です。</p>';
echo '<p>あなたの年齢は'.$age.'才です。</p>';
_________________
下は全く同じ結果になる
echo '<p>あなたのお名前は'.$name.'です。</p>';
echo "<p>あなたのお名前は{$name}です。</p>";
文字列のときは上の書き方がよい。
フォーム1−3 HTML構造の中にPHPを組み込むこともできる
form1.php
<?php
$name = $_POST['name'];
$age = $_POST['age'];
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>form1</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>フォーム1</h1>
<?php
echo '<p>あなたのお名前は'.$name.'です。</p>';
echo '<p>あなたの年齢は'.$age.'才です。</p>';
?>
</body>
</html>
[重要】 入力フォームに悪意のプログラム等を書き込まれるのを防ぐhtmlspecialchars関数
この状態の入力フォームはタグも書き込むことができる状態
→
スクリプトや悪意のプログラムを実行させ、破壊することもできてしまう。
これを防ぐ為にhtmlspecialchars関数を使用する。
echo htmlspecialchars(変数名, ENT_QUOTES,'文字コード');
効果: < & = " ' 等を実体参照文字に置き換えて、タグとして認識しなくなる。
アンカーリンクやスクリプトを実行しないようにする
PHPを以下のように書き換える
表示結果