お世話になっております。
またまた、質問させていただきます。
フォーム画面ぺーじをCMSDを利用して作ったのですが、
フォーム入力、送信、エラーで戻ったときに
せっかく入力した内容が消えてしまいます。
二度目だと残っているのですが、
最初の段階で
フォーム入力、送信、エラー、戻る
をやるとだめです。
クッキーかなんかを操作するのでしょうか。
phpのページなので、何かあるのでしょうか。
phpプログラマーの方に聞いたら、
「sessionを使うといいよ」
と言われました。
が、CMSDだとどうやったらいいのか
わかりません・・・
ご教授頂けるとありがたいです。
フォーム入力内容について
Re: フォーム入力内容について
こんにちは、webmasterです。okakensantaさん、いつもご質問ありがとうございます。
phpの場合、どうしても前のページに戻った際にリロードされてしまい、
前回の入力内容が消えてしまうと思います。
これはCMSD特有というよりは、PHPのようなサーバサイドスクリプトを使った場合の
ブラウザの仕様なので対処が難しいと思います。
そのPHPプログラマーの方のように、sessionを使えば確かに対処可能なのですが、
PHPに関してかなり専門的な知識が必要になる上、お使いのメールフォームCGI
のスクリプト解析&改造が必要になるかと思います。
最も簡単な解決方法は、formタグにtarget="_blank"を指定することです。
これだと、入力画面を残したまま、入力チェック画面を別ウィンドウとして表示
することができる為、再入力の場合は単にウィンドウを閉じるだけで済みます。
正常送信後は、javascriptを使って親ウィンドウのlocationを送信完了画面に
変えた後、子ウィンドウを閉じるなどすればOKかと思います。
ただ、ナビゲーション的にあまり良い方法では無い為、非常にお勧めという
わけではありません…。
tsuさんの仰るように、javascriptを使ってサーバ送信前に入力内容チェックを
するのが最も安全ですが、場合によってはそうもいかないこともあるかと思います。
又は、送信直前に入力内容をcookieに期限0で保存しておき、再表示時にcookie
が残っていればそれをフォームの初期値として格納する、というjavascriptの解決
方法もあるかもしれません。ただこちらもそれなりのjavascriptの知識が必要に
なります。単純にcookieに保存するだけだと、セキュリティ的によくない場合も
あるので、もしこの方法を取る場合は慎重に実装なさってください。
CMSDとして、入力フォームの内容を自動的に復元するような仕組みをちょっと
考えてみたのですが、スマートな解決方法が今のところ見つからない為、
現状では申し訳ありませんが上記のような状況です。
また何かございましたらご連絡頂ければ幸いです。
phpの場合、どうしても前のページに戻った際にリロードされてしまい、
前回の入力内容が消えてしまうと思います。
これはCMSD特有というよりは、PHPのようなサーバサイドスクリプトを使った場合の
ブラウザの仕様なので対処が難しいと思います。
そのPHPプログラマーの方のように、sessionを使えば確かに対処可能なのですが、
PHPに関してかなり専門的な知識が必要になる上、お使いのメールフォームCGI
のスクリプト解析&改造が必要になるかと思います。
最も簡単な解決方法は、formタグにtarget="_blank"を指定することです。
これだと、入力画面を残したまま、入力チェック画面を別ウィンドウとして表示
することができる為、再入力の場合は単にウィンドウを閉じるだけで済みます。
正常送信後は、javascriptを使って親ウィンドウのlocationを送信完了画面に
変えた後、子ウィンドウを閉じるなどすればOKかと思います。
ただ、ナビゲーション的にあまり良い方法では無い為、非常にお勧めという
わけではありません…。
tsuさんの仰るように、javascriptを使ってサーバ送信前に入力内容チェックを
するのが最も安全ですが、場合によってはそうもいかないこともあるかと思います。
又は、送信直前に入力内容をcookieに期限0で保存しておき、再表示時にcookie
が残っていればそれをフォームの初期値として格納する、というjavascriptの解決
方法もあるかもしれません。ただこちらもそれなりのjavascriptの知識が必要に
なります。単純にcookieに保存するだけだと、セキュリティ的によくない場合も
あるので、もしこの方法を取る場合は慎重に実装なさってください。
CMSDとして、入力フォームの内容を自動的に復元するような仕組みをちょっと
考えてみたのですが、スマートな解決方法が今のところ見つからない為、
現状では申し訳ありませんが上記のような状況です。
また何かございましたらご連絡頂ければ幸いです。
かぶせて質問させてください。
上記の↓この内容についてですが
---------------------------------------------------------------------------
又は、送信直前に入力内容をcookieに期限0で保存しておき、再表示時にcookie
が残っていればそれをフォームの初期値として格納する、というjavascriptの解決
方法もあるかもしれません。ただこちらもそれなりのjavascriptの知識が必要に
なります。単純にcookieに保存するだけだと、セキュリティ的によくない場合も
あるので、もしこの方法を取る場合は慎重に実装なさってください。
---------------------------------------------------------------------------
具体的なjavascriptのソースを教えていただくことはできませんでしょうか?
フォームのページをすでに別ウィンドウで開くので
さらに別ウィンドウで開くのは、ちょっとブサイクになってしまうので
javascriptの方法を試したいです。
よろしくお願いします。
---------------------------------------------------------------------------
又は、送信直前に入力内容をcookieに期限0で保存しておき、再表示時にcookie
が残っていればそれをフォームの初期値として格納する、というjavascriptの解決
方法もあるかもしれません。ただこちらもそれなりのjavascriptの知識が必要に
なります。単純にcookieに保存するだけだと、セキュリティ的によくない場合も
あるので、もしこの方法を取る場合は慎重に実装なさってください。
---------------------------------------------------------------------------
具体的なjavascriptのソースを教えていただくことはできませんでしょうか?
フォームのページをすでに別ウィンドウで開くので
さらに別ウィンドウで開くのは、ちょっとブサイクになってしまうので
javascriptの方法を試したいです。
よろしくお願いします。
Re: かぶせて質問させてください。
rocorocoさん、お返事ありがとうございます。
具体的なjavascriptソースついては、基本的にご質問にはなるべく具体的に
お答えしたいと思っているのですが、様々なケースが考えられる上に、かなり
本格的なプログラムとなってしまう為、なかなか難しいです。
一つ、別の案を考えました。
送信前のフォーム状態を残したまま、iframe上にエラー表示を行う方法です。
考え方としては、
1) 送信フォームの部分をdivタグで囲む。
2) 送信結果表示用のiframeをフォームの下に置いておく。
3) 送信ボタンを押した時に、submit先をiframeにする。
と同時に、送信フォーム部分をdisplay:noneにする。
4) 「前に戻る」ボタンを押した際に、iframeを非表示にし、
送信フォームを再表示する。
これで、送信フォームの内容がクリアせずにdivタグ内に残されるように
なり、「前に戻る」ボタンで再現されるようになります。
それほど複雑ではないと思いますが、ある程度javascriptを理解している方
でないと難しいかもしれません。
解決できなかった場合には、申し訳ありません。
ソースコードそのものはなかなか難しいのですが、個別のご質問であれば
お答えできるものもあるかと思いますので、またご連絡頂ければ幸いです。
具体的なjavascriptソースついては、基本的にご質問にはなるべく具体的に
お答えしたいと思っているのですが、様々なケースが考えられる上に、かなり
本格的なプログラムとなってしまう為、なかなか難しいです。
一つ、別の案を考えました。
送信前のフォーム状態を残したまま、iframe上にエラー表示を行う方法です。
考え方としては、
1) 送信フォームの部分をdivタグで囲む。
2) 送信結果表示用のiframeをフォームの下に置いておく。
3) 送信ボタンを押した時に、submit先をiframeにする。
と同時に、送信フォーム部分をdisplay:noneにする。
4) 「前に戻る」ボタンを押した際に、iframeを非表示にし、
送信フォームを再表示する。
これで、送信フォームの内容がクリアせずにdivタグ内に残されるように
なり、「前に戻る」ボタンで再現されるようになります。
それほど複雑ではないと思いますが、ある程度javascriptを理解している方
でないと難しいかもしれません。
解決できなかった場合には、申し訳ありません。
ソースコードそのものはなかなか難しいのですが、個別のご質問であれば
お答えできるものもあるかと思いますので、またご連絡頂ければ幸いです。