IMG-LOGO
×

Giáo Trình Môn Học

Khoá học lập trình PHP/MySQL

Kiến Thức Căn Bản

[Video] Lập trình PHP basic - Biến, hằng, toán tử và mảng trong PHP - lập trình PHP [Video] Hướng dẫn lập trình PHP căn bản với if, else if, else, switch- lập trình PHP [Video] Lập trình PHP basic - for, while, do while, foreach, function - lập trình PHP [Video] Hướng dẫn lập trình PHP căn bản - Function - lập trình PHP

Tìm Hiểu Form GET/POST

[Video] Hướng dẫn học lập PHP căn bản - Tìm hiểu GET/POST - lập trình PHP [Video] Hướng dẫn tạo dự án calculator bang PHP + JS - Lập trình PHP [Video] Ajax: Hướng dẫn tạo máy tính bằng PHP - Sử dụng Ajax - GET/POST form trong PHP - Lập trình PHP [Video] Form đăng ký tài khoản bằng PHP (GET/POST)- Form PHP [Video] huong dan chua bai tap dang ky & login su dung GET & POST - Lập trình PHP

Cookie

[Video] Lập trình PHP căn bản - cookie - lập trình PHP [Video] Hướng dẫn tìm hiểu cookie - Quản lý xác minh tài khoản login - cookie - Lập trình PHP/MySQL

Session

[Video] Lập trình PHP căn bản - session - lập trình PHP [Video] Thành thạo API - Ajax trọng dự án - Thành thạo về Session - Lập trình PHP/MySQL

Kết Nối CSDLPHP/ MySQL

[Video] Thực hiện truy vấn dữ liệu từ PHP tới MySql - Khoá học PHP căn bản [Video] Kết nối PHP với MySQL (Thực hiện insert) - Khoá PHP căn bản [Video] Tối ưu hoá code mysql + php, tạo thư viện chung trong lập trình PHP căn bản [Video] Tạo web tin tức - PHP/MySQL [Video] Thực hiện đăng nhập tài khoản sử dụng php mysql - khoá học PHP căn bản [Video]Cookie: Xây dựng cart (giỏ hàng) + checkout (thanh toán) sử dụng Cookie & localStorage - Lập trình PHP/MySQL [Video] Session: Xây dựng web hoàn thiện gồm cart page + checkout page + complete page - Lập trình PHP/MySQL [Video] Trang quản lý sản phẩm php - Lập trình PHP [Video] Viết website quản lý sinh viên PHP & MySQL - Lập Trình PHP [Video] Hướng dẫn phân trang bằng PHP - Lập trình PHP

OOP & Nâng Cao

[Video] OOP - Lập trình php [Video] Kế thừa OOP - Lập trình php [Video] Nắm chắc token login - Hướng dẫn login login multi devices, browsers trong lập trình PHP/MySQL [Video] Trở thành chuyên gia API Server - Hướng dẫn tất tần tật về API từ Server tới Client - Lập trình PHP

Examination & Ôn Tập

[Video] Kiểm Tra 60 phút - Test nhanh - Khóa học PHP

Thực Chiến: Web Bán Hoa Quả

[Video] Xây dựng website bán hoa quả bằng PHP/MySQL - Lập trình PHP/MySQL - Phần 1 [Video] Xây dựng website bán hoa quả bằng PHP/MySQL - Lập trình PHP/MySQL - Phần 2 [Video] Xây dựng website bán hoa quả bằng PHP/MySQL - Lập trình PHP/MySQL - Summernote editor - Phần 3 [Video] Xây dựng website bán hoa quả bằng PHP/MySQL - Lập trình PHP/MySQL - Phần 4 [Video] Xây dựng website bán hoa quả bằng PHP/MySQL - Lập trình PHP/MySQL - Phần 5

Thực Chiến: Web Bán Hàng

