いつもお世話になっております。

PHP初心者です。

DVD/CDレンタルサイトぽすれんのマイリストのように各リストの左のチェックボックスにチェックを入れ、

商品詳細ページにハイパーリンクで飛んで、ブラウザバックでマイリストに戻るとチェックボックスに

チェックが残っているようなプログラムを作るにはどうしたらよいでしょうか?

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

基本的には「戻る・進む」での値の保持はブラウザの役割なので、サーバ側でプログラムというのには限界があると思います。



対処法としては、JavaScriptなどで「チェックを入れた直後」にクッキーへ保存しておき、ページが再度開かれたときに復元する、という手段が有効ではないでしょうか。

ただ、チェックボックスが大量にあればその分動作が重くなりますし、IEではチェックが消えますがFireFoxや他のブラウザでは消えないものもあるようですのでその辺も配慮が必要かもしれません。

少し高度ですがこちらを参考してみてください

・Switched-off Blog » Blog Archive » "javascript:history.back();"してもフォームの内容が消えないようにしたい!
http://switched-on.gs/blog/?p=208
    • good
    • 0
この回答へのお礼

早速の回答有難うございます。

参考にしてみます。

お礼日時:2011/02/15 11:52

ブラウザの戻るボタンは信用しないことです。


「戻る」というリンクをつくっていて実は「進む」というのが
現実的な処理です。
    • good
    • 0
この回答へのお礼

回答有難うございます。

お礼日時:2011/02/15 11:52

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QVC++ MFCチェックボックスの色の変更について

チェックボックスに付くテキストの色や背景の色を変える事は調べていく中で可能だということが
分かったのですが、
チェックやチェックの四角形内部の色を変える事は可能でしょうか?

Aベストアンサー

CButtonの派生クラスをつくり、CButton::DrawItemをオーバーライドしてオーナー描画すれば可能かと思います。

Qブラウザの戻るボタンを押したときのデータの保持の仕方

頻繁に書き込みして申し訳ありません。
どなたかお手すきでしたら、稚拙な質問にお付き合いお願い致します。


前回セレクトメニューについて教えて頂いたのですが、今回もセレクトメニューに関しての質問です。

IEでの話なのですが、セレクトメニュー1・2を選択しsubmitボタンで次のページに行き、
ブラウザの戻るボタンで戻ってきたときにセレクトメニュー2の方のデータ(value)だけ保持できていません。
前にIEはそのような仕様だという話を聞いたのですが、その時もこちらで質問させてもらいました。
その時はselectタグにidを仕込んでおき、「window.onload」でgetElementByIdを使用するやり方を
教わったのですが、今回はそれでうまくいきません。

ネットで検索していてcookieを使用してデータを保持しておくというやり方も見かけたのですが、
一番効率のよいやり方はどのようなものになるのでしょうか。

どうかよろしくお願いします。


以下ソースとなります。



<html>
<head>
<title>テストテスト</title>
<script language="JavaScript"><!--
menuItem = [ [ ],
["あああ","あああ2","あああ3","あああ4","あああ5"],
["いいい","いいい2"],
["ううう","ううう2","ううう3"],
["えええ","えええ2","えええ3","えええ4"] ];
function clearOption(len){
var i;
for (i=0; i<len; i++){
document.aaa.bbb.options[i] = null;
}
}

function setMenuItem(n){
optlen = document.aaa.bbb.options.length;
while(optlen > 0){
clearOption(optlen);
optlen = document.aaa.bbb.options.length;
}

if (menuItem[n].length > 0){
for (i=0; i<menuItem[n].length; i++){
document.aaa.bbb.options[i] = new Option(menuItem[n][i],menuItem[n][i]);
for( j=1; j<=4; j++ ){
if( document.aaa.Maker.selectedIndex == [j] ){
document.aaa.bbb.options[i].value = i+([j]*10);
}
}
}
}
}
window.onload = function(){
setMenuItem(document.getElementById('q1').value);
//alert(document.getElementById('q2').value);
}
// --></script>
</head>
<body>
<form name="aaa" action="./next.html" method="POST">
<select name="Maker" id="q1" onChange="setMenuItem(this.selectedIndex)">
<option value="" selected>--- 選択してください ---</option>
<option value="1">ひとつ</option>
<option value="2">ふたつ</option>
<option value="3">みっつ</option>
<option value="4">よっつ</option>
</select>
<select name="bbb" id="q2">
<option value="" selected>--- 選択してください ---</option>
</select>
<input type="submit" name="ok" vakue="ok">
</form>
</body>
</html>

