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

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>
</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' );
	print '車の所有台数は' .$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");

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

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

print "[empty]\n";
if( empty($zero) ) {
		print "\$zero は空です\n\n";
} else {
		print "\$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>
</head>
<body>
<h1>入力されたIDを次回アクセス時まで覚える</h1>
<p><?php echo $message; ?></p>
<p><a href="input.php">戻る</a></p>
</body>
</html>


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

《input.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログイン情報をログアウトするまで保持する</title>
</head>
<body>
<h1>ログイン情報をログアウトするまで保持する</h1>
<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>
</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>
</head>
<body>
<h1>ログイン情報をログアウトするまで保持する</h1>
<p>ようこそ<?php echo $_SESSION['my_id']; ?>さん</p>
<p><a href="second.php">次のページへ</a></p>
</body>
</html>


《second.php

<?php
session_start();
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログイン情報をログアウトするまで保持する</title>
</head>
<body>
<h1>ログイン情報をログアウトするまで保持する</h1>
<p><?php echo $_SESSION['my_id']; ?>さんの情報はまだ残っています</p>
<p><a href="logout.php">ログアウトする</a></p>
</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">
<title>電子メールを送信する</title>
</head>
<body>
<h1>電子メールを送信する</h1>
<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>
</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>
<h1>電子メールを送信する</h1>
<?php
if ( $success ) {
	print( '送信しました' );
} else {
	print( '送信に失敗しました' );
}
?>
</body>
</html>