読者です 読者をやめる 読者になる 読者になる

PHP演習 2

form.phpで入力した名前を送信し、showname.phpで受信させる

ソースファイル

form.php

<!DOCTYPE HTML>
<html lang ="ja">
<head>
<meta charset="utf-8">
<title>フォーム入力画面</title>
</head>

<body>
<form action="showname.php" method="get">
<p>お名前を入力して送信ボタンを押してください。<p>
<input type="text" name="name">
<input type="submit" value="送信">
</form>
</body>
</html>

showname.php

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>フォーム確認画面</title>
</head>

<body>
<?php
$q = $_GET["name"];//ユーザーからの入力を得る
//GETの中はform.phpのinputタグのname属性に設定した名前と同じ名前にする
$q_html = htmlspecialchars($q);//文字列データをHTMLに変換
//セキュリティ上の危険を回避するために必ず入れる
echo "<p>{$q_html} さん、こんにちは。</p>";
?>
</body>
</html>

実行

form.phpから”佐藤浩一”と入力します。

f:id:develog:20161027235040p:plain

 

showname.phpでは”佐藤浩一”が受信できています。

f:id:develog:20161027234834p:plain

 

 GETとPOSTの比較

ソースファイル

php.php

<!DOCTYPE HTML>
<html lang="jp">
<head>
<meta charset="utf-8">
<title>GETとPOSTの比較</title>
</head>

<body>
<div>
<p>[GET]</p>
<form method="get" action="form.php">
<input type="text" name="text" value="">
<input type="submit" name="btn" value="GET送信">
</form>
<p>[POST]</p>
<form method="post" action="form.php">
<input type="text" name="text" value="">
<input type="submit" name="btn" value="POST送信">
</form>
</div>
</body>
</html>

 form.php

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>GETとPOSTの比較</title>
</head>

<body>
<?php
echo "GETの中身<pre>";
var_dump($_GET);
echo "</pre>";

echo "POSTの中身<pre>";
var_dump($_POST);
echo "</pre>";
?>
</body>
</html>

実行

GET、POST共に”1234567”を送信します。

f:id:develog:20161028001821p:plain

 

GETで受信した内容を表示しています。ブラウザには送信内容”1234567”が表示されています。GETはテキストのみ送受信でき、内容は丸見えになります。

f:id:develog:20161028001607p:plain

 

POSTで受信した内容を表示しています。ブラウザには送信内容”1234567”は表示されません。内容を見せたくない場合はPOSTを使用する方がよいです。

f:id:develog:20161028001632p:plain

フォームに入力した内容を取得する

 ソースファイル

form.php

<!DOCTYPE HTML>
<html lang ="ja">
<head>
<meta charset="utf-8">
<title>フォーム入力画面</title>
<style>
dt {
float: left;
width: 200px;
}
dt, dd {
margin-bottom: 20px;
}
form, h1 {
margin-left: 100px;
}
</style>
</head>

<body>
<h1>フォームに入力した内容を取得する</h1>
<form action="showname.php" method="post">
<dl>

<dt><label for="name">お名前:</label></dt>
<dd>
<input type="text" name="name" id="name" size="20" maxlength="10" placeholder="山田太郎" required>
</dd>

<dt>
<label for="mail">メールアドレス:</label></dt>
<dd>
<input type="email" name="mail" id="mail" size="50" maxlength="50" required>
</dd>

<dt>性別:</dt>
<dd>
<input name="gender" id="gender_male" type="radio" value="男性" checked>
<label for="gender_male">男性</label>
<input name="gender" id="gender_female" type="radio" value="女性">
<label for="gender_female">女性</label>
</dd>

<dt><label for="message">お問合わせ内容:</label></dt>
<dd>
<textarea name="message" id="message" cols="50" rows="4"></textarea></dd>
</dl>

<input type="submit" value="送信する">
</form>
</body>
</html>

showname.php

<?php
$name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
$mail = htmlspecialchars($_POST['mail'], ENT_QUOTES, 'UTF-8');
$gender = htmlspecialchars($_POST['gender'], ENT_QUOTES, 'UTF-8');
$message = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
?>
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>フォーム受信側処理</title>
<style>
dd {
margin-left: 150px;
}
</style>
</head>

<body>
<dl>
<dt>お名前:</dt>
<dd><?php echo $name; ?></dd>
<dt>メールアドレス:</dt>
<dd><?php echo $mail; ?></dd>
<dt>性別:</dt>
<dd><?php echo $gender; ?></dd>
<dt>メッセージ:</dt>
<dd><?php echo $message; ?></dd>
</dl>
</body>
</html>

実行

送信内容

f:id:develog:20161028003951p:plain

 

受信内容

f:id:develog:20161028003956p:plain

 

htmlspecialchars

$name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');

htmlspecialchars:受信データをHTMLに変換します。特殊文字も変換されるため、スクリプトが勝手に実行されるという危険を回避することができます。

ENT_QUOTES:シングルクォートとダブルクォートをともに変換します。

UTF-8:ASCII互換のマルチバイト8ビットUnicode