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

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

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

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

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Q&A

解決済

4回答

297閲覧

メールフォームからのPOSTデータに予期しないデータが含まれる

citra

総合スコア11

PHP

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

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

0グッド

0クリップ

投稿2017/07/28 00:23

編集2017/07/28 07:12

http://tetra-themes.com/bootstrap3-php-mailform-327/

上記サイトを参考に、メールフォームの作成を行っています。
フォーム画面は問題なく作成できたのですが、「確認」ボタンを押下した際のPOSTデータが下記となり、末尾に [0]=> string(0) "" といった予期しないデータが含まれてしまいます。
array(6) { ["ご用件"]=> string(0) "" ["お名前"]=> string(0) "" ["電話番号"]=> string(0) "" ["Email"]=> string(0) "" ["お問い合わせ内容"]=> string(0) "" [0]=> string(0) "" }

原因はどこの箇所にあるかお教えください。

・Google Chrome バージョン: 60.0.3112.78(Official Build) (64 ビット)
・IE11
上記2ブラウザ共同じ事象となっています。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>サンプル</title> <meta name="Description" content="" /> <meta name="Keywords" content="" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <style type="text/css"> #formWrap { width:700px; margin:0 auto; color:#555; line-height:120%; font-size:90%; } table.formTable{ width:100%; margin:0 auto; border-collapse:collapse; } table.formTable td,table.formTable th{ border:1px solid #ccc; padding:10px; } table.formTable th{ width:30%; font-weight:normal; background:#efefef; text-align:left; } </style> </head> <body> <div id="formWrap"> <h3>お問い合わせ</h3> <p>下記フォームに必要事項を入力後、確認ボタンを押してください。</p> <form method="post" action="mail"> <table class="formTable"> <tr> <th>ご用件</th> <td><select name="ご用件"> <option value="">選択してください</option> <option value="ご質問・お問い合わせ">ご質問・お問い合わせ</option> <option value="リンクについて">リンクについて</option> </select></td> </tr> <tr> <th>お名前</th> <td><input size="20" type="text" name="お名前" /> ※必須</td> </tr> <tr> <th>電話番号(半角)</th> <td><input size="30" type="text" name="電話番号" /></td> </tr> <tr> <th>Mail(半角)</th> <td><input size="30" type="text" name="Email" /> ※必須</td> </tr> <tr> <th>性別</th> <td><input type="radio" name="性別" value="男" /> 男 <input type="radio" name="性別" value="女" /> 女 </td> </tr> <tr> <th>サイトを知ったきっかけ</th> <td><input name="サイトを知ったきっかけ[]" type="checkbox" value="友人・知人" /> 友人・知人 <input name="サイトを知ったきっかけ[]" type="checkbox" value="検索エンジン" /> 検索エンジン</td> </tr> <tr> <th>お問い合わせ内容<br /></th> <td><textarea name="お問い合わせ内容" cols="50" rows="5"></textarea></td> </tr> </table> <p align="center"> <input type="submit" value=" 確認 " /> <input type="reset" value="リセット" /> </p> </form> </div> </body> </html>

Choromeのデベロッパーツールでは下記が出力されました。

■Form Data
ご用件:ご質問・お問い合わせ
お名前:test
電話番号:090-1234-5678
Email:test@test.com
性別:男
サイトを知ったきっかけ[]:友人・知人
お問い合わせ内容:test

■Previewタブ
array(8) {
["ご用件"]=>
string(30) "ご質問・お問い合わせ"
["お名前"]=>
string(4) "test"
["電話番号"]=>
string(13) "090-1234-5678"
["Email"]=>
string(13) "test@test.com"
["性別"]=>
string(3) "男"
["サイトを知ったきっかけ"]=>
array(1) {
[0]=>
string(15) "友人・知人"
}
["お問い合わせ内容"]=>
string(4) "test"
[0]=>
string(4) "test"
}

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

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

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

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

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

zohnam

2017/07/28 00:52

数年前の話ですが、safariだけ謎のキーワードがPOSTにくっついてたという経験があります。ブラウザ依存の話かもしれませんので、まずどのブラウザでも発生するのかどうか調査してみてください。
guest

