こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

フォーム内容がメールでうまく取得できない

ホームページ作り初心者です。
くだらない質問かもしれないのですが、行き詰まって悩んでいます…。
どうかよろしくお願い致します。

今、CGIを使ってフォームを作っています。
基本的なフォームでは問題がないので、CGI自体に問題はないと思います。
それが、メールフォームをテーブルで囲まれたデザインにした途端、フォーム内容がうまくメールで取得できなくなりました。

本当なら

「shopname = ○○○○
 name = ○○○○
 tel = ○○○○
 email = ○○○○
 question = ○○○○」

と送ってほしいのに、

「shopname =

 ○○○○
 name」

となんとも中途半端な内容が送られてきます…。

テーブルを使ったからCGIがうまく作動しないのか、HTMLがおかしいのか、CGIがおかしいのか、どこがいけないのかわかりません。

アドバイスいただけたら嬉しいです。
宜しくお願い致します。

以下、フォームのHTMLです。
---------------------------------------
<form action="./postmail.cgi" method="post" enctype="text/plain" name="form1" id="form1">
<table width="520" border="0" cellspacing="2" cellpadding="2" bgcolor="#7EBEB6">
<tr>
<td width="152" bgcolor="#FFFFFF" class="style3"><center>
店舗名
</center></td>
<td width="354" bgcolor="#FFFFFF"><input type="text" name="shopname" size="44" />
</td>
</tr>
<tr>
<td width="152" bgcolor="#FFFFFF" class="style3"><center>
ご担当者名
</center></td>
<td width="354" bgcolor="#FFFFFF"><input type="text" name="name" size="44" id="name" />
</td>
</tr>
<tr>
<td width="152" bgcolor="#FFFFFF" class="style3"><center>
お電話番号
</center></td>
<td width="354" bgcolor="#FFFFFF"><input type="text" name="tel" size="44" id="tel" />
</td>
</tr>
<tr>
<td width="152" bgcolor="#FFFFFF" class="style3"><center>
メールアドレス
</center></td>
<td width="354" bgcolor="#FFFFFF"><input type="text" name="email" size="44" id="email" />
</td>
</tr>
<tr>
<td width="152" bgcolor="#FFFFFF" class="style3"><center>
メールアドレス(確認用)
</center></td>
<td width="354" bgcolor="#FFFFFF"><input type="text" name="email2" size="44" id="email2" />
</td>
</tr>
<tr>
<td width="152" bgcolor="#FFFFFF" class="style3"><center>
お問い合わせ内容
</center></td>
<td width="354" bgcolor="#FFFFFF"><textarea name="question" cols="43" rows="7"></textarea></td>
</tr>
</table>
<br />
<input type="submit" name="button" id="button" value="送信" />
<input type="reset" name="button2" id="button2" value="すべてクリア" />
<br />
</form>

投稿日時 - 2010-03-19 16:22:01

QNo.5764045

すぐに回答ほしいです

質問者が選んだベストアンサー

気になった点が2つほど

その1:ソースが見づらい
input 要素が閉じてあるってことは XHTML なんですよね?
だったら見栄え関連はすべてスタイルシートで設定するべきです。

<form action="./postmail.cgi" method="post" enctype="text/plain" name="form1" id="form1">
<table>
<tr>
<th>店舗名</th>
<td><input type="text" name="shopname" /></td>
</tr>
<tr>
<th>ご担当者名</th>
<td><input type="text" name="name" id="name" /></td>
</tr>
<tr>
<th>お電話番号</th>
<td><input type="text" name="tel" id="tel" /></td>
</tr>
<tr>
<th>メールアドレス</th>
<td><input type="text" name="email" id="email" /></td>
</tr>
<tr>
<th>メールアドレス(確認用)</th>
<td><input type="text" name="email2" id="email2" /></td>
</tr>
<tr>
<th>お問い合わせ内容</th>
<td><textarea name="question" cols="43" rows="7"></textarea></td>
</tr>
</table>
<p>
<input type="submit" name="button" id="button" value="送信" />
<input type="reset" name="button2" id="button2" value="すべてクリア" />
</p>
</form>

HTML はここまでシンプルにできます。
あとは CSS で

#form1 table {
border-collapse: collapse;
width:520px;
}
#form1 th,
#form1 td {
width:152px;
border:2px solid #7EBEB6;
font-weight: normal;
padding:2px;
}
#form1 td {
width:354px;
}
input[type="text"] {
width:230px;
}

