お問合せフォームのパラメータが送信されない現象に対処

 お問い合わせフォームのテストしてみたところ、入力内容がまったく送信されないということがありました。

不思議に思い、別名でコピーしてテストしてみたところ、うまく送信できました。

同じサーバー、同じプログラムなのに、現象がでる・出ないの違いが発生しました。

これは具合が悪いと思い、いろいろ調べて試してみたところ、原因がわかり対処することができました。

忘備録として記録いたします。

現象はこのような感じです。

まず現象を見るため、正しく動作するサンプルフォームをご覧ください。
送信ボタンを押すとメッセージが表示されます。

次に現象の発生するフォームをご覧ください。
送信ボタンを押しても何も発生しません。

プログラム側で何が起こっているのか調べてみました。
現象が発生する法は、プログラム側にパラメータが何も送信されていませんでした。

ちなみにHTMLソースはこのような感じです。

ブラウザフォームからパラメータそのものが送信されない?
そんなことがあり得るのでしょうか?

原因は.htaccessのリダイレクト

現象が発生するフォームのファイル名称は、index.phpなのですが、これを別の名前に変更すると正しく動作しました。

また、index.phpに名前を戻すと現象が発生しました。

index.phpだと動作しないように見えました。

そこでピンときました。

フォームを入れているサーバーに、index.htmlとindex.phpは省略表示になるように、.htaccessでリダイレクト設定をしています。

つまり、送信ボタンを押した瞬間index.phpへパラメータを渡しますが、瞬時にリダイレクトされるためただの再表示になっているのです。

リダイレクトの瞬間、何もなかったことになる・・。
パラメータがプログラムに送信されない原因でした。

index.phpではない、別の名前に変えたときは正常に動いていたのもこのためです。

次のようにして対処しました。

 index.phpリダイレクト設定があると、index.phpにパラメータ渡しをした瞬間にリダイレクトが発動します。

何とかするためには、リダイレクトが発動しないようにパラメータを渡せばよいのです。

そこで次のようにしました。

■現象が発生するHTML

action(ボタンを押したときのとび先)がindex.phpになっています。
これを次のように変更しました。

“index.php” → “”と何もなしにすることでリダイレクト回避ができました。
このように変更したサンプルがこちらです。

ファイル名はindex.phpで、.htaccessでリダイレクト設定していますが、プログラム側にパラメータが送信されるようになりました。

疑問:actionを空欄にして問題ないのか?

ここで疑問がわきました。
actionを空欄にして問題ないのでしょうか?
そう思い調べてみたところ、次のようなことがわかりました。

  • actionを空欄にすると、パラメータは自身へ送信される
  • 一部のブラウザによっては強制的にディレクトリ(index.php)へ送信される

パラメータが自身へ送信されるとは?

空欄にすると自身へ送信されるとはどういうこと?
ということで実験しました。

次のサンプルはファイル名がsample.phpでindex.phpではありません。
そのうえで、actionを空欄にしてみました。

そのサンプルがこちら。

名称がindex.phpでなくてもaction空欄で送信されます。
呼び出した自身へ送信されています。

action空欄は一部のブラウザでは強制的にindex.phpに送信されることがある。

 action空欄にはどうやら落とし穴があるとのことでした。
それが強制的にindex.phpを呼び出すというものです。

例えばsample.phpでaction空欄であったと場合、
送信ボタンを押すと、index.phpが呼び出されるというものです。

ガラケー時代のブラウザなど、ごく一部のブラウザに限定されるようです。
ただ、もともとindex.phpであれば問題はありません。

phpやHTMLに問題がなくても、意外なところに原因があるものです。

 今回の現象が発生したとき、真っ先にプログラム側の受信パラメータを確認しました。
ところがプログラム側は何も受信していませんでした。

一体どうやって調査すればよいのだろうと、途方にくれました。
何とかできたのは、同じプロググラムでも現象が出る出ないの違いがあったことです。

その違いをひとつひとつ検証していったところ、.htaccessのリダイレクトにたどり着きました。

.htaccessを削除したらどうなるかを試したところ、正しく動作するようになったことが決め手でした。

なまじ経験値があると、原因を固定概念で探ってしまいがちです。
簡単なことでしたが、解決するのに思いのほか時間がかかりました。

ただ、多角的にいろんな角度からアプローチすれば、解決できるということを実感いたしました。

今回のレポートは以上です。
読んでいただいてありがとうございました。


ホームページに関するお悩み事やご相談事がございましたら私どもまでご連絡ください。 鋭意ご対応申し上げます。
ホームページのご提案もさせていただいております