質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

733閲覧

確認メールを送れるお問い合わせフォームを作成したいです。

sarasarasara

総合スコア8

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/03/24 06:47

編集2020/03/25 09:21

上記内容を作成中です。ローカル環境はlocal by flywheel をしようしています。echo "test" exit();で動作確認をしながらやっていますが、確認メールを送信機能が機能しません。ご教授頂けると助かります。

form3に一度メール送信のif分を入れましたが機能せずエラーが出て戻してもParse error: syntax error, unexpected end of file in /app/public/form2.php on line 83というエラーが出ます。再度ご教授お願い致します。

contact-us.php

<form action="form1.php" method="POST"> <p class="form-p"> <label for="name">御名前</label> </p> <p class="form-p"> <input type="text" name="yourname" id="name" value="<?php if(isset($yourname)){ echo $yourname;}?>"> </p> <p class="form-p"> <label for="company-name">会社名</label> </p> <p class="form-p"> <input type="text" name="yourcompanyname" id="company-name" value="<?php if(isset($yourcompanyname)){echo $yourcompanyname;} ?>"> </p> <p class="form-p"> <label for="phone-number">電話番号</label> </p> <p class="form-p"> <input type="text" name="number" id="phone-number" value="<?php if(isset($number)){echo $number;} ?> "> </p> <p class="form-p"> <label for="mail">メール</label> </p> <p class="form-p"> <input id="mail" type="email" name="email" value="<?php if(isset($email)){echo $email;} ?>"> </p> <p class="form-p"> <label for="comment">お問い合わせ内</label> </p> <p class="form-p"> <textarea name="comment" id="comment" cols="30" rows="10" placeholder="要望など自由に記入してください"><?php if(isset($comment)){echo $comment;} ?></textarea></p> </p> <p class="form-p"> <input type="submit" value="送信する"> </p> </div> </form>

form1.php

