アプリ版:「スタンプのみでお礼する」機能のリリースについて

phpにて在庫記録を作成していますが、データ入力後の確認画面にて<input type="button" onclick="history.back()" value="戻る">のボタンを押下すると、mysqlにデータが登録されてしまいます。

データ確認画面にて入力確定ボタン<form method="post" action="k-thanks.php"><input name="nyryoku1" type="submit" value="入力確定"></form>の『入力確定』ボタンを押下した時だけにDBに値を登録したいです。

ちなみに、データ確認画面にて、『戻る』ボタンを押下後、値を修正し、またデータ確認画面にて『入力確定』ボタンを押下すると、修正前と修正後のデータ2つがDBに登録されてしまいます。

『戻る』ボタンでDBに値が登録されないようにする方法や、何かしらのヒント、アドバイスをいただけますようお願い致します。

A 回答 (2件)

データ登録の基本はページ分け



入力ページ→確認ページ→登録ページ→登録完了ページ
という構成にすれば、登録完了ページからもどるのは確認ページなので
二重登録は発生しない

・入力ページ
データを入力、確認ページにはPOSTでデータ送信
・確認ページ
登録してよいか、わるいかだけジャッジする。
入力ページからもらったデータはセッションで保存する
・登録ページ
確認ページからもらったセッションデータを利用して登録する
登録に成功した場合は、登録完了ページへ
失敗した場合は登録エラーページへ
必要であればセッションデータをクリアする

ただし・・・history.backを元にページを作るのはあまりお勧めできない
    • good
    • 0
この回答へのお礼

yambejpさん。いつもいつも分かりやすい説明ありがとうございます!!
考えすぎて頭が固くなってしまいました・・・。

もし、よろしければ簡単で良いので、history.backを使用するのはおすすめ出来ない理由をご教示いただけますでしょうか?

まだまだ、勉強不足で申し訳ないです。

お礼日時:2016/04/12 20:52

Javascriptのhistory.back()を使用して問題ない仕様なのでしょうか?


 戻る先のページはサーバ側のプログラムが更にその前のページでの入力内容を受け取って処理して生成しているページはありあませんか?
 また、最終的な処理結果を格納するMySQL上のテーブルのキーは画面上で利用者が入力したり、あるいはプログラムが決めて登録前のページに表示したりしているデータ項目ではなく、最終的にテーブルへのデータ登録を行うプログラムが自動生成する項目ということでしょうか?
 二重に登録されるという事はそのように見えます。
 そして「作成中の機能としてそれは本当に適当なのか?」とも思います。
    • good
    • 0
この回答へのお礼

zircon3さん回答いただきありがとうございます!!

結果としては、SQLでテーブルにデータを登録するページを分けることで大丈夫でした!!

勉強がてら入出庫の記録簿をwebページで作ろうと思っていて、phpとSQL初心者なので、「Javascriptのhistory.back()を使用して問題ない仕様」の理由が分からないです・・・。

参考書にはhistory.back()での記載だったので・・・。
色々と勉強しないとですね・・・。

また、質問すると思いますので、その際にはご返信いただくと嬉しいです。

お礼日時:2016/04/12 21:47

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