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