By GokiSoft.com| 17:03 07/05/2021|
Học PHP

[Share Code] Viết chương trình quản lý mỹ phẩm - kết nối CSDL - Lập trình PHP/MySQL

#utility.php


<?php
function moveFileToPhotos($key) {
	//Duong dan chua file da duoc upload len Server
	$target_dir        = "photos/";
	$file              = $_FILES[$key]['name'];
	$path              = pathinfo($file);
	$filename          = $path['filename'];
	$ext               = $path['extension'];
	$temp_name         = $_FILES[$key]['tmp_name'];
	$path_filename_ext = $target_dir.$filename.".".$ext;

	if (file_exists($path_filename_ext)) {
		// echo "Sorry, file already exists.";
	} else {
		move_uploaded_file($temp_name, $path_filename_ext);
		// echo "Congratulations! File Uploaded Successfully.";
	}
	return $path_filename_ext;
}


#readme.txt


- Tìm hiểu về kết nối CSDL (database)
	- insert/update/delete & select

- Mini project:
	- Xây dựng 1 trang quản trị bán mỹ phẩm: thêm/sửa/xoá sản phẩm
	- Frontend:
		- Trang chủ: Xem thông tin sản phẩm.

====================================================
Phân tích dự án:
	- Admin:
		- product-list.php
		- add-product.php
	- Frontend:
		- index.php -> Hiển thị danh sách sản phẩm

Các bước để phát triển dự án:
B1. Xây dựng được database.
- T2008A

create table product (
	id int primary key auto_increment,
	title varchar(50),
	thumbnail varchar(500),
	content text,
	created_at datetime,
	updated_at datetime
)

B2. Phát triển các chức năng.
- Admin:
	- add-product.php


#product-list.php


<?php
require_once ('database-helper.php');

$productList = executeResult('select * from product');
?>
<!DOCTYPE html>
<html>
<head>
	<title>Product List</title>
	<!-- Latest compiled and minified CSS -->
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">

	<!-- jQuery library -->
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

	<!-- Popper JS -->
	<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>

	<!-- Latest compiled JavaScript -->
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>
	<div class="container">
		<div class="panel panel-primary">
			<div class="panel-heading">
				<h2 class="text-center">Product List</h2>
			</div>
			<div class="panel-body">
				<a href="add-product.php"><button class="btn btn-success">Add Product</button></a>
				<table class="table table-bordered">
					<thead>
						<tr>
							<th>No</th>
							<th>Thumbnail</th>
							<th>Title</th>
							<th>Updated At</th>
							<th></th>
							<th></th>
						</tr>
					</thead>
					<tbody>
<?php
$count = 0;
foreach ($productList as $item) {
	echo '<tr>
			<td>'.(++$count).'</td>
			<td><img src="'.$item['thumbnail'].'" style="width: 160px"/></td>
			<td>'.$item['title'].'</td>
			<td>'.$item['updated_at'].'</td>
			<td><button class="btn btn-warning">Edit</button></td>
			<td><button onclick="deleteProduct('.$item['id'].')" class="btn btn-danger">Delete</button></td>
		</tr>';
}
?>
					</tbody>
				</table>
			</div>
		</div>
	</div>
<script type="text/javascript">
	function deleteProduct(id) {
		option = confirm('Are you sure to delete this product?')
		if(!option) return

		$.post('form-product.php', {
			'action': 'delete',
			'id': id
		}, function(data) {
			location.reload()
		})
	}
</script>
</body>
</html>


#form-product.php


<?php
require_once ('database-helper.php');
require_once ('utility.php');

$title = $thumbnail = $content = '';

if (!empty($_POST)) {
	$action = getPOST('action');

	switch ($action) {
		case 'delete':
			deleteProduct();
			break;

		default:
			addProduct();
			break;
	}
}

function deleteProduct() {
	$id  = getPOST('id');
	$sql = "delete from product where id = $id";
	execute($sql);
}

function addProduct() {
	$title     = getPOST('title');
	$thumbnail = moveFileToPhotos('thumbnail');
	$content   = getPOST('content');

	if (!empty($title) && !empty($content)) {
		$created_at = $updated_at = date('Y-m-d H:i:s');
		$sql        = "insert into product(title, thumbnail, content, created_at, updated_at) values ('$title', '$thumbnail', '$content', '$created_at', '$updated_at')";
		// echo $sql;
		execute($sql);
	}
}


#database-helper.php


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

//insert, update, delete
function execute($sql) {
	//save data -> database (product)
	//B1. Mo ket noi toi database
	$conn = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);
	mysqli_set_charset($conn, 'utf8');

	//B2. Thuc thi query (select, insert, update, delete)
	mysqli_query($conn, $sql);

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

function executeResult($sql) {
	//save data -> database (product)
	//B1. Mo ket noi toi database
	$conn = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);
	mysqli_set_charset($conn, 'utf8');

	//B2. Thuc thi query (select, insert, update, delete)
	$data      = [];
	$resultset = mysqli_query($conn, $sql);
	while (($row = mysqli_fetch_array($resultset, 1)) != null) {
		$data[] = $row;
	}

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

	return $data;
}

function removeSpecialCharacter($str) {
	// abc\okok -> abc\\okok
	//abc\okok (user) -> abc\okok (server) -> sql (abc\okok) -> xuat hien ky tu \ -> ky tu dac biet -> error query
	//abc\okok (user) -> abc\okok (server) -> convert -> abc\\okok -> sql (abc\\okok) -> chinh xac
	$str = str_replace('\\', '\\\\', $str);
	//abc'okok -> abc\'okok
	//abc'okok (user) -> abc'okok (server) -> sql (abc'okok) -> xuat hien ky tu \ -> ky tu dac biet -> error query
	//abc'okok (user) -> abc'okok (server) -> convert -> abc\'okok -> sql (abc\'okok) -> chinh xac
	$str = str_replace('\'', '\\\'', $str);

	return $str;
}

function getPOST($key) {
	$value = '';
	if (isset($_POST[$key])) {
		$value = $_POST[$key];
	}
	return removeSpecialCharacter($value);
}


#config.php


<?php
define('HOST', 'localhost');
define('USERNAME', 'root');
define('PASSWORD', '');
define('DATABASE', 'T2008A');


#add-product.php


<?php
require_once ('form-product.php');
?>

<!DOCTYPE html>
<html>
<head>
	<title>Add Product</title>
	<!-- Latest compiled and minified CSS -->
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">

	<!-- jQuery library -->
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

	<!-- Popper JS -->
	<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>

	<!-- Latest compiled JavaScript -->
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>
	<div class="container">
		<div class="panel panel-primary">
			<div class="panel-heading">
				<h2 class="text-center">Add Product</h2>
			</div>
			<div class="panel-body">
				<form method="post" enctype="multipart/form-data">
					<div class="form-group">
					  <label for="title">Title:</label>
					  <input required="true" type="text" class="form-control" id="title" name="title">
					</div>
					<div class="form-group">
					  <label for="thumbnail">Thumbnail:</label>
					  <input required="true" type="file" class="form-control" id="thumbnail" name="thumbnail">
					</div>
					<div class="form-group">
					  <label for="content">Content:</label>
					  <textarea class="form-control" rows="5" id="content" name="content"></textarea>
					</div>
					<a href="product-list.php"><button type="button" class="btn btn-default">Back product list</button></a>
					<button class="btn btn-success">Save</button>
				</form>
			</div>
		</div>
	</div>
</body>
</html>


Tags:

Phản hồi từ học viên

5

(Dựa trên đánh giá ngày hôm nay)