フォームの送信と値のチェック - まとめ

action属性の値が空の場合

  • action属性の値が「""」(空)である場合は、自分自身に送信しています
  • フォームを表示し、入力したデータを自分自身にPOSTし、PHPプログラムがデータを受け取って処理を実行しています
  • 受け取ったデータは「$_POST」という変数(配列)に格納されます
  • このフォームでは「select」タグの「name属性」は「car」ですから「$_POST['car']」にPOSTした値が格納されます
  • それを変数「$car」に代入しています
  • 変数「$_POST」は、PHPで自動的に用意される特殊な変数(配列)です
  • HTMLフォームから送信されたデーターは、POSTメソッドで送信された場合「$_POST」に代入されます
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>車を何台持っていますか?</title>
<link rel="stylesheet" href="css/style.css" media="screen,print">
</head>
<body>
<section>
<form action="" method="post">
<dl>
<dt>車を何台持っていますか?</dt>
<dd>
<label>
<select name="car">
<option value="0">0台</option>
<option value="1">1台</option>
<option value="2">2台</option>
<option value="3">3台</option>
</select>
</label>
</dd>
</dl>
<input type="submit" name="submit" value="送信">
</form>
<?php
if(isset($_POST['car'])) {
	$car = $_POST['car'];
	$car = htmlspecialchars($car, ENT_QUOTES, 'UTF-8');
	echo '車の所有台数は' .$car. '台です。';
}
?>
</section>
</body>
</html>
  • PHPプログラムの1行目にある「if文」と「isset()」では、変数がセット(定義)されているかどうかを調べます

変数を調べる

指定 内容
isset($ 変数名) 変数が存在していてNULLでない場合にtrue
empty($ 変数名) 変数が空や0である場合にtrue
is_string($ 変数名) 変数が文字列である場合にtrue
is_numeric($ 変数名) 変数が数値である場合にtrue

isset()

  • 「bool」:戻り値がTRUEまたはFALSEの真偽値(bool)であることを示します
  • 「mixed」:「引数」に多様な型を使うことができることを示します
  • 「$var」:何らかの変数が入ります
  • 「[]」の記述はオプションであることを示し、必須ではありません


《例》

<?php
$zero = 0;

header("Content-Type: text/plain; charset=UTF-8");

echo "値が「0」である変数を調べる\n\n";

echo "[isset]\n";
if(isset($zero)) {
		echo "\$zero には値がセットされています\n\n";
} else {
		echo "\$zero は空です\n\n";
}

echo "[empty]\n";
if(empty($zero)) {
		echo "\$zero は空です\n\n";
} else {
		echo "\$zero には値がセットされています\n";
}
?>
テキストの例

入力されたIDを次回アクセス時まで覚える


《input.php