<?php session_start(); $errors = array(); if(isset($_POST)){ $yourname = $_POST['yourname']; $yourcompanyname = $_POST['yourcompanyname']; $number = $_POST['number']; $email = $_POST['email']; $comment = $_POST['comment']; $yourname = htmlspecialchars($yourname, ENT_QUOTES); $yourcompanyname = htmlspecialchars($yourcompanyname, ENT_QUOTES); $number = htmlspecialchars($number, ENT_QUOTES); $email = htmlspecialchars($email, ENT_QUOTES); $comment = htmlspecialchars($comment, ENT_QUOTES); if($yourname === "") { $errors['yourname'] = 'お名前が入力されていません。'; } if($yourcompanyname === "") { $errors['yourcompanyname'] = "会社名が入力されていません"; } if($number === "") { $errors['number'] = "お電話番号が入力されていません。"; } if($email === "") { $errors['email'] = "メールアドレスが入力されていません"; } if($comment === "") { $errors['comment'] = "コメントが入力されていません。"; } if(count($errors) === 0) { $_SESSION['yourname'] = $yourname; $_SESSION['yourcompanyname'] = $yourcompanyname; $_SESSION['number'] = $number; $_SESSION['email'] = $email; $_SESSION['comment'] = $comment; header('Location:http://form2.php'); exit(); } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <?php echo "<ul>"; foreach($errors as $value){ echo "<li>"; echo $value; echo "</li>"; } ?> </body> </html>

form2.php

<?php session_start(); if(isset($_SESSION['yourname'])){ $yourname = $_SESSION['yourname']; $yourcompanyname = $_SESSION['yourcompanyname']; $number = $_SESSION['number']; $email = $_SESSION['email']; $comment = $_SESSION['comment']; } $_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(48)); $token = htmlspecialchars($_SESSION['token'],ENT_QUOTES); if(isset($_POST['submit'])){ mb_language("ja"); mb_internal_encoding("UTF-8"); $subject = "[自動送信]お問い合わせ内容の確認"; $body = <<<EOM {$yourname} 様 お問い合わせありがとうございます。以下のお問い合わせ内容を、メールにて確認させて頂きました。内容を確認の上、回答させていただきます。 しばらくお待ちください。 EOM; $fromemail = "メールアドレス"; $formname = "お問い合わせテスト"; $header = "From :".mb_encode_mimeheader($formname)."<{$fromemail}>"; mb_send_mail($subject, $body, $header); // header('Location:http://medicallocal.local/form3.php'); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>確認画面</title> </head> <body> <form action="form3.php" method="post"> <input type="hidden" name="token" value="<?php echo $token ?>"> <table> <tr> <th>お名前</th><td><?php echo $yourname; ?></td> </tr> <tr> <th>会社名</th><td><?php echo $yourcompanyname; ?></td> </tr> <tr> <th>電話番号</th><td><?php echo $number; ?></td> </tr> <tr> <th>メールアドレス</th><td><?php echo $email; ?></td> </tr> <tr> <th>コメント内容</th><td><?php echo $comment; ?></td> </tr> <tr> <td colspan="2"><input type="submit" name="submit" value="送信する"></td> </tr> </table> </form> <p><a href="contact-us.php?action=edit">入力画面へ戻る</a></p> </body> </html> ``` form3.php ``` <?php session_start(); if(isset($_POST['token'], $_SESSION['token']) && ($_POST['token'] === $_SESSION['token'])){ unset($_SESSION['token']); echo "きちんとしたアクセスです"; }else { header('Location:http://contact-us.php'); exit(); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>完了画面―お問い合わせ</title> </head> <body> <p>お問い合わせありがとうございます。</p> </body> </html> ```

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2020/03/24 06:54

https://teratail.com/questions/249029 で書いたコメント通りですが、 確認画面で利用者が「送信」を押下する前にメールを送信しちゃっていいんでしょうか? 普通は、完了画面で送信します。 「echo "きちんとしたアクセスです";」があるifブロックでメール送信処理を行います。
sarasarasara

2020/03/24 06:59

ご指摘ありがとうございます。確認してから送りたいです。 form3のif分の下に作り直します。
m.ts10806

2020/03/24 07:14

質問は編集できます。新たに質問をたてる必要はありません
m.ts10806

2020/03/24 07:41

あと念のための確認ですが、 ローカルでメール送信は別途設定が必要だったと思います。 その辺りはクリアされてるのでしょうか。
guest

回答2

0

php

1$fromemail = "xxx@xxx"; ///受信側のメールアドレスを入れております。 2// ・・・略・・・ 3$header = "From:".mb_encode_mimeheader($formname)."<{$formemail}>";

{$formemail}{$fromemail}では?
"From:"."From: ".です。:の後は半角空白1文字必要です。

phpの先頭で以下のようにエラーを表示するようにしてDebugしましょう。

php

1<?php 2ini_set('display_errors', 1); 3ini_set('error_reporting', E_ALL);

投稿2020/03/24 07:09

Y.H.

総合スコア7918

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

php

1mb_send_mail($subject, $body, $header);

mb_send_mail
どこに送ろうとしているのでしょうか?

すでに指摘のある箇所以外もかなり問題のある箇所が散見されます。

確認メールを送れるお問い合わせフォームはスキルとして非常に広い範囲を要求します。
初学者向けには向いていない教材なので、もう少し別の教材を選択したほうが良いです。

参考:
「ググれ」って言われてググるな!【初学者べからず集 その1】

投稿2020/03/25 09:23

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/03/25 09:26

local by flywheel って、WordPress 用じゃなかったっけ?
sarasarasara

2020/03/25 09:34

wordpressのファイルを消せば使えると教えていただいたので使っております。 エラーの原因はなんでしょうか。
退会済みユーザー

退会済みユーザー

2020/03/25 09:37

リンク先見ましたか? どこに送ろうとしてます? Y.H. さんの書いた、エラー表示方法も必須です。 で、エラーから問題箇所を洗い出すことも必須です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問