ミスチルの大名曲の数々が配信決定!! 31日間無料!!【PR】

ECサイトで商品を販売しています。プログラムはPHP、データベースはMYSQLを利用しています。
購入ごとに在庫数を減らしていくようにしています。
この時、在庫が少なく、在庫0になる決済を処理中に、他の誰かがその対象商品をカゴにいれようとしたときに「在庫なし」という表示をしたいと思います。実際に在庫が0ならば「在庫なし」表示はでるのですが、カゴに入れるタイミングで、その時在庫が0でなければ、何人でもカゴに投入できると思います。そのタイミングがズレた場合、在庫のない商品を購入できてしまいます。
早いもの勝ちで在庫を管理すればいいのでしょうが、なかなか難しく、システムの概要をお教え願えないかと頼った次第です。
支離滅裂になってしまいましたが、どうぞよろしくお願いいたします。m(_ _)m

このQ&Aに関連する最新のQ&A

A 回答 (2件)

MYSQLを使ってないので、見当違いのコメントかもしれませんが


普通、DBの処理では、
そういう場合ロックをかけます。
ロックには、レコードロックやテーブルロックやDBロックなどがあり
読み出しは許すが書き込みは禁止するとかのロックもあります。

在庫の数の場合、そのレコードの読み出し書き込みを処理終了までロックする必要があります。
処理終了後COMMITを発行し、ロックを解除します。
ロックされたレコードを参照しようとするクライアントは、その間またされることになります。
MySQLでのロックについて調べてみて下さい。
    • good
    • 0
この回答へのお礼

ありがとうございます。ロックの件に関しては調査しておりました。

ECサイトでの商品在庫の読み出し・書き込みですので不特定多数の方からのアクセスがあります。
カゴに入れた人順で在庫を割り振る必要があり、カゴに入れても購入が決定しない限り、在庫は減らせない、しかし、カゴに入れている時点で、早いもの順で在庫の割り振りをしておかなければならない。

というような感じのプログラムというかシステムを準備しなければいけないかと思っています。

DBのロックをうまく応用できるでしょうか??

お礼日時:2004/11/10 08:53

カゴの中に入れてる状態では、


仮の在庫というかDBを更新する訳には、
いかないので単にページで保持している数にしないと
しょうがないと思います。
しかし、
在庫のレコードを更新ロックをかけておけば
少なくとも「在庫のない商品を購入できる」ということはないと思います。
購入ページで、実際に購入する段階で
実は既に在庫がなくなってしまって購入できない。
旨を表示するればよいと思います。
実際、早い者勝ちというか、
カゴに入れたモノ勝ちというのはおかしくて
購入を決定したモノ勝ちの方が動作としては
良いのではないかと思います。
    • good
    • 0
この回答へのお礼

たびたびありがとうございます!親身にお教えいただき助かります。

おっしるとおりですね。
カゴに入れたもの順ではなく、購入を決定したモノ勝ちが動作としては正しいです。

・購入決定時に在庫の再チェックをする。
・その際、在庫がなくなっていた場合は在庫がない旨を表示する。

を実践してみようと重います。
現在はカゴに入れる前で在庫の有無を判断してしまっているので、在庫数をオーバーしてしまいます。
購入を最終決定する前に、在庫の確認をするようしてみようとおもいます。

お礼日時:2004/11/10 14:57

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPHP等を用いて在庫数を表示・管理させたいのですが

現在、独学でhtml php css java等を勉強中の素人です。
私が使っているのは、dreamweaver cs6 とローカル環境用にMAMPを使用しています。
現在勉強のため、webサイト上でのチケット予約受付ページを作っております。

既に、「チケット紹介画面」→「予約受付画面」→「予約入力画面」→「入力確認画面」→「予約完了画面」 そして、予約完了画面になった時に送信者、送信先への自動送信システムをPHPを用いて作成しました。

そして、今回は、これに、在庫数の表示をさせたいと思っているのですが、どうすればいいのかわからず止まっている状態です。。。
今回でしたら、チケットの枚数に上限を持たせ、「残り○○枚」というのをトップページに表示させ、「残り0枚」になったら、予約画面には飛ばないようにしたいと思っています。
そのときの条件として、予約が成立するごとに、自動カウントダウンを行ないたいと思うのですが、そのようなシステムは作成可能でしょうか。
(今回は、1回の予約で、1枚しか買えないようにしたので、予約成立回数=送信完了回数=チケット枚数というようにしたいです。)

例:チケット枚数が上限50枚
1人目の送信者が予約完了画面でメールを自動送信して、トップページには[残り49枚]
2人目の送信者が予約完了画面でメールを自動送信して、トップページには[残り48枚]
・・・
50人目の送信者が予約完了画面でメールを自動送信して、トップページには[完売]

の様なシステムを作りたいですが。。。



いろいろ調べてはいるのですが、有料の在庫管理システムやショッピングカートシステムは見ることができたのですが、できたら勉強のため作成できたらなと思います。

知識薄な私には、提供されているシステム環境に登録して使った方がいいのは重々承知しています。しかし、勉強のためにもと思って行なっております。
どなた様かご教授宜しくお願いいたします。