頻繁に書き込みして申し訳ありません。
どなたかお手すきでしたら、稚拙な質問にお付き合いお願い致します。


前回セレクトメニューについて教えて頂いたのですが、今回もセレクトメニューに関しての質問です。

IEでの話なのですが、セレクトメニュー1・2を選択しsubmitボタンで次のページに行き、
ブラウザの戻るボタンで戻ってきたときにセレクトメニュー2の方のデータ(value)だけ保持できていません。
前にIEはそのような仕様だという話を聞いたのですが、その時もこちらで質問させてもらい...続きを読む

Aベストアンサー

ブラウザによって動作が変わってしまいそうな気がしますね。
検証はしてないですが。

どなたかが仰るように、クッキーで値を変えてあげると良いかも知れませんね。

cookieなんですが、この情報はjavascriptの方で取得してあげる必要があります。
javascriptでは、document.cookieでドメイン上のcookieが取得できると思うので、取得した後parserなどの関数を用意して必要な値を得る必要があると思います。

cookieの発行はsubmit後のページで、サーバーサイドから出してあげた方が良いと思います。

ただ、戻るの動作によってはページの表示自体がおかしくなりそうな気もしますね。

上手く動いたら教えてください!

Qエクセル チェックボックスの初期値を条件により変更したい。

エクセル チェックボックスの初期値を条件により変更したい。

表題の質問をさせていただきます。

チェックボックスを20個あらかじめ配した以下のような表があります。

A列:社員ID (随時入力)
B列:社員名 (VLOOKUPで表示)
C列:チェックボックスを配置
D列:チェックボックスのリンクするセルに設定

チェックボックスの初期値は空欄(FALSE)にしています。

社員IDを入力した時に、連動してチェックボックスの値を「TRUE」にしてチェックを入れたいのです。
現在は社員ID入力後にチェックボックスをクリックしています。

よろしくお願いいたします。

Aベストアンサー

フォームコントロールのチェックボックスですか?

>社員IDを入力した時に、連動してチェックボックスの値を「TRUE」にしてチェックを入れたいのです。
チェックボックスを使う意味が無くなるように思いますがどうでしょうか。

回答としては、A列セルをリンクするセルに設定してはいけないでしょうか。

Qページ移動した場合の、フォームデータの保持

PHP初心者です。

私が作っているPHPのシステムで、ユーザーがフォームデータ入力途中に、他のページに移動すると、「戻る」ボタンなどですぐに戻ってきても、入力したフォームデータが消えてしまいます。

例えば、この「教えてgoo」の「新しい質問をする」のフォームはPHPで生成されていますが、

http://oshiete1.goo.ne.jp/oshiete_new.php3?c=256

途中でちょっと他のページに行っても、(すぐ戻れば?)入力したデータは保持されますよね。

こんなふうにしたいのですが、どうすればよいでしょうか?
「戻る」ボタンで戻ったときに、サーバーから毎回新しいXHTMLをロードしてくるので、入力データがクリアされてしまうのでしょうか?

フォーム入力⇒確認画面⇒「戻る」ボタンで戻るとフォームデータが保持されないということではなく、あくまでフォーム入力中に、ちょっと他のページに行って戻ってくるという設定です。

よろしくお願いします。

Aベストアンサー

原因はセッション関連にありそうですね。
session_cache_limiter()
というのは指定されていますか?
恐らく現状はnocache(ページ内容をキャッシュしない状態)になっているのだと思います。

もし
session_cache_limiter('nocache');
となっていれば、publicもしくはprivateへ変更してみて下さい。
ないようでしたら、session_start()の前に
session_cache_limiter('public');
session_cache_limiter('private');
のどちらかを記述してみて下さい。
publicだと、クライアントマシン、プロキシのどちらもキャッシュを保持しますが、
privateだとクライアントマシンのみキャッシュを保持します。
どちらが良いのかは使い方によると思いますし、
nocacheでないと困る時もありますから。

session_startを削除してしまって良いかどうかは、
他の部分の処理との関連が分からないので何とも言えないです。

一度試してみて下さい。

参考URL:http://jp.php.net/session_cache_limiter

原因はセッション関連にありそうですね。
session_cache_limiter()
というのは指定されていますか?
恐らく現状はnocache(ページ内容をキャッシュしない状態)になっているのだと思います。

