By GokiSoft.com|
19:57 11/03/2022|
Học PHP
[Video] Bài tập - Xây dựng cart (giỏ hàng) + checkout (thanh toán) sử dụng Cookie - Lập trình PHP/MySQL - C2108L
#db/config.php
<?php
define('HOST', 'localhost');
define('DATABASE', 'BT2290');
define('USERNAME', 'root');
define('PASSWORD', '');
const SQL_CREATE_DATABASE = 'create database IF NOT EXISTS '.DATABASE;
const SQL_CREATE_TABLE_PRODUCTS = 'create table IF NOT EXISTS products (
id int primary key auto_increment,
title varchar(150) not null,
price float,
thumbnail varchar(500),
content text,
created_at datetime,
updated_at datetime
)';
const SQL_CREATE_TABLE_ORDERS = 'create table IF NOT EXISTS orders (
id int primary key auto_increment,
fullname varchar(50),
phone_number varchar(20),
email varchar(150),
address varchar(200),
order_date datetime
)';
const SQL_CREATE_TABLE_ORDER_DETAIL = 'create table IF NOT EXISTS order_detail (
id int primary key auto_increment,
order_id int references orders (id),
product_id int references products (id),
num int,
price float
)';
#db/dbhelper.php
<?php
require_once('config.php');
//create database
function initDB() {
// Mo ket noi toi CSDL
$conn = mysqli_connect(HOST, USERNAME, PASSWORD);
mysqli_set_charset($conn, 'utf8');
// Thuc hien query -> insert du lieu vao database
// $query = "insert into Users(fullname, email, password, address) values ('$fullname', '$email', '$pwd', '$address')";
// echo $query;
mysqli_query($conn, SQL_CREATE_DATABASE);
// Dong ket noi CSDL
mysqli_close($conn);
}
/**
* Ham nay se su dung cho TH cau truy van: insert, update, delete
*/
function execute($query) {
// Mo ket noi toi CSDL
$conn = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);
mysqli_set_charset($conn, 'utf8');
// Thuc hien query -> insert du lieu vao database
// $query = "insert into Users(fullname, email, password, address) values ('$fullname', '$email', '$pwd', '$address')";
// echo $query;
mysqli_query($conn, $query);
// Dong ket noi CSDL
mysqli_close($conn);
}
function executeResult($query, $isSingle = false) {
// Mo ket noi toi CSDL
$conn = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);
mysqli_set_charset($conn, 'utf8');
// Thuc hien query -> insert du lieu vao database
// $query = "insert into Users(fullname, email, password, address) values ('$fullname', '$email', '$pwd', '$address')";
// echo $query;
// $query = "select * from Users where email = '$email' and password = '$pwd'";
$resultset = mysqli_query($conn, $query);
if($isSingle) {
$data = mysqli_fetch_array($resultset, 1);
} else {
$data = [];
while(($row = mysqli_fetch_array($resultset, 1)) != null) {
$data[] = $row;
}
}
// Dong ket noi CSDL
mysqli_close($conn);
return $data;
}
#utils/utility.php
<?php
function getPost($key, $slash = '\'') {
$value = '';
if(isset($_POST[$key])) {
$value = $_POST[$key];
// $value = Sinh Vien ' ABC ' => Sinh Vien \' ABC \'
// \\ -> \
// \' -> '
// \' (Hieu la: ') -> \\\' (Hieu la: \')
$value = str_replace($slash, "\\".$slash, $value);
}
return $value;
}
function getGet($key, $slash = '\'') {
$value = '';
if(isset($_GET[$key])) {
$value = $_GET[$key];
$value = str_replace($slash, "\\".$slash, $value);
}
return $value;
}
define('CART_TIME_LINE', 7*24*60*60);
function getCartFromCookie() {
$cookieCart = [];
if(isset($_COOKIE['cart'])) {
$cookieCart = json_decode($_COOKIE['cart'], true); //[{"id":1, "num": 2},{...},...]
//select * from products where id in (1, 2, 6, 5)
if(count($cookieCart) > 0) {
$idList = [];
foreach($cookieCart as $item) {
$idList[] = $item['id'];
}
$idList = implode(',', $idList);
$query = "select * from products where id in ($idList)";
$result = executeResult($query); //missing: num
for ($i=0; $i < count($result); $i++) {
for ($j=0; $j < count($cookieCart); $j++) {
if($result[$i]['id'] == $cookieCart[$j]['id']) {
$result[$i]['num'] = $cookieCart[$j]['num'];
break;
}
}
}
// Xong phan mang
$cookieCart = $result;
}
}
// $_ENV -> chuyen du lieu trong request
$_ENV['cart'] = $cookieCart;
return $cookieCart;
}
function removeCartItem($cookieCart, $id) {
if(isset($_ENV['cart'])) {
$cookieCart = $_ENV['cart'];
} else {
$cookieCart = getCartFromCookie();
}
for ($i=0; $i < count($cookieCart); $i++) {
if($cookieCart[$i]['id'] == $id) {
array_splice($cookieCart, $i, 1);
break;
}
}
setcookie('cart', json_encode($cookieCart), time() + CART_TIME_LINE, '/');
}
//$num > 0 -> OK & $num < 0
function addCartItem($id, $num) {
$cart = [];
if(isset($_COOKIE['cart'])) {
$cart = json_decode($_COOKIE['cart'], true);
}
$isFind = false;
for ($i=0; $i < count($cart); $i++) {
if($cart[$i]['id'] == $id) {
$cart[$i]['num'] += $num;
if($cart[$i]['num'] <= 0) {
//Xoa san pham nay khoi cart
array_splice($cart, $i, 1);
}
$isFind = true;
break;
}
}
if(!$isFind && $num > 0) {
$cart[] = [
'id' => $id,
'num' => $num
];
}
setcookie('cart', json_encode($cart), time() + CART_TIME_LINE, '/');
}
function emptyCookie() {
setcookie('cart', '', time(), '/');
}
#cart.php
<?php
session_start();
require_once('utils/utility.php');
require_once('db/dbhelper.php');
//giai phap Session - START
// if(!isset($_SESSION['cart'])) {
// $_SESSION['cart'] = [];
// }
//giai phap Session - END
$cookieCart = getCartFromCookie();
if(!empty($_POST)) {
$id = getPost('id');
// Xoa 1 san pham khoi gio hang - giai phap Session - START
// for ($i=0; $i < count($_SESSION['cart']); $i++) {
// if($_SESSION['cart'][$i]['id'] == $id) {
// array_splice($_SESSION['cart'], $i, 1);
// break;
// }
// }
// Xoa 1 san pham khoi gio hang - giai phap Session - END
// Giai phap su dung cookie - START
removeCartItem($id);
// Giai phap su dung cookie - END
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Init Database</title>
<!-- Bootstrap -> thiet ke GUI -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style type="text/css">
.form-group {
margin-bottom: 20px;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-sm bg-light navbar-light">
<div class="container-fluid">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="products.php">Products</a>
</li>
<li class="nav-item">
<a class="nav-link" href="init.php">Init DB</a>
</li>
<li class="nav-item">
<a class="nav-link" href="cart.php">Cart</a>
</li>
<li class="nav-item">
<a class="nav-link" href="checkout.php">Checkout</a>
</li>
</ul>
</div>
</nav>
<div class="container" style="padding: 20px;">
<div class="row">
<table class="table table-bordered">
<thead>
<tr>
<th>No</th>
<th>Thumbnail</th>
<th>Title</th>
<th>Price</th>
<th>Num</th>
<th>Total</th>
<th style="width: 60px"></th>
</tr>
</thead>
<tbody>
<?php
$index = 0;
// foreach($_SESSION['cart'] as $item) {
foreach($cookieCart as $item) {
echo '<tr>
<td>'.(++$index).'</td>
<td><img src="'.$item['thumbnail'].'" style="width: 200px"/></td>
<td>'.$item['title'].'</td>
<td>'.$item['price'].'</td>
<td>
<input type="number" min="0" max="100" value="'.$item['num'].'" class="form-control" style="width: 80px"/>
</td>
<td>
'.($item['price'] * $item['num']).'
</td>
<td>
<form method="post">
<input type="number" name="id" value="'.$item['id'].'" class="form-control" style="width: 200px; display: none;">
<button class="btn btn-danger">Delete</button>
</form>
</td>
</tr>';
}
?>
</tbody>
</table>
<a href="checkout.php"><button class="btn btn-warning">Checkout</button></a>
</div>
</div>
</body>
</html>
#checkout.php
<?php
session_start();
require_once('utils/utility.php');
require_once('db/dbhelper.php');
//Giai phap Session - START
// if(!isset($_SESSION['cart'])) {
// $_SESSION['cart'] = [];
// }
// GIai phap session - STOP
$cookieCart = getCartFromCookie();
//Giai phap Session - START
// if(!empty($_POST) && isset($_SESSION['cart']) && count($_SESSION['cart']) > 0) {
// $fullname = getPost('fullname');
// $email = getPost('email');
// $phoneNumber = getPost('phone_number');
// $address = getPost('address');
// $order_date = date('Y-m-d H:i:s');
// $sql = "insert into orders(fullname, email, phone_number, address, order_date) values ('$fullname', '$email', '$phoneNumber', '$address', '$order_date')";
// execute($sql);
// $sql = "select * from orders where order_date = '$order_date'";
// $orderItem = executeResult($sql, true);
// $orderId = $orderItem['id'];
// foreach($_SESSION['cart'] as $item) {
// $product_id = $item['id'];
// $num = $item['num'];
// $price = $item['price'];
// $sql = "insert into order_detail(order_id, product_id, num, price) values ($orderId, '$product_id', '$num', '$price')";
// execute($sql);
// }
// unset($_SESSION['cart']);
// header('Location: complete.php');
// die();
// }
// Giai Phap session - STOP
if(!empty($_POST) && count($cookieCart) > 0) {
$fullname = getPost('fullname');
$email = getPost('email');
$phoneNumber = getPost('phone_number');
$address = getPost('address');
$order_date = date('Y-m-d H:i:s');
$sql = "insert into orders(fullname, email, phone_number, address, order_date) values ('$fullname', '$email', '$phoneNumber', '$address', '$order_date')";
execute($sql);
$sql = "select * from orders where order_date = '$order_date'";
$orderItem = executeResult($sql, true);
$orderId = $orderItem['id'];
foreach($cookieCart as $item) {
$product_id = $item['id'];
$num = $item['num'];
$price = $item['price'];
$sql = "insert into order_detail(order_id, product_id, num, price) values ($orderId, '$product_id', '$num', '$price')";
execute($sql);
}
emptyCookie();
header('Location: complete.php');
die();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Init Database</title>
<!-- Bootstrap -> thiet ke GUI -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style type="text/css">
.form-group {
margin-bottom: 20px;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-sm bg-light navbar-light">
<div class="container-fluid">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="products.php">Products</a>
</li>
<li class="nav-item">
<a class="nav-link" href="init.php">Init DB</a>
</li>
<li class="nav-item">
<a class="nav-link" href="cart.php">Cart</a>
</li>
<li class="nav-item">
<a class="nav-link" href="checkout.php">Checkout</a>
</li>
</ul>
</div>
</nav>
<div class="container" style="padding: 20px;">
<div class="row">
<table class="table table-bordered">
<thead>
<tr>
<th>No</th>
<th>Thumbnail</th>
<th>Title</th>
<th>Price</th>
<th>Num</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<?php
$index = 0;
// foreach($_SESSION['cart'] as $item) {
foreach($cookieCart as $item) {
echo '<tr>
<td>'.(++$index).'</td>
<td><img src="'.$item['thumbnail'].'" style="width: 200px"/></td>
<td>'.$item['title'].'</td>
<td>'.$item['price'].'</td>
<td>'.$item['num'].'</td>
<td>'.($item['price'] * $item['num']).'</td>
</tr>';
}
?>
</tbody>
</table>
<form method="post">
<div class="form-group">
<label>Fullname: </label>
<input required type="text" name="fullname" class="form-control">
</div>
<div class="form-group">
<label>Email: </label>
<input required type="email" name="email" class="form-control">
</div>
<div class="form-group">
<label>Phone Number: </label>
<input required type="tel" name="phone_number" class="form-control">
</div>
<div class="form-group">
<label>Address: </label>
<input required type="text" name="address" class="form-control">
</div>
<div class="form-group">
<button class="btn btn-success">Checkout Complete</button>
</div>
</form>
</div>
</div>
</body>
</html>
#complete.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Complete Page</title>
<!-- Bootstrap -> thiet ke GUI -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style type="text/css">
.form-group {
margin-bottom: 20px;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-sm bg-light navbar-light">
<div class="container-fluid">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="products.php">Products</a>
</li>
<li class="nav-item">
<a class="nav-link" href="init.php">Init DB</a>
</li>
<li class="nav-item">
<a class="nav-link" href="cart.php">Cart</a>
</li>
<li class="nav-item">
<a class="nav-link" href="checkout.php">Checkout</a>
</li>
</ul>
</div>
</nav>
<h1 style="text-align: center;">Checkout Complete</h1>
</body>
</html>
#details.php
<?php
session_start();
require_once('utils/utility.php');
require_once('db/dbhelper.php');
$id = getGet('id');
$sql = "select * from products where id = '$id'";
$product = executeResult($sql, true);
if($product == null) {
header('Location: error.php');
die();
}
if(!isset($_COOKIE['cart'])) {
$_COOKIE['cart'] = '[]';
}
if(!empty($_POST)) {
$num = getPost('num');
// Giai phap Session - START
// if(!isset($_SESSION['cart'])) {
// $_SESSION['cart'] = [];
// }
// $isFind = false;
// for ($i=0; $i < count($_SESSION['cart']); $i++) {
// if($_SESSION['cart'][$i]['id'] == $id) {
// $_SESSION['cart'][$i]['num'] += $num;
// $isFind = true;
// break;
// }
// }
// if(!$isFind) {
// $_SESSION['cart'][] = [
// 'id' => $id,
// 'title' => $product['title'],
// 'thumbnail' => $product['thumbnail'],
// 'price' => $product['price'],
// 'num'=> $num
// ];
// }
// var_dump($_SESSION['cart']);
// Giai phap Session - END
// Giai phap Cookie - START
addCartItem($id, $num);
// Giai phap Cookie - END
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Init Database</title>
<!-- Bootstrap -> thiet ke GUI -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style type="text/css">
.form-group {
margin-bottom: 20px;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-sm bg-light navbar-light">
<div class="container-fluid">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="products.php">Products</a>
</li>
<li class="nav-item">
<a class="nav-link" href="init.php">Init DB</a>
</li>
<li class="nav-item">
<a class="nav-link" href="cart.php">Cart</a>
</li>
<li class="nav-item">
<a class="nav-link" href="checkout.php">Checkout</a>
</li>
</ul>
</div>
</nav>
<div class="container" style="padding: 20px;">
<div class="row">
<div class="col-md-5">
<img src="<?=$product['thumbnail']?>" style="width: 100%;">
</div>
<div class="col-md-7">
<h3><?=$product['title']?></h3>
<p style="font-size: 20px; color: red">
<?=$product['price']?> VND
</p>
<!-- <form method="post">
<p>
<input type="number" name="id" value="<?=$id?>" class="form-control" style="width: 200px; display: none;">
<input required type="number" min="1" max="100" name="num" value="1" class="form-control" style="width: 200px">
</p>
<button class="btn btn-success" style="width: 200px">Add to cart</button>
</form> -->
<input required type="number" min="1" max="100" name="num" value="1" class="form-control" style="width: 200px">
<button class="btn btn-success" style="width: 200px" onclick="addToCart(<?=$id?>, )">Add to cart</button>
</div>
</div>
</div>
<script type="text/javascript">
var cartList = JSON.parse(`<?=$_COOKIE['cart']?>`)
function addToCart(id) {
var num = $('[name=num]').val()
//update cookie
var isFind = false
for (var i = 0; i < cartList.length; i++) {
if(cartList[i].id == id) {
cartList[i].num = parseInt(cartList[i].num) + parseInt(num)
isFind = true
break
}
}
if(!isFind) {
cartList.push({
'id': id,
'num': num
})
}
document.cookie = `cart=${JSON.stringify(cartList)};path=/`
alert('Them vao gio hang thanh cong!!!')
}
</script>
</body>
</html>
#error.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Error Page</title>
</head>
<body>
<nav class="navbar navbar-expand-sm bg-light navbar-light">
<div class="container-fluid">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="products.php">Products</a>
</li>
<li class="nav-item">
<a class="nav-link" href="init.php">Init DB</a>
</li>
<li class="nav-item">
<a class="nav-link" href="cart.php">Cart</a>
</li>
<li class="nav-item">
<a class="nav-link" href="checkout.php">Checkout</a>
</li>
</ul>
</div>
</nav>
<h1 style="text-align: center;">Error</h1>
</body>
</html>
#init.php
<?php
session_start();
if(!empty($_POST)) {
require_once('utils/utility.php');
require_once('db/dbhelper.php');
$action = getPost('action');
if($action == 'init') {
initDB();
execute(SQL_CREATE_TABLE_PRODUCTS);
execute(SQL_CREATE_TABLE_ORDERS);
execute(SQL_CREATE_TABLE_ORDER_DETAIL);
// fake data
// for ($i=0; $i < 20; $i++) {
// $title = 'San pham '.$i;
// $price = 1000 + 10*$i;
// $thumbnail = 'https://gokisoft.com/uploads/stores/49/2021/10/coding-c-program.jpg';
// $content = 'Noi dung '.$i;
// $createdAt = date('Y-m-d H:i:s');
// $updatedAt = date('Y-m-d H:i:s');
// $sql = "insert into products(title, price, thumbnail, content, created_at, updated_at) values ('$title', '$price', '$thumbnail', '$content', '$createdAt', '$updatedAt')";
// execute($sql);
// }
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Init Database</title>
<!-- Bootstrap -> thiet ke GUI -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style type="text/css">
.form-group {
margin-bottom: 20px;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-sm bg-light navbar-light">
<div class="container-fluid">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="products.php">Products</a>
</li>
<li class="nav-item">
<a class="nav-link" href="init.php">Init DB</a>
</li>
<li class="nav-item">
<a class="nav-link" href="cart.php">Cart</a>
</li>
<li class="nav-item">
<a class="nav-link" href="checkout.php">Checkout</a>
</li>
</ul>
</div>
</nav>
<h1 style="text-align: center;">
Init Database
<br/>
<form method="post">
<button class="btn btn-warning" name="action" value="init">Start Init Database</button>
</form>
</h1>
</body>
</html>
#products.php
<?php
session_start();
require_once('utils/utility.php');
require_once('db/dbhelper.php');
$sql = 'select * from products';
$dataList = executeResult($sql);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Init Database</title>
<!-- Bootstrap -> thiet ke GUI -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style type="text/css">
.form-group {
margin-bottom: 20px;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-sm bg-light navbar-light">
<div class="container-fluid">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="products.php">Products</a>
</li>
<li class="nav-item">
<a class="nav-link" href="init.php">Init DB</a>
</li>
<li class="nav-item">
<a class="nav-link" href="cart.php">Cart</a>
</li>
<li class="nav-item">
<a class="nav-link" href="checkout.php">Checkout</a>
</li>
</ul>
</div>
</nav>
<div class="container" style="padding: 20px;">
<div class="row">
<?php
foreach($dataList as $item) {
echo '<div class="col-md-3">
<a href="details.php?id='.$item['id'].'"><img src="'.$item['thumbnail'].'" style="width: 100%">
<p>'.$item['title'].'</p>
<p style="color: red">'.$item['price'].' VND</p>
</a>
</div>';
}
?>
</div>
</div>
</body>
</html>
#readme.txt
Các bước phát triển dự án
B1) Phân tích database
- Tạo database: BT2290
create database BT2290
- Tạo tables
create table products (
id int primary key auto_increment,
title varchar(150) not null,
price float,
thumbnail varchar(500),
content text,
created_at datetime,
updated_at datetime
)
create table orders (
id int primary key auto_increment,
fullname varchar(50),
phone_number varchar(20),
email varchar(150),
address varchar(200),
order_date date
)
create table order_detail (
id int primary key auto_increment,
order_id int references orders (id),
product_id int references products (id),
num int,
price float
)
B2) Xay dung cau truc du an
db
- config.php -> cau hinh csdl
- dbhelper.php -> ham su dung csdl
utils
- utility.php -> function tien ich su dung trong du -> getGet, getPost, ...
init.php
products.php
details.php
cart.php
checkout.php
B3) Giai phap ve quan ly don hang:
- Su dung session:
$_SESSION['cart'] = [
[
'id' => 1,
'title' => '',
'thumbnail' => '',
'price' => 1,
'num': 0
], [
'id' => 1,
'title' => '',
'thumbnail' => '',
'price' => 1,
'num': 0
]
];
B4) Giai phap quan ly gio hang bang cookie
- key -> value (key, value: int, boolean, string, char)
- json string:
key: cart
value: [
{
"id": 1,
"num": ???
}, {
"id": 2,
"num": ???
}, {
"id": 3,
"num": ???
}
]
Tags:
Phản hồi từ học viên
5
(Dựa trên đánh giá ngày hôm nay)