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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

5回答

1806閲覧

お問い合わせフォームの実装

dogfood

総合スコア19

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/06/13 00:51

HTMLとPHPを使って、お問い合わせフォームを作りたいのですが、
どうもうまくいかない様です。

サーバーにアップロードして、フォームを埋めたのち、
送信を押しましたが反応がありません。
改善策をご教授いただけたらと思います。

HTML

1 <div class="site-section" id="contact-section" data-aos="fade"> 2 <div class="container"> 3 4 <div class="row align-items-center"> 5 6 <div class="col-sm-6 col-sm-offset-3"> 7 8 <h2 class="section-title mb-3">お問い合わせ</h2> 9 <p class="mb-5">商品内容やショップ概要など、ご不明な点などありましたら、<br>お気兼ねなくお問い合わせください。</p> 10 11 <form id="contact-form" method="post" action="contact-form.php"> 12 13 <div class="field"> 14 <label for="name">名前・会社名</label> 15 <input type="text" id="name" class="contact-field" name="name" placeholder="" required> 16 </div> 17 18 <div class="field"> 19 <label for="email">メールアドレス</label> 20 <input id="email" class="contact-field" name="email" type="email" placeholder="" required> 21 </div> 22 23 <div class="field"> 24 <label for="message">お問い合わせ内容</label> 25 <textarea id="message" class="contact-field" name="message" placeholder="" required></textarea> 26 </div> 27 28 <div> 29 <input class="btn2 btn-outline-primary py-3 px-5" id="submit" name="submit" type="submit" value="送信"> 30 </div> 31 32 <div class="error-status"></div> 33 34 </form> 35 36 </div> 37 </div> 38 39 40 </div> 41 42 </div> 43

php

1<?php 2 $name = $_POST['name']; 3 $visitor_email = $_POST['email']; 4 $message = $_POST['message']; 5 6 7 $email_from = 'xxx@xx.co.jp(仮)'; 8 9 $email_subject = "お問い合わせがありました。"; 10 11 $email_body = "User Name: $name.\n". 12 "User Email: $visitor_email.\n". 13 "User Message: $message.\n"; 14 15 $to = "ooo@oo.co.jp"; 16 17 $headers = "From: $email_form \r\n"; 18 19 $headers .= "Reply-To: $visitor_email \r\n"; 20 21 mail($to,$email_subject,$email_body,$headers); 22 23 header("Location: index.html"); 24 25 26 27?>

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

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

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

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

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

m.ts10806

2019/06/13 01:03

> 送信を押しましたが反応がありません。 自身が組んだコードがどのようなコードか把握されていますでしょうか? (header()書いてますよね) また、「反応がない」だけでは分かりません。 エラー表示ONにする https://qiita.com/shotets/items/3c95aef631b2c5eadae5 サーバーのログを確認する などして具体的に起きた現象を記載してください。
miyabi_takatsuk

2019/06/13 01:04

何点か確認です。 ・反応がないということは、ページの切り替わりもない、ということか ・PHPの構文は、contact-form.phpのものなのか ・記載のHTMLはcontact-form.phpなのか、それとも別なのか ・サーバーはPHPが動く状態なのか ・エラーは起きているか、起きているならエラー文を記載してほしい 以上、どうかご確認お願いします。
dogfood

2019/06/13 01:06

・反応がないということは、ページの切り替わりもない、ということか →そうです。ページも切り替わらない状態です。 ・PHPの構文は、contact-form.phpのものなのか →そうです。 ・記載のHTMLはcontact-form.phpなのか、それとも別なのか →index.htmlになります。 ・サーバーはPHPが動く状態なのか →動く状態です。 ・エラーは起きているか、起きているならエラー文を記載してほしい →エラーは起きておりません。
m.ts10806

2019/06/13 01:09

header("Location: index.html");をコメントアウトしてみては。
m.ts10806

2019/06/13 01:10

そのうえでecho "実行";とか適当に文字列の出力指示を入れておく。
dogfood

2019/06/13 01:11

試してみましたが画面すら切り替わらない状態です。
miyabi_takatsuk

2019/06/13 01:15

もしかして、なんですが、 <input id="submit" name="submit">のnameとidにsubmit入れてるのが悪さしてないですかね・・・? してないにしろ、type属性に入れるべきものを、idやnameにいれるのは、javascriptの処理などで、不都合が出る可能性があるので、やめましょう。
dogfood

2019/06/13 01:16

名前を変えたほうがいいということですかね?
miyabi_takatsuk

2019/06/13 01:19

それで解決するかはわかりませんが、nameとidはsubmit以外にしましょう。 (nameとid自体は同じものにする必要がある)
guest

回答5

0

ベストアンサー

サーバーにアップロードして、フォームを埋めたのち、

送信を押しましたが反応がありません。
改善策をご教授いただけたらと思います。

