フォーム入力内容について

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
okakensanta
アクティブユーザー
記事: 26
登録日時: 2006年8月29日(火) 10:28

フォーム入力内容について

投稿記事 by okakensanta » 2006年9月14日(木) 19:58

お世話になっております。
またまた、質問させていただきます。

フォーム画面ぺーじをCMSDを利用して作ったのですが、
フォーム入力、送信、エラーで戻ったときに
せっかく入力した内容が消えてしまいます。
二度目だと残っているのですが、
最初の段階で
フォーム入力、送信、エラー、戻る
をやるとだめです。
クッキーかなんかを操作するのでしょうか。
phpのページなので、何かあるのでしょうか。
phpプログラマーの方に聞いたら、
「sessionを使うといいよ」
と言われました。
が、CMSDだとどうやったらいいのか
わかりません・・・
ご教授頂けるとありがたいです。

tsu
パワーユーザー
記事: 208
登録日時: 2006年1月16日(月) 12:00
お住まい: さいたま

投稿記事 by tsu » 2006年9月15日(金) 09:30

JavaScriptでエラーをチェックするメールフォームなら問題ないと思いますよ。
エラー項目の背景色を変えたり、赤文字を表示させたり。

メールフォームじゃなくて買い物カゴとかだったり、、、。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: フォーム入力内容について

投稿記事 by webmaster » 2006年9月15日(金) 13:52

こんにちは、webmasterです。okakensantaさん、いつもご質問ありがとうございます。

phpの場合、どうしても前のページに戻った際にリロードされてしまい、
前回の入力内容が消えてしまうと思います。
これはCMSD特有というよりは、PHPのようなサーバサイドスクリプトを使った場合の
ブラウザの仕様なので対処が難しいと思います。

そのPHPプログラマーの方のように、sessionを使えば確かに対処可能なのですが、
PHPに関してかなり専門的な知識が必要になる上、お使いのメールフォームCGI
のスクリプト解析&改造が必要になるかと思います。

最も簡単な解決方法は、formタグにtarget="_blank"を指定することです。
これだと、入力画面を残したまま、入力チェック画面を別ウィンドウとして表示
することができる為、再入力の場合は単にウィンドウを閉じるだけで済みます。

正常送信後は、javascriptを使って親ウィンドウのlocationを送信完了画面に
変えた後、子ウィンドウを閉じるなどすればOKかと思います。

ただ、ナビゲーション的にあまり良い方法では無い為、非常にお勧めという
わけではありません…。

tsuさんの仰るように、javascriptを使ってサーバ送信前に入力内容チェックを
するのが最も安全ですが、場合によってはそうもいかないこともあるかと思います。

又は、送信直前に入力内容をcookieに期限0で保存しておき、再表示時にcookie
が残っていればそれをフォームの初期値として格納する、というjavascriptの解決
方法もあるかもしれません。ただこちらもそれなりのjavascriptの知識が必要に
なります。単純にcookieに保存するだけだと、セキュリティ的によくない場合も
あるので、もしこの方法を取る場合は慎重に実装なさってください。


CMSDとして、入力フォームの内容を自動的に復元するような仕組みをちょっと
考えてみたのですが、スマートな解決方法が今のところ見つからない為、
現状では申し訳ありませんが上記のような状況です。

また何かございましたらご連絡頂ければ幸いです。

rocoroco
記事: 2
登録日時: 2008年2月22日(金) 14:59

かぶせて質問させてください。

投稿記事 by rocoroco » 2008年2月22日(金) 15:07

上記の↓この内容についてですが
---------------------------------------------------------------------------
又は、送信直前に入力内容をcookieに期限0で保存しておき、再表示時にcookie
が残っていればそれをフォームの初期値として格納する、というjavascriptの解決
方法もあるかもしれません。ただこちらもそれなりのjavascriptの知識が必要に
なります。単純にcookieに保存するだけだと、セキュリティ的によくない場合も
あるので、もしこの方法を取る場合は慎重に実装なさってください。
---------------------------------------------------------------------------

具体的なjavascriptのソースを教えていただくことはできませんでしょうか?

フォームのページをすでに別ウィンドウで開くので
さらに別ウィンドウで開くのは、ちょっとブサイクになってしまうので
javascriptの方法を試したいです。

よろしくお願いします。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: かぶせて質問させてください。

投稿記事 by webmaster » 2008年2月22日(金) 16:12

 rocorocoさん、お返事ありがとうございます。

 具体的なjavascriptソースついては、基本的にご質問にはなるべく具体的に
お答えしたいと思っているのですが、様々なケースが考えられる上に、かなり
本格的なプログラムとなってしまう為、なかなか難しいです。

 一つ、別の案を考えました。
 送信前のフォーム状態を残したまま、iframe上にエラー表示を行う方法です。

 考え方としては、

1) 送信フォームの部分をdivタグで囲む。
2) 送信結果表示用のiframeをフォームの下に置いておく。
3) 送信ボタンを押した時に、submit先をiframeにする。
 と同時に、送信フォーム部分をdisplay:noneにする。
4) 「前に戻る」ボタンを押した際に、iframeを非表示にし、
 送信フォームを再表示する。

 これで、送信フォームの内容がクリアせずにdivタグ内に残されるように
なり、「前に戻る」ボタンで再現されるようになります。

 それほど複雑ではないと思いますが、ある程度javascriptを理解している方
でないと難しいかもしれません。

 解決できなかった場合には、申し訳ありません。
 ソースコードそのものはなかなか難しいのですが、個別のご質問であれば
お答えできるものもあるかと思いますので、またご連絡頂ければ幸いです。

返信