- ベストアンサー
フォーム内容がメールでうまく取得できない
ホームページ作り初心者です。 くだらない質問かもしれないのですが、行き詰まって悩んでいます…。 どうかよろしくお願い致します。 今、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>
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
気になった点が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 じゃないんですね?
その他の回答 (7)
- nine999
- ベストアンサー率44% (512/1140)
終わってないようなので、私がやった確認方法を書いておきます。 <form action="mailto:自分のアドレス" method="post" enctype="text/plain" name="form1" id="form1"> これで、メールフォームを自分のメールアドレスに送れます。 この他、受信データを表示する専用のCGIを用意して、受信データを加工しないで受け取って見たら、データに問題があれば判ります。どちらかというと、こちらの方が良いと思います。
お礼
エンコーディングタイプを変更することで解決はできたのですが、アクションに「mailto:」を使うと動かなくなります(涙) なぜなのか…まだまだ初心者なので課題が沢山残りました。 受信データ表示用の専用のCGIがあるということも初めて知りましたので、今後積極的に利用しようと思います。 ありがとうございました。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
すみません。 なぜ? <form action="http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi" method="post" name="form1" id="form1">
お礼
やはり結果は「Method Not Allowed」でした。 恥ずかしながらフォームを作ったのが初めてで、CGIの仕組みがまだハッキリわかっておりません…。 今後、このような確認方法も含めて、自力で解決できるようになれるよう頑張ります。 ありがとうございました。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
No.3 です。 コピーペーストしたら余分な文字が・・ <form action="http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi" method="post" name="form1" id="form1"> です。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
No.3 です。 <form action="http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi" method="post" name="form1" id="form1"> として御覧なさい。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
?と思うところがいくつかありますが、 下記サイトに送信してみてください。 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の問題
お礼
「Method Not Allowed」と出ました。 ということはCGIの問題ではないということなのでしょうか(涙) 何か基本的なところが間違っているのか…もう一度色々見直してみます。 ありがとうございました。
- yyr446
- ベストアンサー率65% (870/1330)
POSTされるのはname属性がついた要素だから、 tableが影響してるとは思えないのですが、 cgi側がどうなってるのかわからないので何とも言えませんが、 ご担当者名のテキストボックスの箇所 <input type="text" name="name" size="44" id="name" /> のname="name"が、もしかしてcgi側で悪さしているのでは? 文法的にはそれでもいいですが...
お礼
なるほど!確かにそこからおかしくなってる!!と思って別の名前に変えてみましたが、だめでした…。 でもテーブルのせいではないとわかって安心しました。 CGIがいけないのかな…もう少しよく見てみます。 ありがとうございます。
- nine999
- ベストアンサー率44% (512/1140)
テーブルには問題がないように見受けられます。 改行コードが入っているようなので、HTML側でなくCGIの問題じゃないでしょうか。 試しにformの送り先をmailtoで自分のメール宛に出してみました。 以下のように受信できましたよ。 shopname=テスト name= tel= email= email2= question= button=送信
お礼
どこがおかしいのか全く見当がつかなかったのですが、「CGIがおかしい」とわかったのは大きな収穫です!! 集中して間違い探しをしてみます。 ありがとうございます!
お礼
エンコードタイプを変更したら、無事に解決できました!!! が、なぜ「text/plain」だとうまくいかず「application/x-www-form-urlencoded」だと大丈夫なのかは、調べたのですがまだわかっていません。 CSSの使い方に関しても、自分でも気になっていた部分だったので、勉強不足を痛感しました…。 まだまだ課題が山盛りです。 的確なアドバイスをありがとうございました。 今後精進できるよう頑張ります。