[Video] PHẦN 1 | Giới thiệu dự án-công nghệ sử dụng - phân tích chức năng dự án | Website bán hàng PHP/MySQL [Video] Phần 2 | Phân tích thiết kế CSDL (database) | Web bán hàng PHP/MySQL [Video] Phần 3 | Phân tích thiết kế CSDL (database) | Web bán hàng PHP/MySQL [Video] Phần 19 FINAL | Hướng dẫn cài đặt dự án từ source code mẫu | Web bán hàng PHP/MySQL

Hướng Dẫn Deploy Dự Án

[Video] Hướng dẫn upload website lên server -Hướng dẫn deploy project php trên heroku - Cài đặt Heroku




Trang Chủ Học PHP Bài tập - Xây dựng cart (giỏ hàng) + checkout (thanh toán) sử dụng Cookie & localStorage - Lập trình PHP/MySQL

Bài tập - Xây dựng cart (giỏ hàng) + checkout (thanh toán) sử dụng Cookie & localStorage - Lập trình PHP/MySQL

by GokiSoft.com - 15:11 11/06/2021 3,595 Lượt Xem

Xây dựng CSDL đặt tên là BT2290 gồm các bảng sau

- products gồm các column: id tự tăng, tiêu đề, thumbnail, nội dung, ngày tạo, ngày sửa

- orders: gồm các column: id tự tăng, tên khách hàng, sđt, email, địa chỉ, ngày tạo đơn hàng

- order_details: gôm các column: id tự tăng, id đơn hàng, id sản phẩm, số lượng, giá tiền

Yêu cầu:

- Fake 25 sản phẩm bằng bất kỳ cách nào bạn biết

- Tạo các page sau:

1) products.php -> Hiển thị danh sách sản phẩm

2) details.php -> Hiển thị chi tiết sản phẩm -> có chưa button add cart

3) cart.php -> chứa danh sách sản phẩm trong giỏ hàng

4) checkout.php -> trang thanh toán -> Khi thực hiện thanh toán thành công -> yêu cầu add thông tin vào 2 bảng orders và order_details

Chú ý: Tham khảo bất kỳ trang bán hàng để thiết kế giao diện.

Bình luận



Chia sẻ từ lớp học

Do Trung Duc [T2008A]

Ngày viết: 11:02 14/06/2021



<?php
require_once ('config.php');

/**
 * Su dung voi cau lenh query: insert, update, delete -> ko tra ve ket qua.
 */
function execute($sql) {
	//Mo ket noi toi database
	$conn = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);
	mysqli_set_charset($conn, 'utf8');

	//Xu ly cau query
	mysqli_query($conn, $sql);

	//Dong ket noi database
	mysqli_close($conn);
}

/**
 * Su dung voi cau lenh query: select.
 */
function executeResult($sql) {
	//Mo ket noi toi database
	$conn = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);
	mysqli_set_charset($conn, 'utf8');

	// echo $sql;
	//Xu ly cau query
	$resultset = mysqli_query($conn, $sql);
	// var_dump($resultset);
	// die();
	$data = [];
	while (($row = mysqli_fetch_array($resultset, 1)) != null) {
		$data[] = $row;
	}
	/**
	 * TH: param2 = 1
	 * $row = [
	 * 		'id' => 1,
	 * 		'title' => '1 - Android Tivi Sony 4K 55 inch KD-55X8000H',
	 * 		'thumbnail' => '12321',
	 * 		...
	 * ];
	 *
	 * TH: param2 = 2
	 * $row = [1, '1 - Android Tivi Sony 4K 55 inch KD-55X8000H', '12321', ...];
	 */

	//Dong ket noi database
	mysqli_close($conn);

	return $data;
}


Do Trung Duc [T2008A]

Ngày viết: 11:02 14/06/2021



<?php
require_once('../Library/dbhelper.php');
require_once('../Library/utility.php');