現在、独学でhtml php css java等を勉強中の素人です。
私が使っているのは、dreamweaver cs6 とローカル環境用にMAMPを使用しています。
現在勉強のため、webサイト上でのチケット予約受付ページを作っております。

既に、「チケット紹介画面」→「予約受付画面」→「予約入力画面」→「入力確認画面」→「予約完了画面」 そして、予約完了画面になった時に送信者、送信先への自動送信システムをPHPを用いて作成しました。

そして、今回は、これに、在庫数の表示をさせたいと思っているのですが、どうすればいい...続きを読む

Aベストアンサー

StackOverflowだったら「So, what is the question?」ってコメントされそうな感じの質問ですね…まぁ「どこから手をつけたらいいか分からない」ってことで困惑されて質問されるに至ったのだと思いますが。

PHPでそういったサイトを構築するにあたり、絶対的に必要になってくるのがデータべースとそれを扱うためのSQL言語です。MAMPを使用されているのであればMySQLの存在にはお気づきであると思いますが、これは無料で使えるオープンソースのデータベースの一つです。SQL言語自体はどんなデータベースでも似たようなものですが、若干「方言」的なものがあるので注意してください。

まずはSQLを先に学びましょう。

Google検索 - 「MySQL 入門」
https://www.google.co.jp/search?q=MySQL+%E5%85%A5%E9%96%80

こういったサイトは、ターミナル(Windowsであればコマンドプロンプトと呼ばれる)上で全ての操作を行う前提に解説されています。ですがターミナル上でのコマンド操作に不慣れなユーザーのために、MAMPには「phpMyAdmin」というPHP製のMySQL管理ツールが用意されていますのでご安心ください。

SQLの基礎的な文法を知り、ターミナル上で操作できるようになれば、あとはそれをPHPから扱うというステップに入ります。大雑把でいいので下記のまとめをご覧ください。ブクマしていただき、必要になったときにまた詳しく見返してもらえればいいなと思います。

Qiita - PHPでデータベースに接続するときのまとめ
http://qiita.com/mpyw/items/b00b72c5c95aac573b71

PHPには何通りかのデータベースへの接続方法がありますが、現在最も用いられているのはPDOクラスです。オブジェクト指向で美しくコーディングすることができ、MySQL以外の他のデータベースを扱う際にもこれ1本の知識で通用するというのが有力な根拠でしょうね。PHPでクラスとオブジェクトに触れたことがないのであれば、先にそちらの予習をお願いします。

Google検索 - 「PHP オブジェクト指向 入門」
https://www.google.co.jp/search?q=PHP%20%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%20%E5%85%A5%E9%96%80

PHP4とPHP5でクラスとオブジェクトの構造がまったく異なるので注意してください。プロパティ宣言に「var」を使っていたりするものは古いPHP4の書き方ですので、PHP5の新しい情報を参考にするようにしてください。「public」「protected」「private」などのキーワードが使われているのはPHP5のものです。

さて、ここまでの話が理解できているのであれば、おのずから答えは見えてくると思います。まずは、必要になってくるデータベースとテーブルを、コマンドラインからもしくはphpMyAdminを用いて作成してください。

以下に例を示します。



【データベース構成】

CREATE DATABASE my_web_site CHARACTER SET utf8 COLLATE utf8_general_ci

作成したデータベースをそのまま選択する場合「USE my_web_site」を実行します。

【テーブル・カラム構成】

データベースが選択された状態で実行します。

CREATE TABLE ticket_order(
id unsigned int NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '予約ID',
name varchar(100) NOT NULL COMMENT '名前',
evend_id unsigned int NOT NULL COMMENT 'イベントID'
)

CREATE TABLE event(
id unsigned int NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'イベントID',
name varchar(500) NOT NULL COMMENT 'イベント名',
quantity unsigned int NOT NULL COMMENT '最大販売枚数',
sold unsigned int NOT NULL DEFAULT 0 COMMENT '販売枚数'
)

【イベントの追加】

データベースが選択された状態で実行します。

INSERT INTO event(name, quantity) VALUES ('田村ゆかり38歳誕生日記念ライブ', 2000)

これで準備は整いました。あとはPHPからオーダーを実行させましょう。PDOでの例を記載しますが、長いので回答を切り分けます。

StackOverflowだったら「So, what is the question?」ってコメントされそうな感じの質問ですね…まぁ「どこから手をつけたらいいか分からない」ってことで困惑されて質問されるに至ったのだと思いますが。

PHPでそういったサイトを構築するにあたり、絶対的に必要になってくるのがデータべースとそれを扱うためのSQL言語です。MAMPを使用されているのであればMySQLの存在にはお気づきであると思いますが、これは無料で使えるオープンソースのデータベースの一つです。SQL言語自体はどんなデータベースでも似たよう...続きを読む

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

QDBエラーの意味

フォームからDBにデータ挿入しようとすると

Column count doesn't match value count at row 1

というエラーが出てしまいます・・・どういう意味を持ったエラーなんでしょうか?

Aベストアンサー

カラム数と値の数が合わない、と言う事です。簡単な英語なので覚えましょう。
カラム数が4つにもかかわらず、
"INSERT INTO tablename VALUES (1,'hoge',3)"
とやった場合等に出るエラーだと思います。


人気Q&Aランキング