Chuyên mục Php-MySqli-DataBase Cơ Bản

Bài 2: Lập trình hướng đối tượng có gì vui?

Đăng bởi: Minacode|Cập nhật:10-12-2023

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:

Bước 1: Kết nối cơ sở dữ liệu

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”

Kết nối database trong php bằng msqli

Bước 2: Thêm cơ sở dự liệu vào database

Để 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à:

Form đơn giản để insert dữ liệu

Các bạn để ý những Attributes: name="product_namename="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”“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. 

Tạo table trong database

Vậy là đã có datatable, 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ả

Kết quả Insert thành công

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 phpHtml 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:

Bước 1: 

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";

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. 

Bước 2: 

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:

Kết nối database thành công

Ồ, 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

Bước 3: 

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;
}
}

Bước 4: 

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 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>

Bước 6: 

Kiểm tra kết quả màn hình và tiến hành thử insert dữ liệu lại

Insert dữ liệu thành công

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;
}
}
Để Lại Ý Kiến Của bạn!
Bài Viết Chuyên Mục


Khóa Học Miễn Phí

IvyModa

FullStack

Chi tiết

Tạo tính năng CRUD với Livewire Laravel

FullStack

Chi tiết

Php-MySqli-DataBase Cơ Bản

FullStack

Chi tiết
Về MinaCode
Đọc Thơ Nhân Kỷ Niệm 10 Năm Thành Lập MB Nam Đà Nẵng

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--

Coming Soon