とご質問を頂きました。
一応補足で、たぶんお問合せフォームのような画面で送信したときに画面遷移をせずに入力内容をメールで送信したいのだと思います。
この場合はAjaxの非同期通信を使います。
Ajaxで非同期通信をする基礎は以下の記事を参考にしてください。
それとメール送信に関しても以前記事を作成しました。
≫ PHPで入力されたメールアドレスにメールを送信するサンプルでForm処理をイメージする
上記2つの記事をベースにサンプルを作成します。
PHP+jQueryで画面遷移なしでメール送信するサンプルコード
入力内容をAjaxで送信し、結果のメッセージを画面上に表示しています。
フォーム入力画面(HTML)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<html> <head> <meta charset="UTF-8"> <title>PHPテスト</title> <meta name="description" content="このページの概要を書く"> <script type='text/javascript' src='//ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js?ver=1.12.2'></script> <script type="text/javascript"> $(function(){ $('#sendmail').submit(function(event) { var form = $(this); var url = form.attr('action'); var method = form.attr('method'); var serialize = form.serialize(); $.ajax({ type: method, url: url, data: serialize, dataType: false, //通信結果を受け取らない場合はfalse beforeSend: function(xhr, settings) { // ajax送信前の処理 }, complete: function(xhr, status) { // ajax応答後の処理 }, success: function(data) { // ajax通信成功時の処理 $('#msg').html(data); }, error: function(xhr, status, error) { // ajax通信成失敗の処理 $('#msg').html("通信エラーが発生しました。"); } }); return false; }); }); </script> </head> <body> <p id="msg"></p> <form action="mail.php" method="POST" id="sendmail"> <p>名前</p> <input type="text" name="yourname"> <p>メールアドレス</p> <input type="text" name="youremail"><br /> <input type="submit" value="送信"> </form> </body> </html> |
この中にお問合せなどに必要な項目を追加します。
ただ、formタグに sendmail をIDとして持たせており、sendmailのformが送信されたら送信内容を取得しAjaxで送信するようにしています。
Ajax通信の後には return false; を入れることで元々のsubmitが拒否されます。
Ajaxで非同期通信をする基礎は以下の記事を参考にしてください。
メール送信(PHP)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php if (!empty($_POST["youremail"]) && !empty($_POST["yourname"])) { $name = $_POST["yourname"]; $mail = $_POST["youremail"]; if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $mail)) { $from = "test@example.com"; $subject = "サンプルフォームからのメール送信"; $message = "{$name}さんへ。\r\n\r\n{$mail}にメールを送信しました。\r\n届きましたか?"; $header = "From: {$from}\r\nReply-To: {$from}\r\n"; $result = mb_send_mail($mail, $subject, $message, $header); if ($result) { $msg = "正常にメールを送信しました。"; } else { $msg = "メールの送信に失敗しました。"; } } else { $msg = "メールアドレスが不正です。"; } } else { $msg = "入力していない項目があります。"; } echo $msg; exit; |
画面で入力した名前とメールアドレスを受け取り、ただしく入力されていたらメールを送信します。
正常に送信した場合や、エラーになった場合はそれぞれ異なるメッセージを返します。
Ajaxで呼び出し元に値を返すには echo で出力すればOKです。
メール送信に関する内容は次の記事を参考にしてください。
≫ PHPで入力されたメールアドレスにメールを送信するサンプルでForm処理をイメージする
まとめ
Ajaxを使って画面遷移をしないでPHPを実行しメール送信するサンプルを紹介しました。
個人的にはAjaxを使うJavascriptあたりが難しいです。
通信さえ出来てしまえば後はそれほど難しくないコードになっています。
最初はコピペして、部分的に変えてみたりして動作を確認してください。
コメントを残す