バグ報告 > フロント機能 > 携帯で注文する時、二重注文が入ってしまうのは? |
フロント機能
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
seasoft |
投稿日時: 2012/11/12 19:43
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: 二重注文の不具合 根本的には、1つの PHP セッション変数に、複数の HTTP セッションが結びついている時点で異常ですね。
たしか、最新版の幾つか前のバージョンで、この辺りも関わるらしい改修を行いました。そのため、最新版では発生しない不具合かもしれません。 不確実ではありますが、ご参考まで。
|
riichi |
投稿日時: 2012/11/12 18:41
対応状況: −−−
|
新米 登録日: 2012/1/11 居住地: 投稿: 3 |
Re: 二重注文の不具合 現状、確認しているのは携帯の場合だけです。
javascript使えないので、サーバー側で制御する必要があります。 まいった。 |
seasoft |
投稿日時: 2012/10/23 22:12
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: 二重注文の不具合 簡易的には、JavaScript でボタンの多重クリックを制限するというのはありがちですね。
|
riichi |
投稿日時: 2012/10/23 21:23
対応状況: −−−
|
新米 登録日: 2012/1/11 居住地: 投稿: 3 |
Re: 二重注文の不具合 同じ現象で困ってます。
連続でボタンを押すと、セッション情報が削除する前に 受注一時データから、何個でも受注情報を作ってしまいます。 受注一時データが論理削除された後に 受注データが作成された場合、論理削除されたデータができてます。 解決方法として、 注文テーブルの受注一時情報ID(order_temp_id)が同じのがある場合は、作成しないようにチェックいれたらいいんでしょうか? ----------------------------------------------------- EC-CUBEバージョン 2.11.1 PHPバージョン PHP 5.3.6 DBバージョン MySQL 5.1 ----------------------------------------------------- |
ゲスト |
投稿日時: 2012/9/8 20:56
対応状況: 確認中
|
Re: 二重注文の不具合 古いレスに返信ですみません。
こちらでは、モバイルページから購入した場合に、 注文ボタンを多重クリックで、注文完了メールは送信されるが、受注データが管理画面に反映されないという事象が再現できました。 古いバージョンを使用しているので、既に解決済みであれば 教えて頂けないでしょうか? よろしくお願いいたします。 ----------------------------------------------------- EC-CUBEバージョン 2.4.3c PHPバージョン PHP 5.3.6 DBバージョン PostgreSQL 8.4.7 ----------------------------------------------------- |
|
AMUAMU |
投稿日時: 2010/6/9 12:21
対応状況: −−−
|
神 登録日: 2009/5/2 居住地: 東京都 投稿: 2712 |
Re: 二重注文の不具合 1行だけが注文として入るようにする方向性ですが、明示的な行ロックをきちんとかける前提で、いくつか例外パターンを実装する必要があると思います。
・行ロックが取得出来なかった時の例外処理 ・order_tempの行データに既にdel_flgが立っていた場合の処理 ・その他のアップデート処理での競合時の例外処理(ロックが正常にされていれば、トランザクション関係のエラーが発生するので) 例外時にはユーザーの再読込が考えられるので、表示上は普通に表示されるようにする処理。(order_tempから有効なorder_idを特定して、そのorder_idで表示だけ成立させる) という感じでしょうか。 色々な所を確認する必要がありますが、基本はlfDoComplete前後からのスタートでしょうね・・・。
|
pop2joa |
投稿日時: 2010/6/9 11:54
対応状況: −−−
|
新米 登録日: 2010/6/7 居住地: 投稿: 6 |
Re: 二重注文の不具合 結果としては
関数を追加してやってみましたが、lfDoComplete内だけだと効かないみたいですね。これはもうちょっと調べてみます。 一つ気づいたのですが、この方式だと注文のデータが2行以上できちゃって1行だけが有効になります。現行ポイントのところをSOAPClientで連動してるのでこれじゃ使えない状態になると思ってます。それで前AMUAMUさんがおしゃってた?のパターンも(1行だけが注文として入るように)起きないようにしたいですが、どこからみてみればいいですかね? すみません。宜しくお願い致します!! |
AMUAMU |
投稿日時: 2010/6/9 11:43
対応状況: −−−
|
神 登録日: 2009/5/2 居住地: 東京都 投稿: 2712 |
Re: 二重注文の不具合 引用:
対策としては「SC_Helper_DB.php」内に新しい関数(sfGetOrderTempと似たような)を作って「LC_Page_Shopping_Complete.php」のlfDoCompleteだけ新しい関数みるようにしようと思っておりますが、これで大丈夫ですようね? 大丈夫だと思います。 引用: 実際、sfGetOrderTemp内ではSC_Queryを引き回しているみたいですが、僕の勘違いですかね?それとも「FOR UPDATE」もSC_Queryを引き回すように入れないといけないっていう話?ですか? lfDoCompleteの引数にある$objQuery(トランザクションを発行したオブジェクト)を持ち回して利用するのが筋かなと思います。
|
pop2joa |
投稿日時: 2010/6/9 10:41
対応状況: −−−
|
新米 登録日: 2010/6/7 居住地: 投稿: 6 |
Re: 二重注文の不具合 AMUAMUさんがおしゃった通り、ヘルパー関数は他のページでも使われてるので確かどのような影響が出るかという問題はありますね。
引用: 当方の手元では取り急ぎの対応として、気付いたところをHelper関数呼び出しから各クラス内に専用で作る読み込みクラス内関数に書き換える方針で考えています。 対策としては「SC_Helper_DB.php」内に新しい関数(sfGetOrderTempと似たような)を作って「LC_Page_Shopping_Complete.php」のlfDoCompleteだけ新しい関数みるようにしようと思っておりますが、これで大丈夫ですようね? ちなみに 引用: SC_Queryオブジェクトを引き回していないのでルール的には正しくない問題 実際、sfGetOrderTemp内ではSC_Queryを引き回しているみたいですが、僕の勘違いですかね?それとも「FOR UPDATE」もSC_Queryを引き回すように入れないといけないっていう話?ですか? |
AMUAMU |
投稿日時: 2010/6/8 18:17
対応状況: −−−
|
神 登録日: 2009/5/2 居住地: 東京都 投稿: 2712 |
Re: 二重注文の不具合 対応方法としてはSELECT FOR UPDATE文を足す方向で正しいと思いますが、SC_Helper_DBは共通ヘルパー関数なので他のページの処理で使われたときにどのような影響が出るかという問題と、SC_Queryオブジェクトを引き回していないのでルール的には正しくない問題(実際は同じ接続を使い回すので大丈夫なのかな?)がありますので、十分に調べた方がいいかもしれません。
当方の手元では取り急ぎの対応として、気付いたところをHelper関数呼び出しから各クラス内に専用で作る読み込みクラス内関数に書き換える方針で考えています。 なお細かく精査していませんが、上記の対応をすれば、ご指摘の?のパターンは発生しなくなると思います。
|
(1) 2 » |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |