• 締切済み

データが2重登録されてしまいます

言語はColdFusion、データベースはpostgreSQL サーバーはLinuxで会議室予約システムのWEBアプリケーションの開発を行っています。動作環境はIE6.0以上Javascriptが有効が前提)です。 ある特定のユーザーが登録する時だけ、2重登録が発生してしまいます。 テーブルには 予約ID(主キー)、場所、日時、仮予約NO(複数の場所・日時を一度に登録出来るので、グループ化するためのNO)を登録するのですが、予約IDと仮予約NOは一意のものなので、シーケンスで取得しています。ダブルブッキングは出来ないので場所と日時の組み合わせでかぶることはありません。 データはこんな感じに入っています。 予約ID|場所|日時   |仮予約NO 1    A  2005/6/1   1 2    B  2005/6/1   1  3    B  2005/6/7   2  4    C  2005/6/9   3 5    C  2005/6/9   4  予約ID1~3は正常な登録ですが、4と5が場所と日時がかぶっているので、不正なデータです。予約IDと仮予約NOは違うのですが、同じ場所と日時の予約が出来てしまいます。 登録のSQLの前に2度、同じ場所と日時で登録がないかSQLでチェックをしているのですが、同じトランザクション内で登録が行われているようで、そのチェックにも引っかかりません。 登録画面には2度押し防止の為に、登録ボタン押下後はボタンを無効にしています。 IE以外のブラウザを使っているのかと思って調べたところ、ちゃんとIEを使用されていました。 JavaScriptが無効なのかとも思いましたが、有効になっていないと登録処理にまで、辿り着かない作りになっています。 クライアントでの2度押しのチェック強化方法とサーバーサイドでの2度押しのチェック、トランザクション内で同じSQLを発行させないような方法など、何かありましたら教えください。

みんなの回答

回答No.2

とりあえず、「二重登録がどうして発生するか?」のメカニズムはわかりませんが.. 二重登録という矛盾するデータをデータベースに登録できなくすることで、 問題が他に波及することは抑制できるハズです。 例えば、”場所+日時”のユニークインデックスを張るとか.. その上で、イレギュラーなケースが如何にして起こるのかを じっくり対応すればよいかと思います。

回答No.1

他の方から回答がつかないのは、それが難解な問題だからではなく、質問内容における説明が見当違いで、回答のしようがないからだと思いますよ。 質問者さんは、SQLが2回おきるのが異常だ、クライアント側での2度押し防止・・・と考えられているようですが、その検討は的外れのような気がしてなりません。 一番怪しいのは、2重登録をさせないための、同じ場所、同じ日時をチェックしているというSQL文、ロジックで単純ミスをしているためだと思われます。もちろんあいまいな状況説明から推測していますので、まったく別の原因かもしれません。 とりあえず実行しているSQL文、データベースのカラム構造などを詳細に明記してみてください。自分ではそんなミスはないと思っていても案外!!!なことがベテランでも往々におこります。

