• ベストアンサー

複数同時アクセスついて

おはようございます。 PHPでブラウザ上でデータベースの更新するページを作成しました。 今、問題があって、Aさんがデータを更新するため、作業をしていて、その間にBさんも作業をするためページを開きました。 Bさんが作業終了してデータを更新して、その後Aさんが更新するといった形で複数同時アクセス時にデータの書き換えでこまっています。 こういった場合、編集ページを排他処理にしたいのですがどのようなものがありますでしょうか? すみませんがお願い致します。 参考になるページもあればお願い致します。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#227796
noname#227796
回答No.1

やり方は色々あるかと思いますが。 例えば、「仕様」として、後から更新した人の勝ちにしてしまうのも一つの手ですし。 Web系の同時更新の場合、誰かが作業中に他の誰かには作業できないようにすることは難しいですね。 作業を途中で止めてしまったらどうするか、という問題もあるので。 やるのであれば、 (1)「作業開始」ボタンを設け、作業意志のある人が押さない限り、排他処理はしない。 (2)「作業開始」ボタンが押されたら、排他制御用テーブルに誰それさん(Aさんとしましょう)がいつ、何の作業を開始したかを記録する。 (3)作業中は、他の人が「作業開始」ボタンを押した場合、排他制御用テーブルを参照して、作業中であれば「Aさんがいついつより作業中です」というようなメッセージを出して、作業させない(排他制御する)。 (4)Aさんが作業を終了(例えば「作業終了」ボタンを押してもらうとか)したら、排他制御用テーブルから作業記録を削除する。 (5)もしも、Aさんが作業を行おうとして、排他制御用テーブルに自分の記録がなかったら、排他制御が解除された物として、それ以上の作業を行わせない。 (6)Aさんが作業を途中で投げ出したら、Aさんが次回ログインしたときに、「~の作業を中断しています。作業を継続しますか?」というようなメッセージを出してあげる。 作業を継続しない場合は、作業記録を削除。 作業を継続する場合は、作業画面に遷移。 (7)ただし、Aさんがいつまでも作業を投げ出しっぱなしにする可能性もあるので、排他制御を解除できる権限を持ったユーザーであれば、好きなときに作業記録を削除できるようにする。 こんな感じでしょうかね。 あとは、 ・排他制御を他人が解除できるタイミングをどの程度まで許すか ・一定時間以上作業が終了されていない場合は、作業を中断したと見なすか などの細かいところを詰めれば良いでしょう。 まあ、質問内容の機能がどこまでの排他制御を必要とするのかどうかわからないので、この流れで良いかわかりませんが。 私なら面倒なときは「後勝ちが仕様です」で済まします。 余程厳密な排他制御が必要でない限り、お客様にはその仕様でも納得してもらえているし、それで支障が出ることもそうそうありません。

TOKIO2003
質問者

お礼

丁寧に回答有難う御座います。 システム的とおもってましたが、ロジックでできそうですね。試してみます。 ありがとうございました。