もし
session_cache_limiter('nocache');
となっていれば、publicもしくはprivateへ変更してみて下さい。
ないようでしたら、session_start()の前に
session_cache_limiter('public');
session_cache_limiter('private');
のどちらかを記述してみて下さい。
publicだと、クライアントマシン、プロキシのどち...続きを読む

Qエクセル 複数のチェックボックスをリンクさせる

こんにちは、エクセル2010を使っています。

チェックボックスについて、解らない事が出てきましたので、教えて頂けませんでしょうか。

book1とbook2にチェックボックスがあります。

本来利用するのは、Book1のチェックボックスなのですが、Book2に作ったチェックボックスにチェックを入れると、Book1のチェックボックスにもチェックが入るようにしたいのです。

詳しい方、教えて頂けませんでしょうか。

よろしくお願い致します。

Aベストアンサー

以下のような手順で、2つのチェックボックスのリンクするセルを同一のセルにします。

ご使用のチェックボックスがフォームのチェックボックスなら、Book1のチェックボックスをで右クリックして「コントロールの書式設定」で「リンクするセル」を指定します。
Book2のチェックボックスで右クリックしてチェックボックスを選択し、数式バーに「=」と入力し、Book1のリンクするセルを選択します(これで「=[Book1]Sheet3!$A$3」のような他ブックを参照する数式になります)。

QフォームPOST後「戻る」時のチェック値の取得

フォームでPOSTをしたあと、history.backや戻るボタンで戻ったときに、POST時に選択したラジオボタンのcheckedもfalseになってしまうのですが、チェックされているものを取得することはできるのでしょうか。

■form部分
<form name="form1" method="post" action="...">
<input type="radio" name="radio1" value="1">1<br />
<input type="radio" name="radio1" value="2">2<br />
<input type="radio" name="radio1" value="3">3<br />
</form>

■JavaScript部分
var radio1 = document.form1.radio;
for(var i=0;i<radio1.length;i++) {
if (radio1[i].checked) {
alert(i);
}
}

このようなコードで、選択してPOST後、「戻る」で入力ページ表示時にJavaScriptを実行しても、
radio1[i].checkedは全てfalseになってしまいます。

また選択→POST→戻る→そのままPOSTとすると、選択したvalue値は正しくサーバーに送られます。

「戻る」でのページ表示時に選択したものを取得する方法があれば教示いただけますか。

フォームでPOSTをしたあと、history.backや戻るボタンで戻ったときに、POST時に選択したラジオボタンのcheckedもfalseになってしまうのですが、チェックされているものを取得することはできるのでしょうか。

■form部分
<form name="form1" method="post" action="...">
<input type="radio" name="radio1" value="1">1<br />
<input type="radio" name="radio1" value="2">2<br />
<input type="radio" name="radio1" value="3">3<br />
</form>

