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

解決済みの質問

テキストボックにカーソルを合わせた状態でエンターを押しても、POSTが成功しない

宜しくお願いします。
PHP5.0 MySQL Smartyにて簡単なフォームを開発しています。

テキストボックスにメールアドレスを入力してもらい、
テキストボックス内にまだカーソルが残ったままの状態で、
エンターを押すと、通常、postされるかと思います。
もちろん、type="submit"の保存ボタンも取り付けていますが、
それを利用(押さ)せずに、テキストボックス内にカーソルが残った状態でエンターを押して、postするようにしたいです。
しかし・・・。(下記がソースです)

<form id="form" action="aaa.php" method="post">
<input name="mail" type="text" value="{{$smarty.session.mail}}" size="60" />
<input name="keep" type="submit" value="保存"/>
</form>

上記のような形でaaa.phpにpostさせています。
ですが、受け取り側となるaaa.php内にて、

if(isset($_POST["keep"])){
・・・・

としてpostの判定を行っているのですが、
すべて否定してまい、処理が進みません。
今回、フォームに関連するページをいくつも作成していまして、同じ要領でpostさせるページを作っていますが、
そこでは問題なく作動しています。
上記と同じソースでpostやif判定をしているのですが、
問題のあるフォームだけがpostされない情況です。

何か経験豊富な方でピンとくる問題点は無いでしょうか? 

また、
色々な事を試してみました。
その中で、見つけたことは、
上記のソースにある、
<input name="mail" type="text" value="{{$smarty.session.mail}}" size="60" />
を二度繰り返して
<input name="mail" type="text" value="{{$smarty.session.mail}}" size="60" />
<input name="mail" type="text" value="{{$smarty.session.mail}}" size="60" />
のようにすると、上手くpostされます。
なぜ、テキストボックスを二つ付けるとpostされるのでしょう???
意味不明でかなりはまっています。

ひょっとしたら、postさせるために、基本はこうですよ!
みたいな基本(ボンミス)が抜け落ちている可能性もありますので、
直感的なご意見も頂きたく思います。

ちなみに、Smartyのクラスを拡張して、独自クラスとしていますので、

value="{{$smarty.session.mail}}"

と{{ が二重になっております。

長くなりましたが、宜しくお願いします。

投稿日時 - 2009-05-19 14:41:54

QNo.4971995

すぐに回答ほしいです

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

僕もこの件で初めて知ったことで、出ていくパケットを見たりphpでなくてperlで受信する実験もしてみて、この仕様はおかしいからIEのバグでしょうと思ったわけです。
<form~>の次に<input style="display:none">を書くのもよいかもしれません。
知識が増えました。
有難うございました!

投稿日時 - 2009-05-20 19:31:13

補足

いえいえこちらこそ有難うございます。

perlでもダメでしたか。

<form~>の次に<input style="display:none">を書く...

一度また試してみます。
有難うございます。

投稿日時 - 2009-05-20 21:07:34

ANo.5

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

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

回答(6)

ANo.6

はい、perlで受信した時もphpと同じくkeepが取得できなかったので、
<form~>の次に<input style="display:none">を書いた場合と書かない場合で通信パケットを比較して、IEでは<input style="display:none">を書かない場合にkeepが送信されていないことが分かりました。

投稿日時 - 2009-05-21 01:24:22

お礼

詳細な検証と解説有難うございました。
色々と私も頑張ってみます!!
そうこうしてるうちに、また問題発生ではまってますが・・・。笑

投稿日時 - 2009-05-24 08:02:37

ANo.4

すみません。まだ勘違いしていました。
やっと質問が理解できました。
それはIEのバグです。
一つだけしか使用してはいけない仕様だった場合はIEユーザのためにGCI製作側が対策をしなくてはいけませんね。
二つ付けるとpostされるというのも確認できました。とりあえず対策になっているみたいですね。

投稿日時 - 2009-05-20 18:40:31

お礼

度々有難うございます。

なんと、バグでしたか・・・。

そういえば、この件で色々ネット内を調べていたときに、
テキストボックス関係で、IEがバグだのどうのと、
細かく記載された記事がありました。
飛ばし読みしてたので、自分のレーダーには引っかからずスルーしてました。
なるほど・・・。バグですか・・。
確か通常のpost以外の方法で受け渡ししないとダメ?見たいなことが
書いてあったような・・。javascriptを絡めてだっけ?
まあいいです。
とにかく出来ましたので よかったです!

有難うございました!

投稿日時 - 2009-05-20 19:04:19

ANo.3

<input name="mail" type="text" value="{{$smarty.session.mail}}" size="60" />
<input name="mail" type="text" value="{{$smarty.session.mail}}" size="60" />
のようにすると、上手くpostされるような理解不能な結果になる場合、原因は意外なところにあるかもしれません。
それでも原因はクライアントに返されたHTMLソースに存在していることには間違いなさそうです。
idの値が重複していたり、タグの閉じ忘れはありませんか?
質問文のformはPOSTが成功するはずなので、そのHTMLソースから少しずつ追加して実際のHTMLソースになるまでテストしていけば原因が分かると思います。

投稿日時 - 2009-05-20 16:08:58

補足

有難うございます。

そうなんです。
原因はHTML側にあると思います。
その為、かなりソースを分断して、切り分け切り分けして、
原因を絞りこみました。
そして出た結果が、
<input name="mail" type="text" value="{{$smarty.session.mail}}" size="60" />
のテキストボックを2つ繰り返せばボスとされる
という不可解な現象に行き着きました。
でも、原因を切り分けたのは、
<form> ~ </form>
の間だけです。
<form>の中には、
テキストエリアだったり、
ラジオボタンだったり、
テキストボックス以外にも沢山 <form>内には存在します。
ですので、切り分けは厳重に繰り返しおこなったつもです。
でも、抜けているかもしれませんし、それに、HTML側に問題ありだとわかりましたので、
一つ進みました。
現状は、テキストボックスを2つ強引に作るために、
メールアドレスの入力と、そのアドレスの確認の為の入力で、テキストボックスを2つ連続して設置しました。
上手くいってます。
でも とても 気になりますよね・・・・。
もし、テキストボックス一つだけしか使用してはいけない仕様だった場合、これと同じ現象になったら、怖いですよね。
あー ストレス・・笑

投稿日時 - 2009-05-20 17:01:38

ANo.2

すみません。勘違いでした。
質問文の<form>のHTMLタグには問題はないと思います。
それ以外には分かりませんでした。

投稿日時 - 2009-05-20 00:58:03

お礼

お返事有難うございます。
たった今も、あれこれと悩んでいる情況です。

もうあきらめて、問題点を残したまま、作業を迂回して進めようかなと・・。悩んでいます。

ちょっと気持ちの悪い状態で進めていくのは、
結構つらいものがありまして・・・。

さてどうしましょうか・・・。

投稿日時 - 2009-05-20 01:36:27

ANo.1

<input>が2つ以上あると普通には無理だったと思います。

投稿日時 - 2009-05-20 00:51:39

あなたにオススメの質問