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)