■JavaScript部分
var radio1 = document.form1.radio;
for(var i=...続きを読む

Aベストアンサー

どのブラウザのどのバージョンで確認されているのでしょうか。
記憶では、質問の挙動は、ブラウザによって異なると思いますよ。
仮に、質問の挙動に限定するならば、初回の送信時に、cookieやLocal Storageに保存すれば参照できます。
また、複数回の送信をされたくない場合は、明示的にJSで値をリセットするか、あるいは、ajaxで通信すれば、そもそも履歴に残らないので、「戻る」では送信前のページには戻りません。

QEXCELVBAのフォームコントロールおよびActiveXコントロールのチェックボックスについて

チェックボックスはフォームコントロールとActiveXコントロールにも両方あると思います。
ActiveXコントロールであればVBAにてイベントプロシジャーに記載したり、プロパティ値を設定可能なのですが
①フォームコントロールではクリックイベント等どこに記述可能なのでしょうか?
②他のオブジェクト(例えばコマンドボタン)等のイベントでフォームコントロール(チェックボックス)のValue値の変更は可能なのでしょうか?
③ActiveXコントロールのチェックボックスであれば、例えばシートに張り付けた場合、チェックボックスオブジェクトはシートオブジェクトの直下にきます。
フォームコントロールで埋め込んだチェックボックスはどの直下になるのでしょう?(アプリケーション?ブック?シート?それ以外?)
④上記①②が不可能の場合、ActiveXコントロールのチェックボックスとフォームコントロールのチェックボックスは見た目が異なりますが(ActiveXコントロールの方は影がついて立体的に見える。
まず、チェックボックスのこの影の部分はSpecialEffectプロバティを0(fmButtonEffectFlat)に置き換えれば消えますが、フォームコントロールのチェックボックスと比べ線の太さが異なります。ActiveXコントロールのチェックボックスの□の線の太さをフォームコントロールのチェックボックスの□の線の太さと同じくらいに変更って可能(どこのプロバティ)なのでしょうか?

チェックボックスはフォームコントロールとActiveXコントロールにも両方あると思います。
ActiveXコントロールであればVBAにてイベントプロシジャーに記載したり、プロパティ値を設定可能なのですが
①フォームコントロールではクリックイベント等どこに記述可能なのでしょうか?
②他のオブジェクト(例えばコマンドボタン)等のイベントでフォームコントロール(チェックボックス)のValue値の変更は可能なのでしょうか?
③ActiveXコントロールのチェックボックスであれば、例えばシートに張り付けた場合、チ...続きを読む

Aベストアンサー

貴重な返事をありがとうございました。

ある意味では、Excel VBAは特殊・特例だと覚えておいて良いと思います。
理由は、シートモジュール(正式にはオブジェクト・モジュール)が限りなく多いのです。(物理的には、百数十個だと思います)そんな環境下では、クラスでインスタンスを設けるか、もしくは、標準モジュールに書くか、どちらかだと思うのです。しかし、VBAでは、本格的なクラスを使えないのも問題が残ります。

これは、VB(旧VB6含む)にはない環境だからです。例えば、Word VBAになると、ふつう、ThisDocument に入れれば済むことですが、Excelの場合、いちいち、オブジェクトモジュールで、Me やシート名を入れるという手間を忘れると、エラーを起こすことがあるからです。

VBは、VS2005の時に、技術学校に習いに行ったら、クラスは飛び越していましたので、わざわざ、作って講師に見せて上げました。あれから、また再び大きく変わったようです。

さて、もうひとつ書籍の話に触れておくのですが、基本の教科書というのは、97の頃に出た『Office VBA プログラマーズ・ガイダンス』*というのがあるのですが、今は、この本を読んでいる人は皆無に等しいのです。逆引き辞典をお好きではないというのは、なんとなく分かるのですが、今一度、原点を振り返って、この先をどう進めていくのか、今のVBAの全体の流れを見直したほうがよろしいかと思います。私の印象では、だいぶ、まずい状況になっているなって感じています。(*現在は「VBA 開発の基礎知識」という名称のようですが、本にはなっていないようです。)

別項で、Code VBAやRibbon の CallBack のことを書きましたが、事もあろうに、Microsoft 側が、自社外のものを推奨していることと、それが、有償であること、もうひとつ、アジアの言語は、なんとなく蚊帳の外のような気がしてならないのです。特に、日本はガラパゴス化されているようです。日本のマスコミの力が弱いという理由もあるように思います。英語が得意な人でも、なかなか、Microsoft のマニュアルの英文は読みにくいはずです。

まだ、仕事の人生が、十分に残っていらっしゃるようなら、是非、この先の見通しを探ってみたほうがよろしいかと存じます。そういう私は、今は完全に dead end(袋小路) に入り込んでしまっています。

貴重な返事をありがとうございました。

ある意味では、Excel VBAは特殊・特例だと覚えておいて良いと思います。
理由は、シートモジュール(正式にはオブジェクト・モジュール)が限りなく多いのです。(物理的には、百数十個だと思います)そんな環境下では、クラスでインスタンスを設けるか、もしくは、標準モジュールに書くか、どちらかだと思うのです。しかし、VBAでは、本格的なクラスを使えないのも問題が残ります。

これは、VB(旧VB6含む)にはない環境だからです。例えば、Word VBAになると、ふつう、T...続きを読む

Q戻ると、記入フォームの内容が消えるのはなぜ?

よくあるWEB上のアンケートフォームなどで、
記入したあとOKボタンを押し、「記入漏れがあります」と指摘されて、ブラウザのバックキーで戻ると(あるいは指定のボタンで戻ると)、記入した内容がすべて消えていて、またイチから入力し直し…ということがたまにあります。
これは一般的には、ユーザー側の問題なのでしょうか? サイト側の問題なのでしょうか?
詳しい方がいましたらどうぞ教えてください。m(_ _)m

Aベストアンサー

基本的にはユーザー側の問題だと思いますが、サイト側でキャッシュさせないようにすることは可能だと思います。
そもそも記入した内容が消えているというのは、記入した状態のページがキャッシュされておらず、再度ページが新規に読み込まれるという症状です。ということは、例えばユーザー側がキャッシュをオフにしたりしておくと、通常は消えてしまうということになります。
ただ、キャッシュが設定してあっても、何かのはずみに消えてしまうことは実際にあって、そのあたりは良く分かりません。100%消えないで戻れるように作ることは、サイト側ではできないと思います。
したがって、そういう必要があるサイトでは、Backボタンではなく「再編集」とか「前に戻る」とかいう機能を、ちゃんとボタンで設定してあるはずです。ここOKWebもそうですね。

Q2つ以上のチェックボックスを連動させるには?

Eecelで、同一シートに複数のチェックボックスがあるとき、ある特定のチェックボックスにチェックを入れると、他の特定のチェックボックスに自動的にチェックが入るようにするには、どうすればいいのでしょうか?

Aベストアンサー

チェックボックスは「フォーム」のチェックボックスを使用されていますか?
その場合、リンクするセルを指定できるはずです。
ここでVBAを使って
仮に1A1にあるのチェックボックスにチェックを入れた時、
B1、C1のチェックボックスにチェックを入れたいとします。
Sub test()
If Cells(1, 1) = true Then
cells(1,2)=true
cells(1,3)=true
elseif Cells(1, 1) = False Then
cells(1,2)=false
cells(1,3)=false
End if

これをA1のチェックボックスの「マクロを登録」のところで指定して下さい。

これで連動すると思いますが。

Qcheckboxをクリックしてリロードした際、クリックしたcheckboxのvalueの値を保持したい。

checkboxをクリックした後、リロードをしてクリックされたcheckboxのvalueの値を表示したいと思っております。
ただ、下記のソースでは動作しませんでした。
リロード時のvalueの値の引渡し方法に問題があるのだろうと思いますが、どう記述すればよいか分かりませんでした。
その為、どのような記述を行えばよいかアドバイスをいただければと思います。

【ソース】
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<script type="text/javascript">
function load() {
window.alert(value);
}
</script>
<title>title</title>
</head>

<body onload="load();">
<p>valueは1<input type="checkbox" name="checkbox1" value="1" onclick="location.reload()" onkeypress="location.reload()" /></p>
<p>valueは2<input type="checkbox" name="checkbox2" value="2" onclick="location.reload()" onkeypress="location.reload()" /></p>
<p>valueは3<input type="checkbox" name="checkbox3" value="3" onclick="location.reload()" onkeypress="location.reload()" /></p>
</body>
</html>

以上、よろしくお願いします。

checkboxをクリックした後、リロードをしてクリックされたcheckboxのvalueの値を表示したいと思っております。
ただ、下記のソースでは動作しませんでした。
リロード時のvalueの値の引渡し方法に問題があるのだろうと思いますが、どう記述すればよいか分かりませんでした。
その為、どのような記述を行えばよいかアドバイスをいただければと思います。

【ソース】
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/x...続きを読む

Aベストアンサー

ちょっと手を抜いているけど、こんな感じでいけるのでは?

<script>
window.onload=load;
function load() {
var f=document.getElementById("f0");
var v="";
var s=location.search.substr(1).split("&")
for(var i=0;i<f.length;i++){
if(f[i].type=="checkbox"){
f[i].onclick=function(){ this.form.submit(); }
f[i].onkeypress=function(){ this.form.submit(); }
for(var j in s){
if(s[j]==f[i].name+"="+f[i].value) f[i].checked=true;
}
if(f[i].checked) v+=(v==""?"":",")+f[i].value;
}
}
alert(v)
}
</script>

<form id="f0">
<p>valueは1<input type="checkbox" name="checkbox1" value="1" /></p>
<p>valueは2<input type="checkbox" name="checkbox2" value="2" /></p>
<p>valueは3<input type="checkbox" name="checkbox3" value="3" /></p>
</form>

ちょっと手を抜いているけど、こんな感じでいけるのでは?

<script>
window.onload=load;
function load() {
var f=document.getElementById("f0");
var v="";
var s=location.search.substr(1).split("&")
for(var i=0;i<f.length;i++){
if(f[i].type=="checkbox"){
f[i].onclick=function(){ this.form.submit(); }
f[i].onkeypress=function(){ this.form.submit(); }
for(var j in s){
if(s[j]==f[i].name+"="+f[i].value) f[i].checked=true;
}
...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング