PHPでデータベースと連携してショッピングカートを作成する方法

更新日:2021年11月27日

PHP単体でも色々なことが出来ますが、PHPはデータベースと連携することで凄まじい真価を発揮します。今回はその代表例といってもいいショッピングカートの作成の方法をどこよりも簡単に解説します。

最終的な完成ファイル一式を公開していますので、ダウンロードすることですぐにカートシステムを実装出来ます。以下のリンクからダウンロードして下さい。
PHPでデータベースと連携してショッピングカートを作成する方法【完成ファイル】

デモはこちらです!

作成していくファイルは下記の7ファイルとなります。この7ファイルを使って簡易的なショッピングカートシステムを作成していきます。

  • dbconnect.php(データベースへの接続情報を書きます)
  • index.php(データベースに登録された情報一覧が表示されます)
  • input.php(入力画面です。ここに入力された情報がデータベースに登録されます)
  • input_do.php(input.phpで入力された情報をデータベースに登録する為のプログラムを書きます)
  • update.php(編集画面です。一度入力された情報を編集出来ます)
  • update_do.php(update.phpで編集された情報をデータベースに登録する為のプログラムを書きます)
  • delete.php(データベースに登録された情報を削除します)

上のphpファイルから順に作成していきますが、その前の下準備としてデータベースを用意する必要があります。
どのような仕様のデータベースを作るかから解説していきます。
開発環境はPHP5.5を想定しています。

データベースの準備

まずはphpMyAdminにログインして、「shopping_carts」という名前のデータベースを作成します。
そしてその中に「goods」という名前のテーブルを作成し、下記のキャプチャと同様の情報を入力します。

テーブル内には「id」「goods_name」「send」「size」「number_of_copies」という5つのカラムを挿入し、そこに「走れメロス」「翌日」「A4」…等の情報を入れています。
データ型はidはintにし、それ以外は全てtextにして下さい。
注意点として「id」には必ずプライマリーキーを設定するようにして下さい。

これでデータベースの準備は完了です。
入力が面倒だという方は下記のSQLファイルをインポートして使ってみて下さい。
shopping_cartsのSQLファイル(右クリックから名前をつけてリンク先を保存がおススメです)

dbconnect.php(データベースへの接続情報を書きます)の作成

dbconnect.phpという名前のphpファイルを作成して、下記のように記述します。

これはデータベースに接続する為の記述になります。
'localhost', 'root', 'root', 'shopping_carts'
の部分はお使いの環境によって違うかと思うので書き換えて下さい。
MAMPをお使いの方の場合はこの通りで大丈夫かと思います。

この記述をdbconnect.phpに書いておくことで、他の各ファイルでデータベースに接続する必要がある際にいちいち同様の記述を書かずにdbconnect.phpを呼び出す(require関数)だけで良くなる為、管理性が高まります。

index.php(データベースに登録された情報一覧が表示されます)の作成

index.phpという名前のphpファイルを作成して、下記のように記述します。
index.phpやこれから作る他のphpファイルも全てdbconnect.phpと同階層に作って下さい。

require('dbconnect.php');
でdbconnect.phpの情報を呼び出し、データベースに接続しています。

$recordSet = mysqli_query($db, 'SELECT * FROM goods ORDER BY id DESC');
では「goods」テーブルからデータを取得しています。DESCをつけることにより、逆順(新着順)になるようにしています。

while ($table = mysqli_fetch_assoc($recordSet)) {
では先程の$recordSetの中身を、mysqli_fetch_assocという結果の行を連想配列で取得する関数を使って取り出しています。
それをwhile文で繰り返し処理して「goods」テーブルのデータを全て書き出しています。

これでデータベースに登録された情報一覧が表示されるようになりました。編集や削除もこの画面からリンクされているので、ホーム画面ということになります。

input.php(入力画面です。ここに入力された情報がデータベースに登録されます)の作成

input.phpという名前のphpファイルを作成して、下記のように記述します。

入力画面になります。
お客様がこの画面に情報を入力するイメージになります。
入力された情報はinput_do.phpへ送信されます。

input_do.php(input.phpで入力された情報をデータベースに登録する為のプログラムを書きます)の作成

input_do.phpという名前のphpファイルを作成して、下記のように記述します。

$sql = sprintf('INSERT INTO goods SET goods_name="%s", send="%s", size="%s", number_of_copies="%s"',
mysqli_real_escape_string($db, $_POST['goods_name']),
mysqli_real_escape_string($db, $_POST['send']),
mysqli_real_escape_string($db, $_POST['size']),
mysqli_real_escape_string($db, $_POST['number_of_copies'])
);
ではsprintfという関数を使って、SQL文を組み立てています。"%s"には文字列を、%dには数値を代入出来るというルールがあります。
sprintfの詳細についてはTechAcademyさんの記事を参照して貰えればと思います。

そしてそのSQL文を
mysqli_query($db, $sql) or die(mysqli_error($db));
に代入してデータベースに送っているという訳です。
こうすることでinput.phpで入力された情報がデータベースに登録されます。

update.php(編集画面です。一度入力された情報を編集出来ます)の作成

update.phpという名前のphpファイルを作成して、下記のように記述します。

$id = $_REQUEST['id'];
$sql = sprintf("SELECT * FROM goods WHERE id=%d" , mysqli_real_escape_string($db, $id));
$recordSet = mysqli_query($db, $sql);
$data = mysqli_fetch_assoc($recordSet);
index.phpからのリンクでURLパラメータを生成されているので、例えばupdate.php?id=1で表示してみると、id1に入っているデータベースの情報が呼び出されます。走れメロスが表示されるはずですね。そのidを取得し、どのidが入った列が選択されているかを判断しています。

input type="text" name="goods_name" id="goods_name" value="<?php print(htmlspecialchars($data['goods_name'], ENT_QUOTES)); ?>">
ではデータベースのテーブルの内容を表示しています。value属性に仕込んでおくことで、あらかじめ入力された状態になるということですね。

<input type="hidden" name="id" value="<?php print(htmlspecialchars($data['id'], ENT_QUOTES)) ?>" /?>
ではhidden要素を使って、現在編集しているデータのidを渡しています。これをしないとどの情報が編集されたのかが分からなくなってしまう為です。この記述がないと全て情報が書き換えられてしまうので注意です。

update_do.php(update.phpで編集された情報をデータベースに登録する為のプログラムを書きます)の作成

update_do.phpという名前のphpファイルを作成して、下記のように記述します。

UPDATEのSQLを使い、データベースの情報を更新しています。UPDATEは必ずWHEREとセットで使う必要があり、WHEREにidをセットすることでどの情報を編集するのかを明確にしています。

delete.php(データベースに登録された情報を削除します)の作成

delete.phpという名前のphpファイルを作成して、下記のように記述します。

DELETEのSQLを使い、データベースの情報を削除しています。このDELETEは必ずWHEREとセットで使う必要があり、WHEREにidをセットすることでどの情報を編集するのかを明確にしています。

とても長かったですが、これにて完成です!お疲れ様でした。
データベースとの連携となるとPHPだけではなく、SQLの知識も必要になってくるので一気に敷居が上がります。
ご活用ください!