回答4

0

codeigniterを中継していることが原因であるのは、十分考えられますね。

CodeIgniterヘルプ 入力クラス
http://codeigniter.jp/user_guide/3/libraries/input.html

CodeIgniterは

php

1$this->input->post()

のようなメソッドで入力データを安全に取り出すような設計思想のようですから、$_POSTのような生データはその過程でちょっといじられることもあり得るという認識でいいのではないでしょうか。
このメソッドで取り出したオブジェクトをvar_dumpしたら、どうなりますか?

投稿2017/07/28 08:05

zohnam

総合スコア1441

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

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

citra

2017/07/28 08:32 編集

Controllerにて、 ``` public function mail() { $data['mail'] = $this->input->post(); //画面レイアウトを設定 $this->load->view('mail', $data); } ``` 上記で処理するようにし、 ``` <?php var_dump($mail); ?> ``` 上記で確認をしてみましたが、結果は変わらずでした。 array(6) { ["ご用件"]=> string(0) "" ["お名前"]=> string(0) "" ["電話番号"]=> string(0) "" ["Email"]=> string(0) "" ["お問い合わせ内容"]=> string(0) "" [0]=> string(0) "" }
zohnam

2017/07/28 08:41

これだとload->view で渡している最中にやっぱり加工の余地がありますよね。表示場所とかぐちゃぐちゃになるでしょうけど、function mail()のなかでvar_dump($this->input->post())をしてみてください。
citra

2017/07/28 08:49

なるほど。 しかしご指摘どおりに変えてみましたが、やはり変わらずでした。
zohnam

2017/07/28 08:53

サーバ内の、codeigniterの影響外にあるような場所にhtmlとtest.phpをアップロードして確認することはできませんか?
citra

2017/07/31 02:17

遅くなりましたが、codeigniterの影響外に配置して確認したところ正常に動作いたしました。
guest

0

そのHTMLを適当なサーバにアップし、action指定先のmailだけはこちらでわからないので、指定先をtest.phpとしてテストしてみました。test.phpの中身はこれだけです。

php

1<?php 2 var_dump($_POST);

使用プラウザはGoogle Chromeです。質問で書かれているものと全く同じバージョンです(単に最新ですしね)。
chromeのデベロッパーコンソールで送信時のデータを見ても無駄な空白はありませんでしたし、test.phpが出力した結果も、

array(5) { ["ご用件"]=> string(0) "" ["お名前"]=> string(0) "" ["電話番号"]=> string(0) "" ["Email"]=> string(0) "" ["お問い合わせ内容"]=> string(0) "" }

で、問題ありませんでした。

ですので、なにか問題があるとしたらmailスクリプトの中身だと思います。

投稿2017/07/28 01:33

zohnam

総合スコア1441

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

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

citra

2017/07/28 01:56

私の方でもphpファイルの中身をzohnamさんと同様の内容で行ってみましたが、結果は変わらずでした・・・
zohnam

2017/07/28 02:10

chromeのデベロッパーツールの使い方はわかりますか? F12でツールを開き、ネットワークタブで送信情報を見れますので、適切なフォームデータがおくられているのかどうか確認してみてください。
guest

0

自己解決

name=""に記入していた日本語を英語に変えたところ解決しました。

投稿2017/07/31 05:32

citra

総合スコア11

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

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

0

送信時には不審な点はないのですから、サーバが受け取ったときの処理があやしいですね。
気になってたのですが、action='mail'となっていてphpで処理するということは、mod_rewriteでの転送かなにかをされてるということですよね?

古い記事ですが、

ブラウザのPOSTリクエストは、リダイレクトさせるとGETに化ける?
https://havelog.ayumusato.com/develop/others/e172-http-request-trans.html

というものもあります。ここまで極端なことではなくとも、転送の悪影響でpostデータが少しいじられてる可能性はあると思います。
転送なしで、action='test.php'のような状況で確認してみてください。

投稿2017/07/28 04:35

zohnam

総合スコア1441

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

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

citra

2017/07/28 07:42

codeigniterに組み込んでいるために、action='mail'といった書き方にしていました。 一度Controllerを介しているから・・・とかあるんでしょうか。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問