ミスチルの大名曲の数々が配信決定!! 31日間無料!!

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

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を見た人が検索しているワード

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

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ページ移動した場合の、フォームデータの保持

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フォーム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で通信すれば、そもそも履歴に残らないので、「戻る」では送信前のページには戻りません。

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戻ると、記入フォームの内容が消えるのはなぜ?

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

Aベストアンサー

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

Qメール送信フォームとhistory.back()

現在PHPでメール送信フォームを作っています。画面表示としては、
入力画面→確認画面→送信という流れなのですが、確認画面で「戻る」ボタンを設置して入力画面に戻れるようにしたいと思っています。
そこで、入力画面を当初はhtmlとし、確認画面にhistory.back()を設置してうまく入力値が入っている状態になっていたのですが、入力画面をphpファイルにしたとたんhistory,back()すると空っぽの入力画面が表示されてしまうようになりました。
確認画面で「戻る」ボタンを設置し、入力画面に戻るにはどうすればいいでしょうか?

Aベストアンサー

> 戻るボタンには、前と同じくhistory.back()を設定しています。
> この状態で試しているのですがやはり値が消えてしまっています。

history.back() では、hiddenの値が入力画面に渡されません。
戻るボタンのonClickで、formのaction属性を入力画面のURLに書き換えた上で、そのformをsubmit() するような処理が必要です(JavaScriptで記述します)。

また、上記とは別の方法もあります。history.back() で戻れないのは、入力画面がクライアントにキャッシュされていないためです。キャッシュされていないのは、セッションを使用しているためです。

PHP の session_cache_limiter() 関数を使う(入力画面を表示するプログラム内で、privateに設定する)ことで、history.back() が効くようになると思います。

ただ、一般的にはhistory.backを使わない方法を取ることが多いと思います。

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


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

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

Q入力フォームの値が消える

フォーム送信後、入力値を間違えたので戻ろうとすると、入力フォームの値が消えてしまっています。

入力値が保持されているサイトと消えてしまうサイトとあるようなのですが、

これはどこで制御されているのでしょうか?コード?サーバ設定?よろしければ教えてください。

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

Aベストアンサー

>サーバにポストされたデータを再びCGIに
>埋め込み直すというような感じでしょうか。
そうですね。そんな感じです。

>するとフォーム画面は.htmlファイルでなく
>.cgiファイルでしょうか?
これは、ちょっと違います。
サーバー上では、プログラムが動きます。
拡張子はそれぞれだいたい決っていて、
.php .asp .jsp などもあります。
.cgiは、perlのプログラムであったり、
シェルプログラムであったり、または
c言語で作成されたものであったりと、
いろいろです。

「戻る」を押したときは、サーバー上のプロフラムが、
(1)戻るを想定して表示している
(2)たまたま、表示されている
のどちらかです。

よって、うまくいったり行かなかったりします。

まずは、ブラウザーとサーバーの関係を
勉強してみると良いと思います。

QFORMで送信ボタンと戻るボタンを2つつけてそれぞれ遷移先を変えたい

  
以下のような画面を作りたいのですが↓

--------------------------------------------------------------------------------
● a.php (ユーザ情報入力画面) ※フォームに入力する画面
 
 <FORM method="POST" action="b.php">
  <INPUT type="text" name="mail">
  <INPUT type="submit" name="submit" value="確認">
 </FORM>

● b.php (ユーザ情報入力確認画面)※フォームに入力された値を表示する画面

 <FORM method="POST" action="c.php">
  <!-- ここには、フォームに入力された値を表示する -->
  <INPUT type="submit" name="submit" value="登録"> // c.php に遷移する
  <INPUT type="submit" name="submit" value="戻る"> // a.php に戻る
 </FORM>

● c.php (完了画面)
--------------------------------------------------------------------------------
b.php について質問なのですが、
b.phpにおいて、登録ボタンと戻るボタンを2つつけて、
それぞれ遷移先を変えたいのですが、どうすればいいんでしょうか・・・?
<FORM method="POST" action="c.php">と書いてしまうと、
戻るボタンを押しても戻らずに、c.phpに遷移してしまいますよね??
こういう場合ってJavaScriptとかで遷移先を指定するんですか・・?
もしそうでしたら、JavaScriptがよくわからないので
できればサンプルコード示していただけると助かります・・・。
  

  
以下のような画面を作りたいのですが↓

--------------------------------------------------------------------------------
● a.php (ユーザ情報入力画面) ※フォームに入力する画面
 
 <FORM method="POST" action="b.php">
  <INPUT type="text" name="mail">
  <INPUT type="submit" name="submit" value="確認">
 </FORM>

● b.php (ユーザ情報入力確認画面)※フォームに入力された値を表示する画面

 <FORM method="POST" action="c.php">
  <!-- ここには、フォームに入...続きを読む

Aベストアンサー

はじめまして。

<INPUT type="submit" name="submit" value="登録" onClick="form.action='c.php';return true">
<INPUT type="submit" name="submit" value="戻る" onClick="form.action='a.php';return true">

でいいと思います。(実際、このコードで使っています)
値を渡すには、FORM内にhiddenで、値を設定しておいて、methodをPOSTに設定しておけば、渡せます。

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。


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

人気Q&Aランキング