関連するQ&A

  • 配列内のデータを1つのテーブルに登録。

    配列内のデータを1つのテーブルに登録。 お世話になっております。 以下のような構成のテーブルがあり、カラム名1、2、3、4と100まであるのですが、そこへ 配列内にある100を数えるデータを登録するには、どのようなSQL文が適切なのでしょうか? no id date 1 2 3 4 5 6 ...... 100 安易に、$sql = "INSERT INTO test values(0, '$id', '$date', '$randam[0]', '$randam[1]', '$randam[2]',....とも考えたのですが、他に効率のいいものがあるのでは?と思い、投稿した次第です。色々と考えてはいるのですが他に思いつかないので・・ 補足:配列にあるデータはランダムな数値を格納してあり、このSQL文の前に、配列を生成したものとなっております。 以上、お忙しいなか恐縮ですがご指導のほど宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 重複データを表示しない

    はじめまして。質問させて頂きます。 この教えてGoo!のような質問掲示板を、下記のようなカラムにて作っているのですが、例えば、登録ユーザーさんのがこれまでどのような回答をしたか?を閲覧出来るページを作る場合、普通にselectしただけでは、同じ質問に2度回答してあるときなどは、複数表示されてしまいますが、これを避けるためにはどのようなSQL文にしたら宜しいのでしょうか? SQLを触り始めて間もないこともあり、調べようにも適切なキーワードが思いつかず、なかなか目的の情報にたどり着かないため投函させていただきました。宜しくお願い致します。。 help(質問テーブル) no id subject contents date answer(回答テーブル) no help_no id answer date ※help_noは、質問テーブルのnoと紐づけるためのカラムです。

    • ベストアンサー
    • MySQL
  • 登録を断られることもありますか?

    仮登録後、マ○パワーに電話をして登録会の予約をしました。 最初に登録会予約用の番号にかけた時『ただいま電話が大変込み合っております。後でおかけなおし下さい』というメッセージが流れており「そんなに登録希望者が殺到しているのか・・」と大変ブルーになりました。 やっとつながった電話では生年月日を聞かれ、あらかじめ仮登録しておいた内容をチェックされ、その後、具体的な登録予約の日付を決めていただきました。 派遣会社って、どこも昔は誰でも登録できたものでしたが、昨今のこの大不況。登録を拒否されることもありますか? リクですと不況になってから、職歴や年齢によっては登録を断られる人も出てきたというウワサをがチラホラ聞くので、マ○パワーはどうなんだろうか?と。 とくに自分は派遣定年をとっくに過ぎて過ぎて過ぎまくっているので心配です。 電話した時に生年月日を聞かれたうえで登録会の予約受付はしていただけたから大丈夫なのかな~とも思いつつ、やはりドキドキしております。

  • マンパワーへの登録について

    ふたつ、教えてください。 (1)マンパワーに1ヶ月前に仮登録だけして、そのまま本登録には行かず、放置状態にしています。 いいかげん本登録の予約をしようかなと思っていたところ、こちらの会社に限らず、仮登録をして放置しておくと、本登録前に会社から電話がかかってきて「ぜひ紹介したい案件があるから本登録に来てください」と言われると聞きました。 私は仮登録後、そのような本登録に来てください系の催促電話は受けていません。 ということは?、アンタはお呼びじゃないということで、本登録に行っても仕事はないと思ったほうがよいですか? (2)マンパワーでのエクセル・ワードのスキルチェックはどんなことをやるのか、教えてくださるとうれしいです。

  • 自身の結果に自身で検索?

    php+mysqlにてある予約システムを作っている者です。 mysqlのクエリ作成で行き詰ってしまったので、ご質問させていただきます。 予約テーブルにはカラムid(key)、roomID(部屋番号),startTime(予約開始日時)、endTime(予約終了日時)があります。 部屋テーブルにはカラムid(部屋番号)、部屋名等があります。 実現したいのは、予約日時が被っている部屋id、予約テーブルのidの抽出(重複した予約)です。 一覧画面にて、予約に対して重複があるかないかを表示したいです。 予約テーブルのstartTimeが他の予約開始日時から予約終了日時までの間になければ、 重複予約はないということになると考えています。 しかし行き詰ってしまった原因は、検索対象がない??ことです。 仮に開始時間だけでもWHERE句に入れられれば、 $検索対象予約開始日時 BETWEEN startTime AND endTime で検索できそうだと想像つくのですが、 その検索対象開始日時は予約テーブル内全部の予約開始日時なのです。 単純に考えると、予約テーブルのidとstartTimeを1件ずつ取得し、全件をBETWEENで検索ループなのでしょうが、 なんとかSQL1文で済ませられないかと思い、質問させていただきました。 疑問点が伝わるか不安な文章で大変申し訳ありませんが、お知恵をお貸しください。

    • ベストアンサー
    • MySQL
  • TIMESTAMPについて

    MySQLを用いて会員管理システムを構築しております。 仮登録者テーブルと本登録者テーブルの二つを用意しており、 仮登録者の本人確認が取れた時点で、本登録者テーブルへ データを丸々コピーする仕様にしております。 この際に、仮登録日時をTIMESTAMPを用いて日時を取得していますが、 本登録者テーブルへデータをコピーするタイミングで、【 本登録日時 】を 計算させるSQL文等をどの様に記述すればいいのかが分かりません。 現在は、この様なSQL文にしております。 ---------------------------------------------------------------------- $sql = "INSERT INTO user_table SELECT * FROM user_table_2 WHERE (number = ".intval($number).");"; ---------------------------------------------------------------------- user_table_2( 仮登録者テーブル )のデータをuser_table( 本登録者テーブル )へ コピーします。 【 仮登録の日時 】+【 本登録操作を行った日時 】=【 本登録日時 】という計算を WHERE句で実行出来るものなのでしょうか? それとも他に別の方法がありましたら、何卒ご教授いただきたく存じます。 各スペックは以下の通りです。 ---------------------------------- PHP 5.1.6 MySQL 5.0.77 サーバOS Linux ---------------------------------- どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • データを書き込む際、全角数値を半角で登録するには

    ASPにおいてSQL-SERVERにデータを書き込む際に全角数値だったら半角数値になおして書き込むことは可能でしょうか?? 例:1234→1234 もし可能ならばご教授お願いします!!!よろしくお願いします!!! ちなみに理由はHTMLフォーム上で電話番号等数値入力のコントロールで全角で入力してしまうことがある為、対応として全角を半角で登録ってことになりました・・・。現在はバイト数で半角全角チェックを行っていますが、このチェックはなくすことになります。。。だれか助けてください。。。IMEの制御は行っていません。サーバはWINDOWS2000、処理ブラウザはIE、DBはSQL-SERVER2000を使用しています。

  • CSV形式のテキストデータをSQLへ登録したい

    CSV形式のテキストデータを確認をはさんでSQLに登録したいのですが、自分で作るとテキストデータの解析がうまくいかず、中途半端にごちゃごちゃしてわからなくなりました。 ------------------------------------------------------------------------ mysqlの「動物」テーブルに、3つのカラム「サイト名」「URL」「日時」があります。 import.phpの入力フォームのテキストボックスに、例えば ここから ↓ ねこ,cat.com,3/8 いぬ,dog.com, うさぎ,,6/21 ねずみ,mouse.com,12/30 ↑ ここまで をコピペして確認ボタンを押したら、内容を元に以下のようなテーブルで表示して、登録ボタンを押したらSQLに登録されるようなPHPを作成したいです。 ------------------------------------------------------------------------ check.phpに表示する確認テーブル サイト名 _URL       日時 ねこ    cat.com     3/8 いぬ    dog.com    うさぎ             6/21 ねずみ  _mouse.com  _12/30 ------------------------------------------------------------------------ どなたかこのようなPHPのコードを教えてください。 どうかご教示のほど、よろしくお願いします。

    • ベストアンサー
    • PHP
  • eバンクの登録手続きについて

    問い合わせをしようとしましたが、口座登録を完了していないので電話やメールがつながりません。なのでここで質問をします。 eバンクホームのログイン画面から仮のパスワードとIdでログインし、新たにパスとIDを設定してから取引ができるようになるのですが、 ユーザーidの設定を完了していないにもかかわらず、支店番号+口座番号のIDと仮ログインパスワードのどちらか、もしく両方が無効?になってしまい、手続きを続行できません。パスワードの再発行にはすでに設定したIDが必要であり、そのidすらできていない状態なので何もできません。

  • Amebaの読者登録について

    こんにちは質問致します。 Amebaブログの読者登録をした時、相手に自分のIDを知らせ無い登録をしたのですが、相手に知らせる変更をしたいのですが教えて下さい。 登録の所で、チェック変更が出来無いので何処か変更の場所が有ると思うのですが? よろしくお願い致しますm(_ _)m

専門家に質問してみよう