こんな感じで宜しいのでは?
ソースを見易く書くというのは、コーディング上の記述ミスを劇的に減らすという効果がありますよ。


その2:エンコードタイプが text/plain ?
正直そんなスクリプトは初めてみました。
本当に application/x-www-form-urlencoded じゃないんですね?

投稿日時 - 2010-03-20 01:39:00

お礼

エンコードタイプを変更したら、無事に解決できました!!!

が、なぜ「text/plain」だとうまくいかず「application/x-​www-form-urlencoded」だと大丈夫なのかは、調べたのですがまだわかっていません。
CSSの使い方に関しても、自分でも気になっていた部分だったので、勉強不足を痛感しました…。
まだまだ課題が山盛りです。

的確なアドバイスをありがとうございました。
今後精進できるよう頑張ります。

投稿日時 - 2010-03-23 09:34:22

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.8

終わってないようなので、私がやった確認方法を書いておきます。

<form action="mailto:自分のアドレス" method="post" enctype="text/plain" name="form1" id="form1">

これで、メールフォームを自分のメールアドレスに送れます。
この他、受信データを表示する専用のCGIを用意して、受信データを加工しないで受け取って見たら、データに問題があれば判ります。どちらかというと、こちらの方が良いと思います。

投稿日時 - 2010-03-20 12:19:34

お礼

エンコーディングタイプを変更することで解決はできたのですが、アクションに「mailto:」を使うと動かなくなります(涙)
なぜなのか…まだまだ初心者なので課題が沢山残りました。

受信データ表示用の専用のCGIがあるということも初めて知りましたので、今後積極的に利用しようと思います。

ありがとうございました。

投稿日時 - 2010-03-23 10:07:05

ANo.7

すみません。
なぜ?
<form action="http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi" method="post" name="form1" id="form1">

投稿日時 - 2010-03-20 08:23:07

お礼

やはり結果は「Method Not Allowed」でした。

恥ずかしながらフォームを作ったのが初めてで、CGIの仕組みがまだハッキリわかっておりません…。
今後、このような確認方法も含めて、自力で解決できるようになれるよう頑張ります。
ありがとうございました。

投稿日時 - 2010-03-23 09:52:10

ANo.6

No.3 です。
コピーペーストしたら余分な文字が・・
<form action="​http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi" method="post" name="form1" id="form1">
です。

投稿日時 - 2010-03-20 08:21:26

ANo.5

No.3 です。
<form action="​http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi"​ method="post" name="form1" id="form1">
として御覧なさい。

投稿日時 - 2010-03-20 08:19:47

ANo.3

?と思うところがいくつかありますが、
下記サイトに送信してみてください。
Enviroment Variable and FORM,COOKIE ( http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi )

<form action="http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi" method="post" enctype="text/plain" name="form1" id="form1">

データーが渡せていればCGIの問題

投稿日時 - 2010-03-19 17:15:42

お礼

「Method Not Allowed」と出ました。
ということはCGIの問題ではないということなのでしょうか(涙)
何か基本的なところが間違っているのか…もう一度色々見直してみます。
ありがとうございました。

投稿日時 - 2010-03-19 21:58:46

ANo.2

POSTされるのはname属性がついた要素だから、
tableが影響してるとは思えないのですが、
cgi側がどうなってるのかわからないので何とも言えませんが、
ご担当者名のテキストボックスの箇所
<input type="text" name="name" size="44" id="name" />
のname="name"が、もしかしてcgi側で悪さしているのでは?
文法的にはそれでもいいですが...

投稿日時 - 2010-03-19 16:50:54

お礼

なるほど!確かにそこからおかしくなってる!!と思って別の名前に変えてみましたが、だめでした…。
でもテーブルのせいではないとわかって安心しました。
CGIがいけないのかな…もう少しよく見てみます。
ありがとうございます。

投稿日時 - 2010-03-19 21:31:57

ANo.1

テーブルには問題がないように見受けられます。
改行コードが入っているようなので、HTML側でなくCGIの問題じゃないでしょうか。
試しにformの送り先をmailtoで自分のメール宛に出してみました。
以下のように受信できましたよ。

shopname=テスト
name=
tel=
email=
email2=
question=
button=送信

投稿日時 - 2010-03-19 16:46:46

お礼

どこがおかしいのか全く見当がつかなかったのですが、「CGIがおかしい」とわかったのは大きな収穫です!!
集中して間違い探しをしてみます。
ありがとうございます!

投稿日時 - 2010-03-19 21:29:38

あなたにオススメの質問