if (!empty($_POST)) {
	$fullname = $_POST['fullname'];
	$phone = $_POST['phone'];
	$email = $_POST['email'];
	$address = $_POST['address'];
	$created_at = date("Y-m-d H:i:s");

	$sql = "insert into orders (fullname, phone, email,address, created_at) values ('$fullname','$phone','$email','address','$created_at')";
	execute($sql);

	$sql = "select * from orders where created_at = '$created_at'";
	$order = executeResult($sql);
	$orderId = $order[0]['id'];

	//up du lieu vao bang database orderdetail
	$cart = [];
	if (isset($_COOKIE['cart'])) {
		$json = $_COOKIE['cart'];
		$cart = json_decode($json,true);
	}

	$idList = [];

	foreach ($cart as $item) {
		$idList[] = $item['id'];
	}


	if (count($idList) > 0) {
		$idList = implode(',', $idList);

		$sql = "select * from products where id in ($idList)";

		$cartData = executeResult($sql);
	}

	foreach ($cartData as $item) {
		$quantity = 0;
		foreach ($cart as $product) {
			if ($item['id'] == $product['id']) {
				$quantity = $product['quantity'];
			}
		}
		// $sql = "insert into orderdetails (orderId, productId, price, quantity) values ('$orderId',".$item['id'].",".$item['price']."$quantity)";

		$sql = "insert into orderdetails (orderId, productId, price, quantity) values ('$orderId','".$item['id']."','".$item['price']."', '$quantity')";
		execute($sql);
	}

	setcookie("cart",'[]', time()-10000);
}

?>

<!DOCTYPE html>
<html>
<head>
	<title>Ban da dat hang thanh cong</title>
</head>
<body>
Ban da dat hang thanh cong
</body>
</html>


Do Trung Duc [T2008A]

Ngày viết: 11:01 14/06/2021



<?php

require_once('../Library/dbhelper.php');
require_once('../Library/utility.php');

if (!empty($_POST)) {
	$id = $_POST['id'];
	$quantity = $_POST['quantity'];
}
// var_dump($_POST);

$cart = [];
 if (isset($_COOKIE['cart'])) {
 	$json = $_COOKIE['cart'];
 	$cart = json_decode($json,true);
 }

$exits = false;
 // foreach ($cart as $product) {
 // 	if ($product['id'] == $id) {
 // 		$product['quantity'] = 99;
 // 		$exits = true;
 // 		break;
 // 	}
 // }

 for($i = 0; $i < count($cart); $i++){
 	 	if ($cart[$i]['id'] == $id) {
 		$cart[$i]['quantity'] += $quantity;
 		$exits = true;
 		break;
 	}
 }

 if ($exits == false) {
 	$cart[] = [
 		'id' => $id,
 		'quantity' => 1
 	];
 }
 

 setcookie("cart",json_encode($cart), time()+3600*24*7);
var_dump($cart);

?>


Do Trung Duc [T2008A]

Ngày viết: 11:01 14/06/2021



<?php
require_once('../Library/dbhelper.php');
require_once('../Library/utility.php');

if (isset($_COOKIE['cart'])) {
	$string = $_COOKIE['cart'];
	$cart = json_decode($string,true);
}

$idList = [];

foreach ($cart as $item) {
	$idList[] = $item['id'];
}


if (count($idList) > 0) {
	$idList = implode(',', $idList);

	$sql = "select * from products where id in ($idList)";

	$cartData = executeResult($sql);

}else{
	$cartData = [];
}



?>



<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
	<script src="https://use.fontawesome.com/425d03015a.js"></script>
