受け付けフォームの続きの続きです。入力内容を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: