ECサイトで商品が購入された際に、何がどのくらい購入されたかなどを格納しておく必要があります。その際の処理を記録しておきます。
作りたいもの
- 購入完了画面
- ordersテーブルとorder_detailテーブルに購入情報を入れる
- ordersテーブルにはid,ユーザ名、住所、購入金額、クレジットカード番号、配送状況を格納
- order_detailテーブルには注文id,商品名、購入量を格納
ordersテーブルへの接続
まずはordersテーブルに情報を入れます。こちらはシンプルなデータベース接続なのでそれほど難しくありません。
<?php
session_start();
$name=$_POST['name'];
$adress=$_POST['adress'];
$total=$_POST['total'];
$creditNum=$_POST['creditNum'];
$status=1;
$count=count($_SESSION['cart']);
if(isset($name) && isset($adress) && isset($total) && isset($creditNum) ){
$hostname = "localhost"; //ホスト名
$userid = "iimori"; //データベースユーザ名
$passwd = "A8h3avau"; //接続パスワード
$dbname = "ecdatabase"; //データベース名
$con=mysqli_connect($hostname,$userid,$passwd,$dbname); //db接続に必要な情報を変数に入れる
// 接続状況をチェックします
if (mysqli_connect_errno()) {
die("データベースに接続できません:" . mysqli_connect_error() . "\n");
} else {
echo "データベースの接続に成功しました。\n";
}
$con->set_charset('utf8');
/* プリペアドステートメントを作成します */
if ($stmt = mysqli_prepare($con, "INSERT INTO orders (name, adress, totalprice, creditNum, status) VALUES (?,?,?,?,?)")) {
/* マーカにパラメータをバインドします */
mysqli_stmt_bind_param($stmt, "ssssi", $name,$adress,$total,$creditNum,$status);
/* クエリを実行します */
mysqli_stmt_execute($stmt);
/* 値を取得します */
mysqli_stmt_fetch($stmt);
/* ステートメントを閉じます */
mysqli_stmt_close($stmt);
}
status
は配送状況を表す変数ですが、今はすべて1として格納しています。
order_detailテーブルへの接続
次はorder_detailテーブルへ接続します。ここで格納する注文idとは、orderテーブルに格納されているオートインクリメントのidです。
以下のような処理を行います。
<?php
$query = 'SELECT id FROM orders WHERE id=(SELECT MAX(id) FROM orders)';
$result = $con->query($query);
// クエリを実行します。
if (!$result) {
echo $con->error;
exit();
}
$row=$result->fetch_array(MYSQLI_ASSOC);
for($i=0; $i<$count; $i++){
/* プリペアドステートメントを作成します */
if ($stmt = mysqli_prepare($con, "INSERT INTO order_detail (order_id, productName, boughtQuantity) VALUES (?,?,?)")) {
/* マーカにパラメータをバインドします */
mysqli_stmt_bind_param($stmt, "sss", $row['id'],$_POST['productName'][$i],$_SESSION['quantity'][$i]);
/* クエリを実行します */
mysqli_stmt_execute($stmt);
/* 値を取得します */
mysqli_stmt_fetch($stmt);
/* ステートメントを閉じます */
mysqli_stmt_close($stmt);
}
}
// 接続を閉じます
mysqli_close($con);
最大のidの注文が一番新しい注文ということになるので、SELECT文を用いて最大のidを最初に取り出しています。
次にそのidなどの情報をorder_detailテーブルにINSERTしています。
このような構造にすることで、ordersテーブルを見ると配送情報の確認ができ、order_detailテーブルを見るとどの商品がどれだけ売れたかの確認をすることが出来ます。