form内容確認後、戻るボタンを押しても一部のブラウザでは入力値が保持されません。
firefox(mac)では動作せず。
※Googleクロム(mac)、Safari(mac)は動作しました。
ウィンドウズでは確認していません。
<input type="button" onclick="history.back()" value="戻る">
ブラウザに依存されるらしいのですが、firefox(mac)でも動作できるようにするにはどのようにすればいいのでしょうか?
またウィンドウズでも動作されるようにするためには別のコードを追加で入力する必要があるのでしょうか?
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
「戻る」ボタンについては、一定の決まりがあるわけではないので
ブラウザによって挙動が異なるのは仕方ないでしょう。
サービス提供側が「戻る」を推奨するのはあまり頭のいい方法ではありません。
セッションなどをからめて戻れないページをつくるようにしてください
再入力をさせる場合は戻るのではなく再入力ページに進むような仕様が妥当です。
どうしてもなんとかしたいのでしたら、動作は保証されませんが
onloadとクッキーやlocalstorageを組み合わせれば、場合によっては
読んでくれる可能性はあります
同じページに飛ばしていくサンプル
PHP
1session_start(); 2$x=filter_input(INPUT_POST,'x',FILTER_DEFAULT,["options"=>["default"=>""]]); 3$t1=filter_input(INPUT_POST,'t1',FILTER_DEFAULT,["options"=>["default"=>""]]); 4$t2=filter_input(INPUT_POST,'t2',FILTER_DEFAULT,["options"=>["default"=>""]]); 5$err=["t1"=>"","t2"=>""]; 6 7if($x==="" and isset($_SESSION["x"])){ 8 $x=$_SESSION["x"]; 9} 10 11/* 以下、エラーチェック */ 12if($x==="確認"){ 13 if($t1===""){ 14 $err["t1"]="空だよ"; 15 $x="エラー再入力"; 16 } 17 if($t2===""){ 18 $err["t2"]="空だよ"; 19 $x="エラー再入力"; 20 }elseif(!is_numeric($t2)){; 21 $err["t2"]="数値じゃないよ"; 22 $x="エラー再入力"; 23 } 24 if($x!=="エラー再入力"){ 25 $_SESSION["t1"]=$t1; 26 $_SESSION["t2"]=$t2; 27 } 28} 29/* debug 出力 */ 30print "error:";print_r($err); 31print "session:";print_r($_SESSION); 32print "<hr>"; 33 34switch($x){ 35default: 36unset($_SESSION["t1"],$_SESSION["t2"],$_SESSION["x"]); 37print <<<eof 38<form method="post"> 39適当な文字:<input type="text" name="t1"><br> 40適当な数値:<input type="text" name="t2"><br> 41<input type="submit" name="x" value="確認"> 42</form> 43eof; 44break; 45case "エラー再入力": 46unset($_SESSION["t1"],$_SESSION["t2"],$_SESSION["x"]); 47$t1=htmlspecialchars($t1); 48$t2=htmlspecialchars($t2); 49print <<<eof 50<form method="post"> 51適当な文字:<input type="text" name="t1" value="{$t1}">{$err["t1"]}<br> 52適当な数値:<input type="text" name="t2" value="{$t2}">{$err["t2"]}<br> 53<input type="submit" name="x" value="確認"> 54</form> 55eof; 56break; 57case "再入力": 58$t1=htmlspecialchars($_SESSION["t1"]); 59$t2=htmlspecialchars($_SESSION["t2"]); 60/*よくみたら再入力の場合エラーは表示されないですね*/ 61print <<<eof 62<form method="post"> 63適当な文字:<input type="text" name="t1" value="{$t1}"><br> 64適当な数値:<input type="text" name="t2" value="{$t2}"><br> 65<input type="submit" name="x" value="確認"> 66</form> 67eof; 68break; 69case "確認": 70$t1=htmlspecialchars($t1); 71$t2=htmlspecialchars($t2); 72print <<<eof 73<form method="post"> 74t1:{$t1}<br> 75t2:{$t2}<br> 76<hr> 77<input type="submit" name="x" value="再入力"> 78<input type="submit" name="x" value="確定"> 79</form> 80eof; 81break; 82case "確定": 83/* SQLなど走らせエラーが無ければ登録完了、あれば登録エラーとしてheaderで飛ばす*/ 84$_SESSION["x"]="登録完了"; 85header("Location:{$_SERVER["SCRIPT_NAME"]}"); 86eof; 87break; 88case "登録完了": 89unset($_SESSION["t1"],$_SESSION["t2"],$_SESSION["x"]); 90print<<<eof 91完了しました<br> 92[ <a href="{$_SERVER["SCRIPT_NAME"]}">戻る</a> ] 93eof; 94break; 95case "登録エラー": 96unset($_SESSION["t1"],$_SESSION["t2"],$_SESSION["x"]); 97print<<<eof 98登録に失敗しました<br> 99[ <a href="{$_SERVER["SCRIPT_NAME"]}">戻る</a> ] 100eof; 101break; 102 103}
投稿2017/10/10 01:11
編集2017/10/10 06:19総合スコア114812
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/10 01:19
2017/10/10 01:27 編集
2017/10/10 02:03
2017/10/10 05:15 編集
2017/10/10 06:23