受け付けフォームの続きの続きです。入力内容をCSVファイルにアペンドし,確認メールを出します。
最初のページに戻ってやりなおしてください。
あらかじめ apply.csv というファイルを作り,Apacheに書き込めるようにしておきます。ただし,このままでは丸見えです。どうすればいいか考えてください(答えは下のほうにあります)。
<?php if (isset($_POST['email'], $_POST['name'], $_POST['memo'])) { $f = fopen("apply.csv", "a"); fwrite($f, "\"{$_POST['email']}\",\"{$_POST['name']}\",\"{$_POST['memo']}\"\r\n"); fclose($f); mb_send_mail( $_POST['email'], // 宛先 "申込", // 件名 "メール: {$_POST['email']}\n氏名: {$_POST['name']}\n備考:\n{$_POST['memo']}\n", // 本文 "From: あなたのメアド\nCc: あなたのメアド", "-f あなたのメアド"); // エラー宛先(Return-Path) echo "<p>受け付けました。</p>\n"; $x = htmlspecialchars($_POST['email']); echo "<p>確認メールを $x に送りました。</p>\n"; } else { echo "<p><a href=\"apply.html\">最初のページ</a>に戻ってやりなおしてください。</p>\n"; } ?>
「あなたのメアド」は実際のメールアドレスにしてください。
このままでは apply.csv というファイルを見つけられてしまったら,個人情報が丸見えになります。この対策としては以下のようなことが考えられます。
CSVファイル(コンマ区切りのテキストファイル)は,念のため各項目を ""
で囲んでいます。こうすれば項目内に改行があっても大丈夫です。ただし,項目に "
がすでに含まれている場合は,規約によりそれを ""
に置き換える必要があります。具体的には次のような処理が必要です:
$x = str_replace('"', '""', $_POST['memo']);
あるいは,別の文字で置き換えておいてもいいでしょう。次の例は,項目中の改行を人間が見やすい別の文字で置き換えます:
$x = str_replace(array("\r\n", "\n", "\r"), '◆', $_POST['memo']);
悪意あるリンクを踏むと apply3.php に飛んで不本意な登録をしてしまうような仕掛けの対策としては,ごく簡単には,
if (isset($_POST['email'], $_POST['name'], $_POST['memo'])) {
を
if ($_SERVER['HTTP_REFERER'] == 'http://oku.edu.mie-u.ac.jp/~okumura/php/apply2.php' && isset($_POST['email'], $_POST['name'], $_POST['memo'])) {
に変えることです。ただ,HTTP_REFERER を正しく送信しないブラウザがあると厄介なので,ここでは上の対策をしていません。セッション管理を使う対策が一般的です。
Last modified: