PHPを使った在庫数の表示・管理方法

このQ&Aのポイント
  • PHPを使って在庫数の表示・管理を行いたい場合、チケット予約受付ページに在庫数の表示を追加することができます。
  • 在庫数の表示はトップページに行い、予約が成立するごとに在庫数を減らしていく形式にすると良いでしょう。
  • 在庫数の管理はデータベースを使用することで実現できます。予約が成立したらデータベースの在庫数を更新するようにプログラムを作成しましょう。
回答を見る
  • ベストアンサー

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

現在、独学でhtml php css java等を勉強中の素人です。 私が使っているのは、dreamweaver cs6 とローカル環境用にMAMPを使用しています。 現在勉強のため、webサイト上でのチケット予約受付ページを作っております。 既に、「チケット紹介画面」→「予約受付画面」→「予約入力画面」→「入力確認画面」→「予約完了画面」 そして、予約完了画面になった時に送信者、送信先への自動送信システムをPHPを用いて作成しました。 そして、今回は、これに、在庫数の表示をさせたいと思っているのですが、どうすればいいのかわからず止まっている状態です。。。 今回でしたら、チケットの枚数に上限を持たせ、「残り○○枚」というのをトップページに表示させ、「残り0枚」になったら、予約画面には飛ばないようにしたいと思っています。 そのときの条件として、予約が成立するごとに、自動カウントダウンを行ないたいと思うのですが、そのようなシステムは作成可能でしょうか。 (今回は、1回の予約で、1枚しか買えないようにしたので、予約成立回数=送信完了回数=チケット枚数というようにしたいです。) 例:チケット枚数が上限50枚 1人目の送信者が予約完了画面でメールを自動送信して、トップページには[残り49枚] 2人目の送信者が予約完了画面でメールを自動送信して、トップページには[残り48枚] ・・・ 50人目の送信者が予約完了画面でメールを自動送信して、トップページには[完売] の様なシステムを作りたいですが。。。 いろいろ調べてはいるのですが、有料の在庫管理システムやショッピングカートシステムは見ることができたのですが、できたら勉強のため作成できたらなと思います。 知識薄な私には、提供されているシステム環境に登録して使った方がいいのは重々承知しています。しかし、勉強のためにもと思って行なっております。 どなた様かご教授宜しくお願いいたします。

  • PHP
  • 回答数5
  • ありがとう数0

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

  • ベストアンサー
noname#244856
noname#244856
回答No.3

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での例を記載しますが、長いので回答を切り分けます。

その他の回答 (4)

noname#244856
noname#244856
回答No.5

冗長な部分があったので訂正します。 // 注文を追加する $stmt = $pdo->prepare("INSERT INTO ticket_order(name, event_id) VALUES(?, ?)"); for ($i = 0; $i < $count; ++$i) { $stmt->bindValue(1, $name); $stmt->bindValue(2, $event_id, PDO::PARAM_INT); $stmt->execute(); } ↓ // 注文を追加する $stmt = $pdo->prepare("INSERT INTO ticket_order(name, event_id) VALUES(?, ?)"); $stmt->bindValue(1, $name); $stmt->bindValue(2, $event_id, PDO::PARAM_INT); for ($i = 0; $i < $count; ++$i) { $stmt->execute(); }

noname#244856
noname#244856
回答No.4

