Danh Mục Bài Viết
Bài viết này mình sẽ đi những bước rất đầu tiên và cơ bản đối với phía backend, đó là kết nối database và insert data vào database. Đồng thời mình sẽ code cả theo hướng POP(hướng thủ tục) xem như là một cách để các bạn có cái nhìn rõ hơn về OOP(hướng đối tượng) xíu nhé. Ok, Let's Go thôi:
Trong một foder có tên TOPIC1 đã được đặt chiễm chễ ở thử mục htdocs trong Xampp mình nhẹ nhàng tạo một file có tên là test.php
. Tiếp theo mình vào phpmyadmin tạo một database có tên là test và thực hiện câu lệnh kết nối.
<?php
$servername = "localhost";
$username = "root";
$password = "";
$databaseName = "test";
// Create connection
$conn = new mysqli($servername, $username, $password, $databaseName);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
Ô may quá màn hình đã hiện “Connected successfully”
Để thêm cơ sở dữ liệu vào database mình tạo một form đơn giản ngay trong file test.php
như sau:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Add Product</title>
</head>
<body>
<form action="" method="post">
<input type="text" placeholder="product_name" name="product_name"> <br>
<input type="text" placeholder="product_price" name="product_price"> <br>
<button style="cursor: pointer;" type="submit">Add</button>
</form>
</body>
</html>
Kết quả là:
Các bạn để ý những Attributes: name="product_name
và name="product_price"
trong thẻ input nhé. Đó chính là những “key”
trong “array”
dữ liệu của chúng ta khi thực hiện submit Form. Để thấy rõ hơn mình sẽ thêm dòng code php sau lên đầu file.
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
var_dump($_POST);
}
?>
Mục đích của dòng code này là chúng ta sẽ bắt sự kiện post và dùng lệnh var_dump()
để kiểm tra dữ liệu của form sau khi submit
Kết quả màn hình trả về là một mảng với 2 phần từ có key và value tương ứng sau “product_name” => “San pham A” và “product_price” => “12000”
Ok, tiếp theo mình sẽ comment lệnh var_dump()
và lấy ra 2 biến trên
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// var_dump($_POST);
$product_name = $_POST['product_name'];
$product_price = $_POST['product_price'];
}
?>
Đồng thời mình sẽ tạo ra một table có tên là product trong database test mà mình đã tạo ra ở trên.
Vậy là đã có data và table, cuối cùng là thực hiện câu lệnh query
để insert data lấy được từ form vào table:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// var_dump($_POST);
$product_name = $_POST['product_name'];
$product_price = $_POST['product_price'];
$sql = "INSERT INTO product (product_name, product_price)
VALUES ('$product_name ', '$product_price')";
$conn -> query($sql);
}
?>
Ta được kết quả
Tổng kết toàn bộ code mình có một file test.php với nội dung:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$databaseName = "test";
// Create connection
$conn = new mysqli($servername, $username, $password, $databaseName);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully </br>";
?>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// var_dump($_POST);
$product_name = $_POST['product_name'];
$product_price = $_POST['product_price'];
$sql = "INSERT INTO product (product_name, product_price)
VALUES ('$product_name ', '$product_price')";
$conn -> query($sql);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Add Product</title>
</head>
<body>
<form action="" method="post">
<input type="text" placeholder="product_name" name="product_name"> <br>
<input type="text" placeholder="product_price" name="product_price"> <br>
<button style="cursor: pointer;" type="submit">Add</button>
</form>
</body>
</html>
Vậy là bạn đã thực hiện thêm dữ liệu thành công vào database bằng php. Quá dễ không nào? Nhưng câu hỏi đặt ra là nếu cứ một lần thêm dữ liệu mà phải gõ lại toàn bộ file kiểu vậy thì nhìn có vẻ không được ổn lắm.
Code php
và Html
lẫn lộn thiếu tính chuyên nghiệp. Khi dự án phát triển lớn sẽ khó quản lý code hay khó trong làm việc nhóm…
Nếu bạn đồng ý với mình thì chúng ta thử biến tấu nó thành hướng OOP hay còn gọi là lập trình hướng đối tượng xem thế nào nhé!
Mình sẽ thực hiện các bước sau:
Tạo một thư mục config chứa file config.php
. Mình sẽ bê cái mục dưới đây qua config.php
$servername = "localhost";
$username = "root";
$password = "";
$databaseName = "test";
Và define()
cho các em nó. Ta có kết quả như sau:
<?php
define('servername','localhost');
define('username','root');
define('password','');
define('databaseName','test');
?>
Ok, thấy cái file nó gọn hơn rồi đấy.
Tiếp theo mình sẽ tạo một thư mục lib trong đó chứa file database.php
đồng thời include file config.php
vào đây luôn để có thể sử dụng các biến đã define ở trên.
Trong database.php
mình sẽ tạo một class có tên Database có các properties và các methods như sau:
<?php
include_once ('./config/config.php');
class Database
{
public $servername = servername;
public $username = username;
public $password = password;
public $databaseName = databaseName;
public $conn;
public function __construct() {
$this->connect();
}
public function connect(){
// Create connection
$this ->conn = new mysqli($this ->servername, $this -> username, $this -> password, $this -> databaseName);
// Check connection
if ($this ->conn->connect_error) {
die("Connection failed: " . $this ->conn->connect_error);
}
echo "Connected successfully </br>";
}
Lưu ý: Ở file test.php
sau khi chúng ta đã cắt các biến vào config.php
và câu lệnh kết nối vào database.php
. chúng ra sẽ include lại file database.php vào lại nhé. Và đừng quên gọi class Database bằng câu lệnh $Database = new Database()
;
<?php
include_once('./lib/database.php');
$Database = new Database();
?>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// var_dump($_POST);
$product_name = $_POST['product_name'];
$product_price = $_POST['product_price'];
$sql = "INSERT INTO product (product_name, product_price)
VALUES ('$product_name ', '$product_price')";
$conn -> query($sql);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Add Product</title>
</head>
<body>
<form action="" method="post">
<input type="text" placeholder="product_name" name="product_name"> <br>
<input type="text" placeholder="product_price" name="product_price"> <br>
<button style="cursor: pointer;" type="submit">Add</button>
</form>
</body>
</html>
Bây giờ chúng ta kiểm tra tình trạng kết nối ngoài màn hình:
Ồ, rất may là dù đã thực hiện một loạt thao tác có vẻ nguy hiểm nhưng kết nối vẫn đang bình thường
Thừa thắng xông lên, trong file database.php
mình sẽ tạo luôn các methods dùng để tương tác với database như thêm, sửa, cập nhật, xóa...
<?php
include_once ('./config/config.php');
class Database
{
public $servername = servername;
public $username = username;
public $password = password;
public $databaseName = databaseName;
public $conn;
public function __construct() {
$this->connect();
}
public function connect(){
// Create connection
$this ->conn = new mysqli($this ->servername, $this -> username, $this -> password, $this -> databaseName);
// Check connection
if ($this ->conn->connect_error) {
die("Connection failed: " . $this ->conn->connect_error);
}
echo "Connected successfully </br>";
}
public function insert($query){
$result = $this ->conn -> query($query);
return $result;
}
public function select($query){
$result = $this ->conn -> query($query);
return $result ;
}
public function update($query){
$result = $this ->conn -> query($query);
return $result;
}
public function delete($query){
$result = $this ->conn -> query($query);
return $result;
}
}
Mình sẽ tạo thêm một thư mục Class có chứa ProductClass.php
. Trong này mình cũng sẽ tạo một class có tên là ProductClass với các properties và methods cụ thể như sau:
<?php
include_once ('./lib/database.php');
class ProductClass
{
public $Database;
public function __construct() {
$this -> Database = new Database;
}
public function insert_product($data) {
$product_name = $data['product_name'];
$product_price = $data['product_price'];
$query = "INSERT INTO product (product_name, product_price)
VALUES ('$product_name','$product_price')";
$result = $this -> Database-> insert($query);
return $result;
}
}
Bạn đừng quên include_once ('./lib/database.php')
nhé.
Bước 5: Bây giờ ngoài file test.php
của chúng ta thay vì include database.php
ta sẽ include ProductClass.php
và gọi class ProductClass bằng câu lệnh $ProductClass = new ProductClass();
. File test.php
bây giờ còn bấy nhiêu:
<?php
include_once('./class/ProductClass.php');
$ProductClass = new ProductClass();
?>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$data = $_POST;
$insert_product = $ProductClass -> insert_product($data);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Add Product</title>
</head>
<body>
<form action="" method="post">
<input type="text" placeholder="product_name" name="product_name"> <br>
<input type="text" placeholder="product_price" name="product_price"> <br>
<button style="cursor: pointer;" type="submit">Add</button>
</form>
</body>
</html>
Kiểm tra kết quả màn hình và tiến hành thử insert dữ liệu lại
Và mình đã thực hiện insert thành công San pham B. Quá ngon lành cành đào.
Chúng ta cùng nhìn lại những gì đã làm nào:
So với việc chỉ có duy nhấy 1 file test.php
trước đây. Vừa rồi chúng ta đã thực hiện một bước tiến khá quan trọng đó là chia dự án ra thành các foder: class, lib, config. Và tạo ra các class để quản lý.
OOP quá dễ đúng ko nào. Hẹn gặp lại các bạn ở bài tiếp theo nhé:
test.php
<?php
include_once('./class/ProductClass.php');
$ProductClass = new ProductClass();
?>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$data = $_POST;
$insert_product = $ProductClass -> insert_product($data);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Add Product</title>
</head>
<body>
<form action="" method="post">
<input type="text" placeholder="product_name" name="product_name"> <br>
<input type="text" placeholder="product_price" name="product_price"> <br>
<button style="cursor: pointer;" type="submit">Add</button>
</form>
</body>
</html>
database.php
<?php
include_once ('./config/config.php');
class Database
{
public $servername = servername;
public $username = username;
public $password = password;
public $databaseName = databaseName;
public $conn;
public function __construct() {
$this->connect();
}
public function connect(){
// Create connection
$this ->conn = new mysqli($this ->servername, $this -> username, $this -> password, $this -> databaseName);
// Check connection
if ($this ->conn->connect_error) {
die("Connection failed: " . $this ->conn->connect_error);
}
echo "Connected successfully </br>";
}
public function insert($query){
$result = $this ->conn -> query($query);
return $result;
}
public function select($query){
$result = $this ->conn -> query($query);
return $result ;
}
public function update($query){
$result = $this ->conn -> query($query);
return $result;
}
public function delete($query){
$result = $this ->conn -> query($query);
return $result;
}
}
Config.php
<?php
define('servername','localhost');
define('username','root');
define('password','');
define('databaseName','test');
?>
ProductClass.php
<?php
include_once ('./lib/database.php');
class ProductClass
{
public $Database;
public function __construct() {
$this -> Database = new Database;
}
public function insert_product($data) {
$product_name = $data['product_name'];
$product_price = $data['product_price'];
$query = "INSERT INTO product (product_name, product_price)
VALUES ('$product_name','$product_price')";
$result = $this -> Database-> insert($query);
return $result;
}
}
Banker To Coder
Hi All,
Nguyên đây! MinaCode là website mình tạo ra với mong muốn chia sẻ chút kiến thức liên quan đến lập trình FullStack.
Ngôn ngữ lập trình chủ yếu được sử dụng là Htm, Css, Javascript, Php cùng một số thư viện như Jquery, Fontawesome... Phía Frontend và Farmework Laravel phía Backend.
Mình chưa bao giờ tham gia bất cứ một trường lớp nào về lập trình. Tất cả kiến thức mình chia sẻ đều là trên tình thần tự học. Do đó:
+ MinaCode phù hợp với những tay ngang, xem lập trình như là một kỹ năng bổ trợ trong công việc hay là một kênh kiếm thêm thu nhập từ những very mini projects.
+ MinaCode không phù hợp với những bạn đang được đào tạo bài bản, chính quy.
Mình tin rằng, Trong tương lai không xa. Lập trình sẽ trở nên một kỹ năng không thể thiếu đối với các bạn trẻ.
Cuối cùng thì Ngôn ngữ lập trình không quan trọng bằng Tư duy lập trình. Mình chúc các bạn sẽ có được những kiến thức bổ ích với MinaCode.
--Ngô Sỹ Nguyên--