フォームの送信と値のチェック - まとめ
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>
<?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(送り先のメールアドレス, サブジェクト, 本文, 送り主のメールアドレス等);
ここでは、一時的に設定を変えています。
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>