<?php try { // POSTパラメータの受け取り foreach (array('event_id', 'name', 'count') as $name) { $$name = isset($_POST[$name]) && is_string($_POST[$name]) ? $_POST[$name] : ''; } // 接続設定 $dsn = 'mysql:dbname=my_web_site;host=localhost;charset=utf8'; $dbuser = 'root'; $dbpassword = ''; $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ); // 接続 $pdo = new PDO($dsn, $dbuser, $dbpassword, $options); // SQLモード・トランザクション分離レベル設定 $pdo->exec("SET SESSION sql_mode='TRADITONAL'"); $pdo->exec("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE"); // 名前チェック if ($name === '') { throw new RuntimeException('名前が未入力です'); } // 枚数チェック if (!ctype_digit($count) || $count < 1) { throw new RuntimeException('購入枚数が不正です'); } // トランザクション開始 $pdo->beginTransaction(); try { // 販売枚数を操作する $stmt = $pdo->prepare("UPDATE event SET sold = sold + ? WHERE id = ? AND sold + ? <= quantity"); $stmt->execute(array($count, $id, $count)); if (!$stmt->rowCount()) { throw new RuntimeException('指定された枚数は購入できません'); } // 注文を追加する $stmt = $pdo->prepare("INSERT INTO ticket_order(name, event_id) VALUES(?, ?)"); for ($i = 0; $i < $count; ++$i) { $stmt->bindValue(1, $name); $stmt->bindValue(2, $event_id, PDO::PARAM_INT); $stmt->execute(); } // トランザクションをコミットする $pdo->commit(); } catch (Exception $e) { // トランザクションをロールバックして例外を外側にスロー $pdo->rollBack(); throw $e; } } catch (Exception $e) { // エラーメッセージをセット $message = $e->getMessage(); } // 文字セットをブラウザに伝える header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <html> <body> <p><?=htmlspecialchars($message, ENT_QUOTES, 'UTF-8')?></p> </body> </html>

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

チケットテーブルに(レコードごとに)在庫数を持てばいいだけじゃないですかねぇ(もちろん、仕入数と売上(予約・発券)数でもいいです)。 #残り枚数をデータベースから(あるいは計算して)表示するくらいは #基本中の基本でしょ? 予約データを作成したら、update文で在庫からマイナス(もしくは予約済み数にプラス)するだけです。 もちろん残り枚数を表示する予約画面でもチェックしますが、最終的に「予約処理」を行う時点で再チェック(というかトランザクション処理にして、引き当てられなければロールバック)が必須です。残り1枚に対して「同時に予約処理が入る」というケースも想定しないといけませんから。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>MAMPを使用しています。 であれば在庫管理はMySQLでやることをお勧めします 代金の決済まで本格的にやるのは個人レベルではきびしいでしょう カード決済にしろ引き落としにしろそれなりのノウハウが必要なので。

関連するQ&A

  • 在庫数を表示したいだけなんですが…

    最近レンタルサーバーを替え、在庫管理& ショッピングカート機能を利用しています。 以前利用していたところでは、商品一覧と 同じページに在庫数を表示することが できたのですが、新しいサーバーは 在庫表示が別画面になり、商品ページには URLをリンクするしか方法がありません。 自動作成ページの場合は、在庫がなければ 「在庫がありません」と表示されるのですが、 ホームページビルダーで作成した自作ページに ショッピングカートをリンクしているため、 一つ一つの商品をクリックしなければ、在庫の 有無が分かりません。 (細かい商品が多いので、自動作成ページは 今後も使用するつもりはありません) 他社のレンタルサーバーなどを利用して、 在庫数だけ、商品一覧ページ内に表示 することは可能でしょうか? 他に何か良い方法がありましたら教えて下さい。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • CGI
  • PHP+MYSQLについて

    PHP+MYSQLについて 速効!図解プログラミング PHP+MYSQLと言うの本の中で紹介されています。PHPとMysqlで作る会員管理システムについてこの本を元にして構成を変更したく考えています。下記の内容を実現するにはどの様な変更するとうまくいくのでしょうか? 画面遷移を トップページ ⇒ 登録画面(全項目登録) ⇒ 確認画面 メール送信完了画面 メールhttp://~ ⇒ 登録完了 ⇒ ログイン を トップページ ⇒ 登録画面(メールのみの登録) ⇒ 確認画面 メール送信完了画面 メールhttp://~ ⇒ 本登録(全項目登録) ⇒ 登録録完了 ⇒ ログイン この本をお持ちの方、勉強された方どの様な作りにしたらよいと思いますか? ちなみにこの本のサンプルはhttp://book.mycom.co.jp/suport のSection72-81です。 皆様なにとぞお力をお貸しいただけます様によろしくお願いいたします。

    • 締切済み
    • PHP
  • 楽天ブックスの在庫表示は信用してはいけない?

    楽天ブックスで「在庫あり(残り10冊)」となっていた漫画を注文したのですが、1週間以上経過して「在庫なし」のため自動キャンセルとなりました。 ここで不思議だったのですが、1週間前まで10冊もあったのに、何でいきなり在庫無しになってしまったのでしょうか? ちなみにこの本は10年くらい前に出た本で、特に流行の本と言う訳でも、雑誌で紹介されて有名になった本と言う訳でもありません。 また、同じこの漫画を去年も注文したのですが、その時も「在庫あり」になっており1週間以上経ってから「在庫なし」でキャンセルになってしまいました。 今回、久しぶりに商品ページを見たら「在庫有り(残り10冊)」になっていたので「今度こそ買える」と思って注文したところ、またキャンセルになってしまい???となっています。 楽天ブックスは「在庫有り」になっているのに、何故、注文後にキャンセルとなってしまうのでしょうか? 出版社に取り寄せの連絡を入れているから1週間以上かかるのだと思ったのですが、それならば何故「在庫あり」(しかも具体的な冊数まで)と表示しているのでしょう。 10冊…なんて書かないでくれたら変な期待もしなかったのですが、この具体的な冊数はどこから出ているものなんでしょうか? 予約商品などのレビューを見ていると「楽天ブックスの在庫表示は信用できない」と言うものが多いのですが、この在庫表示はどう言う基準で決めているんでしょうか? 何で10冊と表示されていたのかが気になっています。

  • 在庫管理と自動送信メール

    某レンタルサーバーを利用してWebショップを運営しています。 まだ始めたばかりでヤフー登録もしていないので、注文数もほとんどない状態なんですが、困っていることがあります。使っているレンタルサーバーの機能で、注文を受けたら受注完了のメールが相手側に自動的に送られるようになっています。しかしこれって同じものの注文がほぼ同時刻に入ってしまったら在庫が一点しかなくても受けてしまう状態ですよね?これをなんとかしようとレンタルサーバーに連絡してみたところ、今のところそのような機能はついていませんという答えが返ってきました。メールを自動送信にしないようにすればとも思ったんですが、これをやっていると、この先忙しくなってきてしまった場合対応できなくなるかもと思い悩んでいます。 一回注文を受けてしまったのにあとですいません在庫ありませんでしたなんてメールを送るのも失礼だし。それとも皆さんメールの自動送信は個人規模ではあまりしていないんですかね?なにかいいソフトとか、CGIがあったら 教えていただきたいです。

  • エクセルを使った、在庫管理と発注。

    エクセルを使った、在庫管理と発注。 私は、エクセルが得意ではないのですが、今日、用事で退社する上司に「手が空いているので何かやっておくことがあったら言ってください」といったところ、思わぬ無茶振りをされてしまい、とても困っています。在庫管理などに関する知識がまったく無い人間なので、説明が長くなってしまうことと、わかりにくい点があるかもしれないですが、なるべくわかりやすく書こうと思うのでご協力お願いいたします。 現在当社の商品在庫は、エクセルで管理されております。 発注は目視で足りないと思ったら適性分だけ頼むかたちです。 今度上司のしたいことはエクセルの在庫データを使って「発注リスト」が自動的に作成されることです。 例えば、商品Aの適正在庫が5だとして、それを切ったら自動でリストの中に適正在庫になるような個数と商品名が載る。あとはそれをプリントアウト(パソコンからも送れるのでそれで自動発注できればなお良いです)してFAXで発注。というかたちです。 それは、エクセル上で全部済めばそれでも良いですが、そのやり方が複雑な場合、こんな方法、こんな簡単なソフトがあるよ、という意見がありましたらよろしくお願いしたいです!! 当社POSシステムはございません。導入もいたしませんのでどうかパソコンでの方法でご回答お願いいたします。 アクセスは、当社で使える者がいないため、なるべくエクセルを使う形にしたいみたいです。 何か説明が足りないようでしたらご指摘ください。 よろしくお願いいたします!

  • 【Excel】在庫管理 VBA 関数

    在庫・販売管理用のファイルをExcelにて作成しています。 仕様 ・仕入管理/在庫管理/販売管理の3シート ・商品データは在庫管理シートに記録 ・商品にはそれぞれ商品番号をつけ管理 まだ運用前なのですが、以下のような運用方法を考えています。 それにあたって、自動化したい作業があるのですが、なかなかできず…。 VBAの知識をお持ちの方,お力をかして頂けないでしょうか? もしくは関数で同じような動作が実行可能なら、そちらでも構いません。 <仕入れがあった場合> (1)在庫管理シートに商品を登録(以前に取り扱ったことのある商品の場合は省略) (2)仕入管理シートに商品の仕入数を記録(VLOOKUP関数で在庫管理シートから商品名等を呼び出します) (3)在庫管理シートに(2)で入力した仕入数反映(在庫管理シートにプラス) ← ここを自動化したいです <販売した場合> (1)販売管理シートに販売した商品、価格、個数、販売相手などを記録(同じく在庫管理シートから商品詳細を呼び出します) (2)在庫管理シートに(1)で入力した販売数を反映(在庫管理シートからマイナス) ← ここを自動化したいです この自動化ができれば在庫管理シートがリアルタイムの在庫を表示するようになるので、とても便利なのですが、今現在の状態だと、この「自動化したい部分」を手作業にてやる予定です。 現在は商品の出入がとても少ないので、手作業でも問題ないのですが、今後商品が増えることを考えると実用的ではなく…。 できれば、「入力してすぐ反映」というシステムより、「入力後確認→確定→反映」というシステムにしたいのですが…。(ワガママで申し訳ないです) 私は関数はある程度扱えますが、VBAについては初心者の状態から今勉強中といったところです。 是非皆様のお力を貸して下さい!よろしくお願い致します。

  • PHPからヘッダーなどを使ってPOST送信する。

    はじめまして、aimtakuと申します。 現在ショッピングシステムを開発しているのですが、 カード決済とコンビニ決済で、決済代行会社を使用する事になり、 色々調査をした所。最後の決済ページより、POSTでデータを送信しなければならない事が判明しました。 商品ページ⇒カート⇒決済ページ⇒確認ページ⇒注文完了ページ⇒決済代行会社へPOST送信といった流れになると思います。 そこで、注文完了画面より、PHPから$_GETのようにPOST送信する方法はありませんでしょうか? 色々調べてみたのですが、どうしてもわかりません。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPによる会員情報管理システムについて

    XAMPPを利用してのPHPで会員情報管理システムを急ぎで作成しているとこです。 会員ID・パスワード・その他個人情報を入力し、データの新規作成(CSV形式での外部ファイルへの書込み) 後に、会員IDを入力しての      ★検索(現IDと入力したIDと一致すれば、現データを画面表示。見つからなければエラー表示)      ★削除(現IDと入力したIDと一致すれば、現データを画面表示→削除ボタンを押すと「削除完了しました」と表示(外部ファイルの中身も消去))      ★変更(現IDと入力したIDと一致すれば、データを再入力するための入力画面を表示→変更ボタンが押されれば変更したデータを画面表示(外部ファイルも書き換えられている)) この四つの処理が可能なページを作成しなければならないのです 新規作成まではいけたのですが・・・ 残り三つの  検索・変更・削除 の処理のソースの書き方が全くわからないで(=x=) 助言を求めます(汗 それと皆様がこういう困ったときに見る情報サイトなどあれば教えて欲しいです。

  • アンケートフォーム送信後の送信完了画面について

    ver9を使用しています。 よくHPで、アンケートフォームなど送信後、「送信ありがとうございました」旨の送信完了画面ページになると思うのですが、ホームページビルダーでは作成できないのでしょうか? 送信完了ページ作成後、アンケートフォームの送信ボタンからリンク設定をしてみたのですが、2回押さないと送信完了画面に移りません(1回目の送信ボタンクリックでフォームが送信されますが、そのままの画面です)。 宜しくお願い致します。

  • ロッピーでチケットを予約する際の予約確定について。

    近々ロッピーで有名アーティストのライブのチケット発売初日10時発売のチケットを取ろうと思っております。 その際の予約確定についてなのですが、 10時にLコードを入れて[検索]を押す ↓ 問い合わせ ↓ 枚数などの申し込みの画面 ↓ 問い合わせ ↓ 申し込み完了(名前入力?) ↓ レジへ という感じだと思うのですが、この場合予約は何処で確定するのでしょうか? 枚数などを入力したあとの問い合わせがすんで確保されるということなのでしょうか? なるべくお早い回答をいただけると有難いです、宜しくお願いします。m(_ _)m

専門家に質問してみよう