[概要] ECサイトを作る時に、どのようにして購入する商品のデータを買い物かごに入れたり等の管理や、 ユーザが複数人いる場合の対処はどのようにしているのか知りたい。
私は趣味でプログラミングをしています。
(基本的にはC++でソフト開発。一応HTML + CSS + JavaScriptでクライアントサイドに関してはやったことがあります)
AmazonのようなECサイトをオフラインPC上で作ってみたいと思い、
環境を整えている途中です。
それで疑問に思っているのが、「どうやってデータを管理するのか」と「どのようにユーザごとに管理をしているか」です。
私が思いつくものだと、
(名称は適当ですが)
まず 商品を提供する人を"提供者"、商品を購入する人を"ユーザ"とすると、
0. 提供者が商品を追加したり、削除したり等の処理をしてDBにセット 1. ユーザが商品名なりの情報を検索窓に入力して検索 1.1. ECサイトが該当する商品の一覧ページをPHP等で生成して表示 1.2. ユーザが一覧ページから商品の画像をクリック 1.2.1. ECサイトがPHP等でその商品の詳細ページを生成して表示 1.2.2. ユーザが「購入」ボタンを押す 1.2.2.1. ECサイトが「買い物かご」ページを生成して表示 1.2.2.2. ユーザが他に欲しいものがあるなら続けて検索窓に入力するなりして(1)から(1.2.2.2)までを繰り返す 1.2.2.3. ユーザが「レジに進む」ボタンを押す 1.2.2.3.1. ECサイトがPHP等で「レジ」のページを生成して表示 1.2.2.3.2. ユーザが購入するための情報(クレジットカード等)を入力 1.2.2.3.2.1. 「購入完了しました」系のページを生成して表示 1.2.2.3.2.2. PHP等でユーザには「購入したもの」や金額等、提供者には「どの商品を送るか」等の情報をメールで送信
という感じだと考えているのですが。
この流れが仮に正しいとするなら、{ 0, 1 } は何となくわかる気がします。
(おそらくDB操作して、その都度取り出している?)
でもわからないのは、一つ目は、(1.2.2) から (1.2.2.1) あるいは (1.2.2.3) から 別の(1) に移動する際のデータはどうなっているのかです。
たとえば(1.2.2) の時点でDBに「購入しようとしている商品」の一覧にセットして…とやっているのか、
PHP等のようなものに、「次に表示するページにデータを渡していく」のかです。
後者だと、一品目だと、 "product1" で 二品目だと "product1;product2" という風につなげていって…という感じでしょうか。
二つ目が、(0) や (1.2.2.3.2.2) のような、データ管理をどうするかです。
そして、三つ目が、上記フローにはありませんが、普通、ECサイトでのユーザは一人だけじゃなくて複数人いますよね。
JavaScriptのようにクライアントサイドなら、そこまで考えなくてもいいですが、
サーバサイドだと、C++やC#のような言語でマルチスレッドをやるような感じになるのでしょうか。
また、候補一覧を保持しておく方法も知りたいです。
Amazonで『C++ 本』で検索して、一つ目の詳細ページを開いて、
そのまま別の本(C++の)の詳細ページも続けて調べる…みたいな感じです。
まだ手を付けていない段階なのでどうなるかわからないですが、宜しくお願いします。
(一応作ろうとしている作品はオフラインで自分ひとりが使うようなもので、クレジット決済等はしませんが、後学のために…)
[情報]
言語: PHP(の予定) (もしくはC++等でのCGIか)
環境: Apache + PHP + (データベースソフト)
OS: Windows 10
使ったことがある言語等: HTML, CSS, JavaScript(クライアントサイド), JScript, C言語, C++
[追記1]
皆さんご回答ありがとうございます。
『最小単位から始める』のと『考えているだけでは出来上がらない』のは承知しています。
ただ、少なくとも『どのようにデータを管理するのか』がわからなくて…
C言語等でやるなら、たとえば CSVファイル等からデータを取り出して構造体なりのやつのリスト構造あるいは配列等で保持しますよね。
このように、大本のプロセスで保持して配列等を操作するような感じになるのか、
その都度データベースから毎回取り出すのか…ということが知りたかったのです。
[追記2]
とりあえず Apache, PHP のインストール及び起動の確認はできました。
そのうえ、(一応C++はできるので)ざっとPHPの書き方を学びました。
今現在、とりあえずそれぞれのページ(買い物かごページ等)を作っている途中です。
[追記3]
(すみません。質問が紛らわしかったですね…。修正します。ドンピシャな例が思いつかなかったもので…)
パターン1: C/C++でのDDE等のように、サーバソフト・クライアントソフトを作成し、 サーバソフトをレンタルサーバ等に置いて、 クライアントソフトを用いてデータのやり取りをするような感覚で、 一つのPHPファイル(あるいは一つのCGIファイル)をサーバソフト、 HTMLをクライアントソフトのようにして、 PHPファイル(あるいはCGIファイル)がすべて担って、 サイトのindex.html起動時(一回のみ)と買い物かごで決定した時等のような場合のみDB操作をして、 それ以外は基本的にPHPファイル(またはCGIファイル)がデータをすべてC言語でいう構造体の配列のような 感じで保持している。
パターン2: (クライアントサイドの)JavaScriptのように、ページごと(あるいは「更新」・「再読み込み」)にDBからその都度取り出している。
パターン3: パターン2のような感じでいったん取り出し、Google等の検索時のURLのように ttp://(URL)/next.html?key=(データ群) 等のようにURLで次々に渡していって、"product1;product2;product3...." のように連結していき、 最終的なレジのページでPHP等で解析して…等のようにしている。
の三つが思いついていました。
このうちのどれなのでしょうか。(もしかしたら他の可能性もありますが)
つまり、言い換えると「データの生存期間はどれぐらいなのか」です。
パターン1ならそのメインのサイトが閉じられるまで(AmazonでいえばAmazon自体から離れるまで)で、
パターン2なら一ページ(「再読み込み」する場合はその回数レベルで)の範囲、
パターン3ならパターン1と同じですが、作法が違う。
という風に。
使ってみた感じでは、
PHP
1# phptest.php 2<?php 3 $keyword = isset($_GET["keyword"])? htmlspecialchars($_GET["keyword"], ENT_QUOTES, 'utf-8') : ''; 4 echo $keyword 5?>
HTML
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<title>テスト</title> 5<link rel="stylesheet" href="default.css"> 6</head> 7<body> 8 9<div class="mainarea"> 10<h1>テスト</h1> 11 12<form id="testform" action="phptest.php"> 13 <p><label for="keyword" id="label1">キーワード:</label><input type="text" name="keyword" id="keyword"><input type="submit" value="検索!" id="searchbutton"></p> 14</form> 15 16</div> 17</body> 18</html>
とやってみましたが、JavaScriptのように関数を呼び出すタイプじゃないみたいなので…
(ちなみに実行結果は入力された値が移動先で表示されるっぽい…)
回答3件
あなたの回答
tips
プレビュー