関連するQ&A

  • accessとphpとsql

    現在、WEBからphpでSQLを使い、access(2002)にデータ入力とデータ参照するシステムを作成しています。 とりあえず両方できていますが、データ入力は複数人数で同時に更新(異なるレコード。テーブルは同一)することが想定されます。 排他制御はやりかたがわからずに組み込んでおりません。 ですが、入力者には個別のページに飛んでそこからデータを更新するようなWEBになっており、注意して作業してもらえば排他制御しなくてもいいかなと思っています。 ネットでaccessではデータの破損が起きやすいとありましたが、このような使用状況では起こりえるでしょうか? また、accessからmysqlなどに変更するメリットなどはありますでしょうか? よろしくお願いします。

  • 複数ユーザによる Access の同時使用について

    複数ユーザでAccessファイルを使用する場合の影響について教えてください。 <環境> データベースとなるAccessファイル(複数)は、共有のデータサーバ内にあります。 各ユーザは、各自が使用しているPCのAccessを起動して対象のAccessファイルを開き、編集・閲覧します。 全PCのOSはXP(SP3)、Accseeのバージョンは 2000 又は 2002 です。 誰かが開いている場合、レコードロック情報がエクスプローラに表示されるので、他の人にも使用中であることが分かるのですが、WordやExcelのように使用中である注記が表示されないので、これを確認しない人が使用する際に同時使用になってしまう可能性があります。 <質問> 1.あるユーザがファイルを使用中の時、他のユーザが編集を目的としてその使用中のファイルを開いた場合、後から開いたユーザは編集が可能でしょうか? 2.同時に開いている2ユーザがそれぞれ編集作業を行った場合、それぞれの内容は保存されますか? 3.同時に開いている2ユーザのうち、先に閉じたユーザが編集作業を行い、後に閉じたユーザが閲覧のみであった場合、先のユーザの編集内容は反映されますか? 基本的なことだと思うのですが、Access初心者であるため、理解できていません。 よろしくお願いします。

  • ACCESSに同時アクセス(編集)をしたい

    教えてください。 ACCESSのDBに複数のユーザが同時にアクセスして、 データを追加・編集したいのですが、 やはり、不可能でしょうか?

  • データの同時編集を制限する方法 PHP MySQL

    PHPとMYSQLで、情報の共有用のフォームを作っているのですが、複数人による同時編集の制限について困っております。 フォームへの書き込みが追記されていくようにしたいと考え、フォームを編集するとMysqlのデータを読み出してきて編集し、編集完了ボタンでMysqlのデータを上書きするものです。 当たり前なのですが、パソコンAとパソコンBで同時に編集した場合は後出しのみ残ります。これを全ての書き込みを残すようなものにしたいのですが、具体的な考え方がわからず困っています。 質問です 「他社が編集中はデータを上書き禁止にする」やBBSのようにどんどん追記していく方法があると思うのですが概念としてのロジックはどの様なものがあるのでしょうか 出来るだけ簡単な方法で、複数人での同時編集したデータが消えなければいいレベルのものを作りたいと考えています。 どなたかスキルのある方のご教授を頂ければ幸いです。

    • 締切済み
    • PHP
  • 【Access】排他モードで利用時のタイムアウト

    社内の部署で共有のアクセスデータベースを作成し、複数の人が同時に編集できないよう、 「排他モード」か「レコードロック」の設定を考えていますが、「排他モード」にした場合、ファイルを 開く時間(タイムアウト)の設定は可能でしょうか?

  • 同時に更新(リロード)について。

    こんばんは。非常に悩んで困っています。 (参考図)        ┌→上フレーム(A.php)        │        │ aaa.php―┼→中フレーム(B.php)        │        │        └→下フレーム(C.php) A.php ページ内のボタン【B】をクリックしたら、中フレームで B.php ページが表示される仕組みで・・・ その時、同時に下フレームの C.php ページにも更新(リロード)を掛けるような仕組はどうやったら良いのでしょうか? 【参考】 ・ Javascript は利用せず。(利用したくない) ・ 上記の参考図の表示がずれていたら脳内変換で宜しくお願いします。 ・ ページはフレームを使用し、上フレーム・中フレーム・下フレームと縦に組んでいます。 ・ A.php ページ内のボタンは、次の様にリスト形式でリンク文字としてます。   <ul>   <li><a href="B.php" target="B">B</a></li>   </ul> 中途半端な知識で対応できず、苦しんでおります。 ちなみに、私は「PHP」の経験が浅いので、分かりやすく詳しく教えて頂けると非常に助かります。 もし宜しければ何方か、どうか教えて下さい。宜しくお願いします。

    • 締切済み
    • PHP
  • ACCESSのフィールドに複数の情報を載せたいときは?

    初めてACCESSでデータベースを構築しています。お教えください。  例えば「Aさんがカキを1つ買いました。」という伝票のデータベースは構築できました。お聞きしたいのは「Bさんはカキを1つ、と同時にクリも1つ買いました」という同時に「2品目」を買った場合の時の事です。  「2品目」というフィールドを作るのが良いのか、レコードを新しくした方が良いのか、それともそれ以外の方法(「1品目」に複数入力できる←これが出来れば一番良いんですが…)があるのかお教えいただきたいと思います。 よろしくお願いします。

  • 同時アクセスについて

    入力→HTMLタグをつけて表示、というスクリプトを作っています。例えば「あいうえお」と入力したら「<h1>あいうえお</h1>」というふうに表示する、といった感じです。記録は取っておらず、純粋に表示するのみです。 ここで気になっているのが、2人以上の人が同時にこのスクリプトを実行した場合、その人達のブラウザには正しい結果が表示されるのだろうか、という点です。 AさんとBさんが同時に実行した時、Aさんの入力結果がBさんに見えたり、AさんとBさんの内容が混ざって表示されたり、ということはないのでしょうか? 非常に初歩的な質問で申し訳ありません。 ちなみに、これは3つのスクリプトを作って使っています。1(入力欄を幾つ設けるかなどの設定)→2(入力)→3(表示)という感じになっています。 セッションを使うことも考えていますが、未だ勉強中でセッションについてはよく理解していません。 バージョンはPHP4.3です。

    • ベストアンサー
    • PHP
  • 複数のサーバー間の各データベースの同期の方法

    こんにちは。 現在、WinXP、PHP5+MySQLにてデータベースWEBアプリケーションを作成していますが、問題に直面してしまいましたので、 こちらを利用させて頂いております。 どうぞ宜しくお願い致します。 以下が質問の内容です。 AのWEBサーバーにはAデータベース、 BのWEBサーバーにはBデータベース、 CのWEBサーバーにはCデータベースがあり、 AもBもCもまったく同じWEBアプリケーションとなっていて、 AからもBからもCからも、新規データ登録が可能となっているのですが、 AとBとCから新規登録された、または、更新されたデーターベースの登録データを自動的に3つのサーバー間ですべて同期したいと考えておりますが、その方法がまったく思い浮かびません。 具体的にどのような方法があるのか、又は、不可能なのか、 解る方がいらっしゃいましたら、ご教授頂けると幸いです。 説明下手ですので、説明が不適切でしたら、 すぐに補足させて頂きますので、 どうぞ宜しくお願い申し上げます。

  • Access2007を同時に複数名で使いたい

    Access2007で検索用にデータベースを作って、共有したいのですが、どうしても他に開いていると、「ファイル"sq_fMain"を開くか、書き込むことができません。他のユーザーが排他的に開いているか、データの表示と書き込みを行う権限がありません。」というメッセージが出て、起動時に開くように設定したフォーム(フォーム名:Main)が開きません。 OKをクリックすると左側にオブジェクトは出てくるのですが、リンクではないテーブルは開くことができますが、他からリンクしているテーブルやクエリー(たぶん使用テーブルがリンクなため)開けません。 [Accessのオプション]-[詳細設定]の[既定の開くモード]は共有になっています。 テーブルは他のAccessからテキスト変換(毎日更新)したものなので、リンクにしておきたいのですが、 そこがいけないのでしょうか。わかる方がいたら教えてください。

専門家に質問してみよう