Arsip Harian: 21 November 2012

PHP MySQL; Membuat Shopping Cart (Keranjang Belanja) dengan Menggunakan Session


Tampilan Contoh Aplikasi Shopping Cart

Dalam aplikasi e-commerce tentunya terdapat shopping cart. Shopping cart digunakan untuk menampung sementara dari produk-produk yang akan dibeli oleh pengunjung situs e-commerce. Dalam tulisan ini akan menjelaskan secara singkat tentang shopping cart yaitu dengan menggunakan fasilitas session yang ada dalam PHP dan menggunakan MySQL untuk menyimpan data secara permanen.

1. Perancangan Database

Dalam tulisan ini menggunakan MySQL Workbench untuk merancang database MySQL. Atur rancangan database seperti gambar di bawah ini.

Relasi Antar Tabel

Source code di bawah ini merupakan hasil generated code dari rancangan database di atas.

file shoppingcart.sql

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE SCHEMA IF NOT EXISTS `shoppingcart` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;

USE `shoppingcart`;

CREATE  TABLE IF NOT EXISTS `shoppingcart`.`barang` (
  `id` INT(11) NOT NULL AUTO_INCREMENT ,
  `nama` VARCHAR(255) NULL DEFAULT NULL ,
  `deskripsi` TEXT NULL DEFAULT NULL ,
  `gambar` VARCHAR(60) NULL DEFAULT NULL ,
  `hpp` DECIMAL(22,2) NULL DEFAULT NULL ,
  `harga` DECIMAL(22,2) NULL DEFAULT NULL ,
  `waktu_masuk` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_swedish_ci;

CREATE  TABLE IF NOT EXISTS `shoppingcart`.`pelanggan` (
  `id` INT(11) NOT NULL AUTO_INCREMENT ,
  `nama` VARCHAR(60) NULL DEFAULT NULL ,
  `alamat` VARCHAR(255) NULL DEFAULT NULL ,
  `telepon` VARCHAR(20) NULL DEFAULT NULL ,
  `email` VARCHAR(45) NULL DEFAULT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_swedish_ci;

CREATE  TABLE IF NOT EXISTS `shoppingcart`.`penjualan` (
  `id` INT(11) NOT NULL AUTO_INCREMENT ,
  `tanggal` DATE NULL DEFAULT NULL ,
  `pelanggan_id` INT(11) NOT NULL ,
  `total` DECIMAL(22,2) NULL DEFAULT NULL ,
  `biaya_pengiriman` DECIMAL(22,2) NULL DEFAULT NULL ,
  `jumlah_total` DECIMAL(22,2) NULL DEFAULT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_penjualan_pelanggan1_idx` (`pelanggan_id` ASC) ,
  CONSTRAINT `fk_penjualan_pelanggan1`
    FOREIGN KEY (`pelanggan_id` )
    REFERENCES `shoppingcart`.`pelanggan` (`id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_swedish_ci;

CREATE  TABLE IF NOT EXISTS `shoppingcart`.`item_penjualan` (
  `id` INT(11) NOT NULL AUTO_INCREMENT ,
  `penjualan_id` INT(11) NOT NULL ,
  `barang_id` INT(11) NOT NULL ,
  `harga` DECIMAL(22,2) NULL DEFAULT NULL ,
  `kuantitas` DECIMAL(22,2) NULL DEFAULT NULL ,
  `jumlah_harga` DECIMAL(22,2) NULL DEFAULT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_item_pembelian_barang1_idx` (`barang_id` ASC) ,
  INDEX `fk_item_penjualan_penjualan1_idx` (`penjualan_id` ASC) ,
  CONSTRAINT `fk_item_pembelian_barang10`
    FOREIGN KEY (`barang_id` )
    REFERENCES `shoppingcart`.`barang` (`id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `fk_item_penjualan_penjualan1`
    FOREIGN KEY (`penjualan_id` )
    REFERENCES `shoppingcart`.`penjualan` (`id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_swedish_ci;

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

file barang_data.sql


INSERT INTO `barang` (`id`, `nama`, `deskripsi`, `gambar`, `hpp`, `harga`, `waktu_masuk`) VALUES
(1, 'Djarum 76', 'Djarum 76 adalah hasil dari ramuan rahasia kretek kudus yang melegenda lebih dari dari 120 tahun dipadu dengan Tembakau matang, tembakau Srintil, cengkeh matang pohon dan rempah-rempah tradisional khas Indonesia, membuat Djarum 76 selalu nikmat.', 'djarum76.jpg', 6000.00, 7000.00, '2012-11-21 22:15:54'),
(2, 'Surya 12', 'Duis placerat iaculis nisi, et pulvinar nisi bibendum ac. Morbi massa justo, pharetra at eleifend eu, facilisis quis diam. Integer eget mi purus, et feugiat elit. ', 'surya12.jpg', 9000.00, 10000.00, '2012-11-21 22:21:44'),
(3, 'Djarum Super', 'Ut in augue at risus posuere molestie ut at velit. Aenean tincidunt euismod ultricies. Curabitur ut nisl justo. Aenean viverra auctor urna, ac tincidunt mi euismod ut.', 'jdarumsuper.jpg', 10000.00, 11000.00, '2012-11-21 22:34:47'),
(4, 'Marlboro', 'Integer vel convallis urna. Etiam quis urna ac risus mollis blandit. Mauris bibendum interdum rhoncus. Suspendisse urna sapien, tincidunt in fermentum at, tempus sit amet ipsum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.', 'marlboro.jpg', 13000.00, 14000.00, '2012-11-21 22:21:12'),
(5, 'Dji Sam Soe', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta, ipsum in faucibus lacinia, libero mauris tempor ipsum, eget pharetra mi augue ut diam. In dignissim commodo ligula vitae tempus. In hac habitasse platea dictumst. Morbi aliquam augue sit amet sem dignissim consectetur. ', '234.jpg', 10000.00, 11000.00, '2012-11-21 22:21:00');

Eksekusi file sql di atas

2. Buat file conn.php

File ini digunakan untuk koneksi ke database. Berikut ini merupakan source code conn.php


<?php
$hostname_conn = "localhost";
$database_conn = "shoppingcart";
$username_conn = "root";
$password_conn = "";
$conn = mysql_connect($hostname_conn, $username_conn, $password_conn) or die(mysql_error()); 
?>

3. Buat file cart.php

File ini digunakan untuk menyimpan fungsi-fungsi yang berkaitan dengan cart yaitu untuk menambah, menghapus dan mengubah. Berikut ini merupakan source code file cart.php


<?php
	require_once("conn.php");
	if (!isset($_SESSION)) {
		session_start();
	}
	
	if (isset($_GET['act']) && isset($_GET['ref'])) {
		$act = $_GET['act'];
		$ref = $_GET['ref'];
			
		if ($act == "add") {
			if (isset($_GET['barang_id'])) {
				$barang_id = $_GET['barang_id'];
				if (isset($_SESSION['items'][$barang_id])) {
					$_SESSION['items'][$barang_id] += 1;
				} else {
					$_SESSION['items'][$barang_id] = 1;	
				}
			}
		} elseif ($act == "plus") {
			if (isset($_GET['barang_id'])) {
				$barang_id = $_GET['barang_id'];
				if (isset($_SESSION['items'][$barang_id])) {
					$_SESSION['items'][$barang_id] += 1;
				}
			}
		} elseif ($act == "min") {
			if (isset($_GET['barang_id'])) {
				$barang_id = $_GET['barang_id'];
				if (isset($_SESSION['items'][$barang_id])) {
					$_SESSION['items'][$barang_id] -= 1;
				}
			}
		} elseif ($act == "del") {
			if (isset($_GET['barang_id'])) {
				$barang_id = $_GET['barang_id'];
				if (isset($_SESSION['items'][$barang_id])) {
					unset($_SESSION['items'][$barang_id]);
				}
			}
		} elseif ($act == "clear") {
			if (isset($_SESSION['items'])) {
				foreach ($_SESSION['items'] as $key => $val) {
					unset($_SESSION['items'][$key]);
				}
				unset($_SESSION['items']);
			}
		} 
		
		header ("location:" . $ref);
	}	
	
?>

4. Buat file cart_view.php

File ini digunakan untuk menampilkan daftar barang-barang yang ada dalam cart (yang telah dipilih untuk dibeli). Berikut ini merupakan source code cart_view.php


<table width="100%" border="0" cellspacing="0" cellpadding="0" class="viewer">
  <tr>
    <th align="left" scope="col">Kode Barang</th>
    <th align="left" scope="col">Nama Barang</th>
    <th align="right" scope="col">Harga</th>
    <th align="right" scope="col">Qty</th>
    <th align="right" scope="col">Jumlah Harga</th>
    <th align="right" scope="col">Aksi</th>
  </tr>
  <?php
  $total = 0;
  if (isset($_SESSION['items'])) {
  		foreach ($_SESSION['items'] as $key => $val){
			$query = mysql_query ("select barang.id, barang.nama, barang.harga from barang where barang.id = '$key'");
			$rs = mysql_fetch_array ($query);
			
			$jumlah_harga = $rs['harga'] * $val;
			$total += $jumlah_harga;
  ?>
  <tr>
    <td><?php echo $rs['id']; ?></td>
    <td><?php echo $rs['nama']; ?></td>
    <td align="right"><?php echo number_format($rs['harga']); ?></td>
    <td align="right"><?php echo number_format($val); ?></td>
    <td align="right"><?php echo number_format($jumlah_harga); ?></td>
    <td align="right"><a href="cart.php?act=plus&amp;barang_id=<?php echo $key; ?>&amp;ref=index.php">+</a> | <a href="cart.php?act=min&amp;barang_id=<?php echo $key; ?>&amp;ref=index.php">-</a> | <a href="cart.php?act=del&amp;barang_id=<?php echo $key; ?>&amp;ref=index.php">Hapus</a></td>
  </tr>
  <?php
  			mysql_free_result($query);
  		}
  }
  ?>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td align="right">&nbsp;</td>
    <td align="right">&nbsp;</td>
    <td align="right"><?php echo number_format($total); ?></td>
    <td align="right"><a href="cart.php?act=clear&amp;ref=index.php">Clear</a></td>
  </tr>
</table>

5. Buat file index.php

File ini digunakan untuk menampilkan daftar produk. Berikut ini merupakan source code index.php


<?php 
	require_once("conn.php");
	if (!isset($_SESSION)) {
		session_start();
	}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Contoh Aplikasi Shopping Cart</title>
<style>
	h1, h2, h3, p {
		margin-top:0px;
		margin-bottom:10px;
	}
</style>
</head>

<body>

<h1>Contoh Aplikasi Shopping Cart</h1>
<h2>List Produk</h2>
<hr />
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr valign="top">
    <td width="55%"><table width="100%" border="0" cellspacing="0" cellpadding="0">
      <?php
	mysql_select_db($database_conn, $conn);
	$query = mysql_query ("select * from barang");
	while ($rs = mysql_fetch_array ($query)) {
		 
	?>
      <tr>
        <td width="160" valign="top"><img src="<?php echo $rs['gambar']; ?>" alt="" style="width:140px; margin-right:20px; margin-bottom:20px;" /></td>
        <td valign="top"><h3><?php echo $rs['nama']; ?></h3>
          <p><?php echo $rs['deskripsi']; ?></p>
          <p>Harga : <?php echo number_format($rs['harga']); ?> - <a href="cart.php?act=add&amp;barang_id=<?php echo $rs['id']; ?>&amp;ref=index.php">Beli</a></p></td>
        </tr>
      <?php
	}
	?>
    </table></td>
    <td>&nbsp;</td>
    <td width="40%"><p>Keranjang Anda</p>
      <hr />
      <?php require("cart_view.php"); ?></td>
  </tr>
</table>
<p>&nbsp;</p>
</body>
</html>

Sekarang coba jalankan!!!

Sekian dulu, silakan dikembangkan sendiri aplikasi sederhana ini, semoga bermanfaat… :D