<?php
if (isset($_COOKIE['my_id'])) {
	$myId = $_COOKIE['my_id'];
} else {
	$myId = '';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>入力されたIDを次回アクセス時まで覚える</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="wrap">
<div id="head">
<h1>入力されたIDを次回アクセス時まで覚える</h1>
</div>
<div id="content">
<form action="cookie.php" method="post">
<dl>
<dt>ID</dt>
<dd><input type="text" name="my_id" id="my_id" value="<?php echo $myId; ?>"></dd>
<dt>パスワード</dt>
<dd><input type="password" name="password" id="password"></dd>
<dt>IDの保存</dt>
</dl>
<p><input type="checkbox" name="save" id="save" value="on"><label for="save">IDを保存する</label></p>
<input type="submit" value="送信する">
</form>
</div>
</div>
</body>
</html>


cookie.php

<?php
$myId = $_POST['my_id'];
$password = $_POST['password'];
$save = $_POST['save'];

// Cookieに保存
if ($save == 'on') {
	setcookie('my_id', $myId, time() + 60 * 60 * 24 * 14);
	$message = 'ログイン情報を記録しました';
} else {
	setcookie('my_id');
	$message = '記録しませんでした';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>入力されたIDを次回アクセス時まで覚える</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="wrap">
<div id="head">
<h1>入力されたIDを次回アクセス時まで覚える</h1>
</div>
<div id="content">
<p style="margin-top: 200px">
<p><?php echo $message; ?></p>
<p><a href="input.php">戻る</a></p>
</p>
</div>
</div>
</body>
</html>


入力されたIDを次回アクセス時まで覚える

《input.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログイン情報をログアウトするまで保持する</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="wrap">
<div id="head">
<h1>ログイン情報をログアウトするまで保持する</h1>
</div>
<div id="content">
<form action="password.php" method="post">
<dl>
<dt>ID</dt>
<dd><input type="text" name="my_id" id="my_id"></dd>
<dt>パスワード</dt>
<dd><input type="password" name="password" id="password"></dd>
</dl>
<input type="submit" value="送信する">
</form>
</div>
</div>
</body>
</html>


《password.php

<?php
session_start();

if (isset($_POST['my_id'])) {
	$_SESSION['my_id'] = $_POST['my_id'];
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログイン情報をログアウトするまで保持する</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="wrap">
<div id="head">
<h1>ログイン情報をログアウトするまで保持する</h1>
</div>
<div id="content">
<p style="margin-top: 200px">
<p>ようこそ<?php echo $_SESSION['my_id']; ?>さん</p>
<p><a href="second.php">次のページへ</a></p>
</p>
</div>
</div>
</body>
</html>


《second.php

<?php
session_start();
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログイン情報をログアウトするまで保持する</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="wrap">
<div id="head">
<h1>ログイン情報をログアウトするまで保持する</h1>
</div>
<div id="content">
<p style="margin-top: 200px">
<p><?php echo $_SESSION['my_id']; ?>さんの情報はまだ残っています</p>
<p><a href="logout.php">ログアウトする</a></p>
</p>
</div>
</div>
</body>
</html>


《logout.php

<?php
session_start();

session_unset();
header('Location: input.html');
?>


電子メールを送信する

  • PHPには簡単にメールを送信できるファンクションが準備されていますが、日本語の処理などに注意が必要です
  • このプログラムの動作確認には、メールサーバーやDNSサーバーの稼働などが必要となるためXAMPP環境では動作を確認できません
  • 「mail」という専用のファンクションは、日本語が考慮されていません
  • そこで、日本語のメールを送信できる「mb_send_mail」ファンクションを使います



mb_send_mail(送り先のメールアドレス, サブジェクト, 本文, 送り主のメールアドレス等);

  • このファンクションを使う場合には、PHPの設定で言語や文字コードを正しく設定しておく必要があります
  • 通常は「php.ini」という設定ファイルを変更します


ここでは、一時的に設定を変えています。

mb_language("japanese");
mb_internal_encoding("UTF-8");
  • メールアドレスが記入されているかをチェックしています
!empty($_POST['email'])
  • 宛先が記入されている場合は、サブジェクトや内容もフォームから取得してメールの内容を組み立てます
  • マニュアル「mb_send_mail


《input.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<title>電子メールを送信する</title>
</head>
<body>
<div id="wrap">
<div id="head">
<h1>電子メールを送信する</h1>
</div>
<div id="content">
<form action="mail.php" method="post">
<dl>
<dt>送信先(To)</dt>
<dd><input name="email" type="text" id="email" size="50" maxlength="255"></dd>
<dt>サブジェクト</dt>
<dd><input name="subject" type="text" id="subject" size="50" maxlength="255"></dd>
<dt>内容</dt>
<dd>
  <textarea name="message" id="message" cols="50" rows="10"></textarea>
</dd>
</dl>
<input type="submit" value="送信する">
</form>
</div>
</div>
</body>
</html>


《mail.php

<?php
mb_language("japanese");
mb_internal_encoding("UTF-8");
 
if (!empty($_POST['email'])) {
	$to = $_POST['email'];
	$subject = $_POST['subject'];
	$body = $_POST['message'];
	$from = mb_encode_mimeheader(mb_convert_encoding("●●●","JIS","UTF-8"))."<xxx@gmail.com>";
	
	$success = mb_send_mail($to,$subject,$body,"From:".$from);
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<title>電子メールを送信する</title>
</head>
<body>
<div id="wrap">
<div id="head">
<h1>電子メールを送信する</h1>
</div>

<div id="content">
<p style="margin-top: 200px">
<?php
if ($success) {
	print('送信しました');
} else {
	print('送信に失敗しました');
}
?>
</p>
</div>
</div>
</body>
</html>