</head>
<body>
	<div class="row">
		<div class="col-md-4" style="box-sizing: border-box;">
			<div class="card">
				<div class="card-header bg-primary">THONG TIN</div>
				<div class="card-body">
					<form method="post" action="upcarttoDB.php">
						<div class="form-group">
							<label for="fullname">Ho ten:</label>
							<input name="fullname" type="fullname" class="form-control" placeholder="Enter fullname" required>
						</div>
						<div class="form-group">
							<label for="phone">So Dien thoai:</label>
							<input name="phone" type="phone" class="form-control" placeholder="Enter phone" required>
						</div>
						<div class="form-group">
							<label for="email">Email:</label>
							<input name="email" type="email" class="form-control" placeholder="Enter email" required>
						</div>
						<div class="form-group">
							<label for="address">Dia chi:</label>
							<input name="address" type="address" class="form-control" placeholder="Enter address" required>
						</div>
						<button type="submit" class="btn btn-primary">Dat Hang</button>
					</form>
				</div>
			</div>
		</div>
		<div class="col-md-8" style="box-sizing: border-box;">
			<div class="container">
				<h2>GIO HANG</h2>
				<table class="table table-striped">
					<thead>
						<tr>
							<th>STT</th>
							<th>TEN SAN PHAM</th>
							<th>GIA TIEN</th>
							<th>SO LUONG</th>
							<th>TONG TIEN</th>
						</tr>
					</thead>
					<tbody>
						<?php
						$counter = 0;
						$bill = 0;
						foreach ($cartData as $item) {
							$quantity = 0;
							foreach ($cart as $product) {
								if ($item['id'] == $product['id']) {
									$quantity = $product['quantity'];
								}
							}
							$totalMoney = $quantity * $item['price'];
							echo '
							<tr>
							<td>'.++$counter.'</td>
							<td>'.$item['title'].'</td>
							<td>'.number_format($item['price'], 0, '.', '.').'đ</td>
							<td>'.$quantity.'</td>
							<td>'.number_format($totalMoney,0,'.','.').'đ</td>
							<td><button onclick = "deleteFromCart('.$item['id'].')"  class = "btn btn-danger">Xoa</button></td>
							</tr>
							';
							$bill += $totalMoney;
						}
						?>
					</tbody>
				</table>
				<div>Tong Hoa Don: <?=$bill?> dong</div>

			</div>		
		</div>
	</div>



	<script type="text/javascript">
		function deleteFromCart(id){
			$.post("deletefromcart.php",
				{'id': id},
				function(data){
					location.reload();
				})
		}


	</script>
</body>
</html>


Do Trung Duc [T2008A]

Ngày viết: 11:01 14/06/2021



<?php
require_once('../Library/dbhelper.php');
require_once('../Library/utility.php');

$sql = "select * from products";
$productList = executeResult($sql);

?>


<!DOCTYPE html>
<html>
<head>
	<title></title>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
 <script src="https://use.fontawesome.com/425d03015a.js"></script>

</head>
<body>

    <div class="container">
        <nav class="navbar navbar-expand-sm bg-dark navbar-dark">
          <!-- Brand/logo -->
          <a class="navbar-brand" href="#">Logo</a>

          <!-- Links -->
          <ul class="navbar-nav">
            <li class="nav-item">
              <a class="nav-link" href="#">Link 1</a>
          </li>
          <li class="nav-item">
              <a class="nav-link" href="#">Link 2</a>
          </li>
          <li class="nav-item">
              <a class="nav-link" href="#">Link 3</a>
          </li>
      </ul>

    <button onclick="window.open('cart.php')" style="position: absolute; right: 10px;," type="button" class="btn btn-warning"><i class="fa fa-shopping-cart"></i></button>
  </nav>

    <div class="products row" style="text-align: center;">
        <?php
            foreach ($productList as $product) {
                // $english_format_number = number_format($number, 2, '.', '');
               echo '
                    <div class="col-md-2">

                        <img style="width: 100%" src="'.$product['thumnail'].'">
                        <p>'.$product['title'].'</p>
                        <p>'.number_format($product['price'], 0, '.', '.').'đ</p>
                        <p>'.$product['content'].'</p>
                        <p><button onclick = "addToCart('.$product['id'].')" type="button" class="btn btn-warning">Thêm vào giỏ</button></p>
                    </div>
               ';

            }
        ?>

    </div>
</div>


<!-- content -->

</body>


<script type="text/javascript">
    function addToCart(id) {
        console.log(id);
        $.post("addtocard.php",
            {'id': id, 'quantity': 1},
            function(data){
                location.reload();
                alert(data);
        })

    }

</script>
</html>


Phân Loại Bài Viết

Tài Liệu Tham Khảo

Đã sao chép!!!