改善策としては送信を押しましたが反応がありませんの詳細動作の切り分けをすることです。
0. submitボタン自体を押してもリクエスト自体が飛ばないのか→アクセスログを確認する
0. リクエスト先は正しいのか→アクセスログを確認する
0. プログラム処理は正しいのか→エラーログ、echo、exitなどを使いデバッグする
0. プログラムに問題がある場合、必要最低限の処理だけにして動作確認を取りつつ処理を改めて追加し直していく

1ならhtmlのエラー、2なら基本的にはhtmlのエラー、3~4ならプログラムのエラー
そのどれでもないのなら回線の問題か手元のパソコンないしスマホの問題です

投稿2019/06/13 01:53

hentaiman

総合スコア6415

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

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

退会済みユーザー

退会済みユーザー

2019/06/13 03:05

「mail() で送信ができない!」ってところに進むと、mail サーバの切り分けをしないとダメだと思いますよ。 php からはほとんど挙動が見えないので。
hentaiman

2019/06/13 03:16

まあそこはデバッグ進めんで原因そこだと分かれば突っ込んでいくところだとおもうので、しつもんぶんが修正されるか新しい質問が投げられたらでいいんじゃないですかね 「サーバーにアップロードして」と書いてあるからレンタルサーバーだと考えてその辺は問題無いとおもってますけど
guest

0

とりあえず、
$email_from = 'xxx@xx.co.jp(仮)';

と定義しておきながら

$headers = "From: $email_form \r\n";

と変数名のミスがあるのはIDEの構文チェックで気づきました。
Fromが設定してあって未定義変数が指定されていては届くものも届かないでしょう。

「エラーは出ない」と仰っていますが、エラー表示ONにすればNoticeは出るはずです。
イメージ説明

とりあえず、フォームHTMLはそのままでPHPは下記だけだと入力した内容は出力できたので、
気になるのは上記の変数名のミスくらいですね。

php

1<?php 2var_dump($_POST);

あとはyambejpさんの回答にあるようにmail()自体が機能しているか、単体でテストしてみてください。

大事な追記

下記は必ず見ておいてください。

メール送信は脆弱性をつきやすい仕組みの一つです。
レンタルサーバであれば確かに簡単にメール送信のテストはできますが、同時に世界中からアクセス可能になっているとも言えますので、きちんと作り上げるまでは、最低でもベーシック認証かけるとか、特定のIPからしかアクセスさせないようにするとかしておいたほうが良いでしょう。

投稿2019/06/13 01:37

編集2019/06/13 01:42
m.ts10806

総合スコア80850

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

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

0

外部からアクセス可能な場所にアップロードしているなら、削除したほうが良いです

サーバの設定が適切にできていないのだと思うので、メールが送信されることは無いと思いますが、万が一、メールが送信されるように設定できていると、ドメインを汚すメールが送信できてしまいます(SPAM の発射台になります)。

改善策をご教授いただけたらと思います。

基本的なセキュリティ対策を学んで下さい。

投稿2019/06/13 01:36

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

fromもtoもスタティックに指定してメールが届かないなら
mail関数を利用する環境の設定ができていないのでしょう。
mail関数自体のテストは済んでいますか?
まずはそこからでしょう

投稿2019/06/13 01:19

yambejp

総合スコア114769

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

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

0

質問修正依頼コメントをいただいて、状況がわかりましたので、回答いたします。
何も起きていないわけではないと思います。
メールが届いていませんか?

なぜ何も起きていないように見えるかというと、
phpの最後で、
header("Location: index.html");にて元のページに戻っているからです。
何も起きていないのではなく、メールを送信した後、ページを元に戻しているだけです。
送信を押した後、inputに入れた値がクリアされてませんか?
それは、phpによるページ遷移をしたことによる現象です。

投稿2019/06/13 01:11

miyabi_takatsuk

総合スコア9528

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

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

dogfood

2019/06/13 01:16

ありがとうございます。 ただ、「送信を押した後、inputに入れた値がクリアされてませんか?」これがクリアになっていない状態です。 空欄のまま送信しようとすると、エラーメッセージが出るのでボタン自体は反応しているのかなと思いますが。
m.ts10806

2019/06/13 01:19

CSSの指定とか実際の送信行為に関係のないタグとか全部取っ払って最小構成で試してみては。
miyabi_takatsuk

2019/06/13 01:20

あの・・・、もしかして、JavaScriptの処理挟んでます? もしそうだったら、そこはかなり重要なので、質問本文に記載し、JavaScriptのコードも記載してください。
miyabi_takatsuk

2019/06/13 01:26 編集

いや、 required属性で、空欄でエラー起きてるだけですかね・・・。 dogfoodさん > mts10806さんのおっしゃる通りにまずはやってみてはいかがでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問