- ベストアンサー
DBへの書き込みとメール送信を同時に実行するには
PHP + sqlite でリクエストフォームを作成しています。 データの入力 → 確認画面の表示 → 「送信」ボタン押下で、 1) name="email" 宛に確認メールを送る 2) 入力内容をデータベースに書き込む 上記 2 つの動作を同時に実行しようとしています。 確認画面からデータベースへの書き込み、 確認画面から name="email" 宛へのメール送信 の各動作は、個別に確認できていますが、 これらを同時に実行する方法がわかりません。 <form method="POST" action="*****.php"> では、 一方の処理しか指示できませんし、 JavaScript で対応しようとしましたが、上手く行きません。 どなたかお知恵を拝借できませんでしょうか。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
A.php=確認画面の表示 B.php=DB書き込み処理&メール送信処理 C.php=処理完了の表示 とすればスッキリするかと思います。 A.php内の <form method="POST" action="*****.php">を <form method="POST" action="B.php">とし、 B.phpの中でDBへの書き込みとメール送信の処理を行い、 B.phpの最後に header("Location:C.php"); exit; と書いてC.phpへ飛ばし、 C.phpで処理完了の旨を記述。 こうしておくとDB処理・メール処理のページと最後の表示ページが分かれているので、C.phpで何度F5キーを押されてもDB処理やメール送信処理を重複して行われるという事を防げるかと思います。 参考にしていただけたらと思います。
その他の回答 (1)
- asuncion
- ベストアンサー率33% (2127/6289)
> <form method="POST" action="*****.php"> "*****.php"の中で両方の処理が行なえませんか? 今、"*****.php"にはどんな風に書いてありますか?
お礼
asuncionさん できました!! すぐに回答いただけて、とっても助かりました。 ありがとうございます。
補足
早速回答いただきありがとうございます。 なるほど! 確認画面で両方の処理を記述しようとしてました。 早速試してみます。 今は、それぞれ以下のように記述しています。 受領メール送信用のPHP: <?php mb_language('Japanese'); mb_internal_encoding("Shift-JIS"); $header_info="From: ".$_POST['email']."\nContent-Type: text/plain;charset=ISO-2022-JP\nX-Mailer: PHP/".phpversion(); $body="■■".$_POST['_subject']."■■\n\n"; foreach($_POST as $key=>$value){ if(!strstr($key,"_")){ $body.="[".$key."]".$value."\r\n"; } } mb_send_mail($_POST['email'],$_POST['_subject'],$body,$header_info); header("Location: ".$_POST['_result']); ?> ---------------------- データベース書込み用PHP: <?php $db=sqlite_open("./data/test.dat",0666,$err); $s_date=$_POST['year']."/".$_POST['month']."/".$_POST['day']; sqlite_query($db,"INSERT INTO proofreq ( section,name,email, ---中略---- VALUES('".sqlite_escape_string($_POST['section'])."','".sqlite_escape_string($_POST['name'])."'"); sqlite_close($db); header("Location: doc_check_request_query.php"); ?>
お礼
完璧にできました!!! 本当にありがとうございました。 こんなに簡単にできるとは。 連休中、自宅で環境が再現できず、お礼が遅れて申し訳ありません。
補足
早速回答いただき、ありがとうございます。 なるほど! A.php で両方の処理をやらせようとしていました。 重複書き込み防止策までアドバイス頂いて、勉強になります。 早速試してみます。 まずはお礼まで。