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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

Q&A

解決済

3回答

4113閲覧

お問い合わせフォームのPHPの書き方について

t.ichikawa

総合スコア8

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

0グッド

1クリップ

投稿2018/07/06 05:37

編集2018/07/06 06:04

問い合わせフォームに関して、HTMLファイルは作成できたのですが、PHPの書き方がよく分からずに困っています。
いくつかネットで調べてみたのですが上手くいきません。送信ボタンを押すと、PHPの文がそのまま表記されます。どのように作成すればよいかご査収のほどお願いいたします。

html

1<div class="box3"> 2 <img src="img/contact.jpg" alt="" class="topimg"> 3 </div> 4<div class="box4"> 5<form method="post" action="send.php"> 6<p><label>お名前:<br> 7<input type="text" maxlength="255" name="name"> 8</label></p> 9 10<!-- ▼郵便番号入力フィールド(7桁) --> 11<p><label>郵便番号:<br> 12<input type="text" name="zip11" size="10" maxlength="8" onKeyUp="AjaxZip3.zip2addr(this,'','addr11','addr11');"> 13<label></P> 14<!-- ▼住所入力フィールド(都道府県+以降の住所) --> 15<p><label>住所:<br> 16<input type="text" name="addr11" size="60"> 17<label></P> 18 19<p><label>電話番号:<br> 20<input type="tel" size="30" maxlength="255" name="tel"> 21</label></p> 22 23<p><label>メールアドレス:<br> 24<input type="email" size="30" maxlength="255" name="mail"> 25</label></p> 26 27<p><label>件名:<br> 28<input type="subject" size="30" maxlength="255" name="subject"> 29</label></p> 30 31<p><label>本文:<br> 32<textarea name="inquiry" cols="60" rows="5"></textarea> 33</label></p> 34 35<p><input type="submit" value="送信"></p> 36</form> 37</div> 38</div>

php

1<?php 2$action = $_POST['action']; 3$name = htmlspecialchars($_POST['name']); 4$email = htmlspecialchars($_POST['mail']); 5$comment = htmlspecialchars($_POST['comment']); 6$to = 'sample@sample.com'; 7$subject = 'お問い合わせ'; 8$message = '[お名前]'."\n".$name."\n"; 9$message = '[郵便番号]'."\n".$zip11."\n"; 10$message = '[住所]'."\n".$addr11."\n"; 11$message = '[電話番号]'."\n".$tel."\n"; 12$message .= '[email]'."\n".$mail."\n"; 13$message .= '[件名]'."\n".$subject."\n"; 14$message .= '[本文]'."\n".$inquiry."\n\n\n"; 15$header = 'From: '.$email."\r\n"; 16$header .= 'Reply-To: '.$email."\r\n"; 17if($action == "post"){ 18$status = mb_send_mail($to, $subject, $message, $header); 19if ($status) { 20echo '<p class="msg">メッセージは正常に送信されました</p>'; 21echo '<button type="button" onclick="history.go(-1)">入力フォームに戻る</button>'; 22} else { 23echo '<p class="msg">メッセージの送信に失敗しました</p>'; 24echo '<button type="button" onclick="history.go(-1)">入力フォームに戻る</button>'; 25} 26} 27?>

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

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

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

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

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

m.ts10806

2018/07/06 05:41

現在のコードで起きている現象を具体的に書いてください。あとPHPの動作環境(PHPのバージョン、サーバ、データベースなど)も記載してください。
退会済みユーザー

退会済みユーザー

2018/07/06 05:44

ネット上に見つかる、出来合いのものを流用しない理由は何でしょうか。なぜゼロから作ろうとしているのでしょうか。
m.ts10806

2018/07/06 05:53

あと、インデントはきちんとつけられたほうが良いです。閉じ忘れなどが気づきにくいので、フォーマットサービスサイトなどを利用して調整してください。HTML:http://u670.com/pikamap/htmlseikei.php PHP:http://flatsystems.net/php_beautifier.php スペックが大丈夫そうならEclipseなどの開発統合環境の入った高機能エディタを利用してください。
takyafumin

2018/07/06 05:56

『いくつかネットで調べてみたのですが上手くいきません。』で言う「上手くいかない」とは、どのような状態ですか?エラーが出てしまうのでしょうか?メールが送信できないのでしょうか?
guest

回答3

0

回答ではありません
お問い合わせフォームは、初心者が実装するには難しすぎる機能です。
少なくとも、セキュリティ要件が整理できる程度にならなければ、自身で実装するのはやめたほうが良いです。

ネット上で見つかるスクリプトは、ろくな設計がされていないので、実務には耐えられません。最低限連続投稿の抑止は入れなければならないですが、ちゃんと実装しているのを見たことはないです。

また、実際にメール機能を使用する場合は、「mb_send_mail」は使用せず、PHPMailer 等のライブラリを使用することをオススメします。
認証やヘッダの加工等、メール送信に必要なことをセキュアに自分で実装しようとするとけっこう大変です。

メール機能はダイレクトに他人に迷惑をかける可能性があるので、なるべく慎重に実装してください。
要件が合うのであれば、Google フォームを使用するのが手っ取り早いです。

投稿2018/07/06 08:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

「mb_send_mail」でネット検索すると、いろんな事例があるので、
真似すればいいと思います。

それよりも、出来合いのお問い合わせフォームをカスタマイズしたほうが、
処理をデバッグする労力を大幅に削減できるので、
ここでQ&Aするよりも前向きにやれると思います。
「お問い合わせ cgi」でネット検索すればいいです。

--

以下、机上デバッグで気づいたところをダラダラ書き出します。

$name = htmlspecialchars($_POST['name']); $email = htmlspecialchars($_POST['mail']); $comment = htmlspecialchars($_POST['comment']);

なぜHTML表示用に加工しているのでしょうか。
htmlメール送信するわけでもなく、
プレーンテキスト送信ですよね。
メールに含めるだけなら加工不要です。

--

$message = '[お名前]'."\n".$name."\n"; $message = '[郵便番号]'."\n".$zip11."\n"; $message = '[住所]'."\n".$addr11."\n"; $message = '[電話番号]'."\n".$tel."\n";

文字列の連結じゃなく、上書きしてますよ。
$message .= '[email]'."\n".$mail."\n";の書き方を徹底してください。
多分、上の行をコピペして改変しているだけなんだろうと察しますが。

--

初期化していない変数が多すぎます。
$zip11, $addr11, $tel, $mail, $subject, $inquiryを誰がデータを詰めているのか。

投稿2018/07/06 06:07

編集2018/07/06 06:08
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

最初の方の$messageが「.=」ではなく「=」なので
上書きされてますね
うまくエンコードしないと文字化けで読めないメールになりそうですね

投稿2018/07/06 05:53

yambejp

総合スコア114779

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問