Tìm hiểu về CURD trong PHP thông qua ứng dụng quản lí cầu thủ.

CURD trong là gì ? CURD thực ra là một thuật ngữ của dân lập trình, nó là viết tắt của "Create, Read, Update, Delete" hay cụ thể là các thao tác đối với dữ liệu trong database. 

Trong bài viết này mình sẽ cùng các bạn tìm hiểu về CURD thông qua quá trình xây dựng ứng quản lý cầu thủ. Ứng dụng này mình sẽ làm đơn giản thôi để các bạn newbie cũng có thể hiểu được, chức năng chính sẽ là thêm, sửa, xóa, hiển thị thông tin cầu thủ và mình sẽ xây dựng bằng PHP thuần để các bạn nắm rõ về CURD.

Trong ứng dụng này mình sẽ sử dụng phần mềm Xampp để tạo server ảo.

Lan man như vậy đủ rồi, giờ mình tiến hành luôn nhé :D.

Tạo cơ sở dữ liệu 

Tất nhiên rồi, vì chúng ta thao tác với cơ sở dữ liệu mà.

Các bạn truy cập vào http://localhost/phpmyadmin tạo database với tên là demo, sau đó tạo bảng players với đoạn SQL sau:

Code
CREATE TABLE `players` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `age` int(11) NOT NULL,
  `national` varchar(55) NOT NULL,
  `position` varchar(55) NOT NULL,
  `salary` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Đây là kết quả sau khi đã tạo được database:

Mình cũng chuẩn bị sẵn một số dữ liệu để tiện thao tác, các bạn sử dụng đoạn SQL sau để tạo dữ liệu:

Code
INSERT INTO `players` (`id`, `name`, `age`, `national`, `position`, `salary`) VALUES ('1', 'Lionel Messi', '30', 'Argentina', 'CF', '300000');
INSERT INTO `players` (`id`, `name`, `age`, `national`, `position`, `salary`) VALUES ('2', 'Cristiano Ronaldo', '33', 'Portugal', 'CF', '350000');
INSERT INTO `players` (`id`, `name`, `age`, `national`, `position`, `salary`) VALUES ('3', 'Xavi', '35', 'Spain', 'AMF', '220000');

Thông tin không chính xác thì các bạn thông cảm nhé! 

Và đây là kết quả:

Như vậy là xong bước tạo cơ sở dữ liệu, chúng ta đến với bước tiếp theo nhé.

Tạo file giao diện cho ứng dụng

Các bạn tạo file index.php với nội dung sau:

Code
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <style type="text/css">
            table{
                width: 800px;
                margin: auto;
                text-align: center;
            }
            tr {
                border: 1px solid;
            }
            th {
                border: 1px solid;
            }
            td {
                border: 1px solid;
            }
            h1{
                text-align: center;
                color: red;
            }
            #button{
                margin: 2px;
                margin-right: 10px;
                float: right;
            }
        </style>
    </head>
    <body>
        <table id="datatable" style="border: 1px solid">
            <h1>Quản lý cầu thủ</h1>
            <thead>
                <tr role="row">
                    <th>ID</th>
                    <th>Tên cầu thủ</th>
                    <th>Tuổi</th>
                    <th>Quốc tịch</th>
                    <th>Vị trí</th>
                    <th>Lương</th>
                    <th style="width: 7%;">Edit</th>
                    <th style="width: 10%;">>Delete</th>
                </tr>
            </thead>
            <tbody>
                <tr role="row">
                        <td>1</td>
                        <td>Lionel Messi</td>
                        <td>30</td>
                        <td>Argentina</td>
                        <td>Tiền Đạo</td>
                        <td>230000 $</td>
                        <td><a href="#">Edit</a></td>
                        <td><a href="#"> Delete</a></td>
                    </tr>
                </tbody>
            <tfoot>
                <tr>
                    <td colspan="8">
                        <a href="add.php"><button id="button">Thêm cầu thủ</button></a>
                    </td>
                </tr>
            </tfoot>
        </table>
    </body>
</html>

Chỉ là code HTML và CSS đơn giản nên mình sẽ không giải thích nhiều nữa.

Đây là kết quả khi chạy file index.php:

Lấy và hiển thị  dữ liệu từ database

Trong bước này chúng ta sẽ tiến hành kết nối tới cơ sở dữ liệu, sau đó sử dụng các hàm sử lý mysqli để lấy dữ liệu, bước này  cũng chính là Read hay chữ R trong CURD. Các bạn có thể xem các hàm mysqli ở đây.

các bạn dán đoạn code dưới đây vào sau thẻ body:

<?php 
    //Kết nối databse
    $con = mysqli_connect('localhost', 'root', '', 'demo');
    //Viết câu SQL lấy tất cả dữ liệu trong bảng players
    $sql="SELECT * FROM `players` ORDER BY `id`";
    //Chạy câu SQL
    $result=mysqli_query($con,$sql);
    //Gắn dữ liệu lấy được vào mảng $data
    while ($row=mysqli_fetch_assoc($result)) {
        $data[] = $row;
    }
?>

Mình đã giải thích rất kỹ bằng ghi chú nên mình sẽ không giải thích gì thêm.

Như vậy ta đã có mảng $data chứa các dữ liệu được lấy về từ database.

Tiếp theo ta sẽ đổ dữ liệu lấy được vào bảng mà mình đã tạo ở bước 1 nhé.

Các bạn dán tiếp đoạn code sau vào trong tag <?php ?> :

Code
$html = '';
foreach ($data as $value) {
	$html .= '
	<tr role="row">
        <td>'.$value['id'].'</td>
        <td>'.$value['name'].'</td>
        <td>'.$value['age'].'</td>
        <td>'.$value['national'].'</td>
        <td>'.$value['position'].'</td>
        <td>'.$value['salary'].' $</td>
        <td><a href="edit.php?id='.$value['id'].'">Edit</a></td>
        <td><a href="delete.php?id='.$value['id'].'"> Delete</a></td>
    </tr>';
}

Trong đoạn code trên mình tạo một biến $html để ghi nội dung html, sau đó lặp qua mảng $data và gắn dữ liệu vào trong biến $html. Các bạn để ý là mình sử dụng .= để nối chuỗi như vậy cứ mỗi lần lặp qua 1 cầu thủ trong danh sách thì sẽ có thêm một thẻ <tr> được nối vào $html.

Ở đây có một điểm cần lưu ý là mình đã gắn link cho hai ô edit và delete để thực hiện các chức năng sửa và xóa. Tạm thời các bạn không cần quan tâm đến nó, mình sẽ giải thích kỹ hơn ở những phần sau.

OK vậy là đã có biến $html chứa code html rồi giờ in nó ra bên trong thẻ <tbody> của bảng nhé.

code
<tbody>
    <?php  
        echo $html;
    ?>
</tbody>

Vậy là xong bước hiển thị dữ liệu từ database rồi, đây là kết quả:

Chức năng thêm cầu thủ

Đầu tiên chúng ta cần tạo một file để hiển thị form nhập thông tin cầu thủ, các bạn tạo file add.php và dán đoạn code sau vào nhé:

Code
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <style type="text/css">
            button{
                margin-right: 20px;
                padding: 5px;
            }
            form{
                width: 600px;
                margin: auto;
                text-align: center;
            }
            div.form-group{
                width: 90%;
                height: 24px;
                margin: 5px;
            }
            div.form-group input{
                float: right;
                height: 20px;
                width: 400px;
            }
            span{
                font: 18px bold;
                font-weight: bold;
                float: right;
                margin-right: 10px; 
            }
            h1{
                text-align: center;
            }
        </style>
    </head>
    <body>
        <form action="process.php" method="POST">
            <h1>Thêm Cầu Thủ</h1>
            <div class="form-group">
                <input type="text" name="name"><span>Tên cầu thủ: </span>
            </div>
            <div class="form-group">
                <input type="text" name="age"><span>Tuổi: </span>
            </div>
            <div class="form-group">
                <input type="text" name="national"><span>Quốc tịch: </span>
            </div>
            <div class="form-group">
                <input type="text" name="position"><span>Vị trí: </span>
            </div>
            <div class="form-group">
                <input type="text" name="salary"><span>Lương: </span>
            </div>
            <div class="form-group">
                <button type="submit">Thêm</button>
                <button type="reset">Reset</button>
                <a href="index.php"><button type="button">Cancle</button></a>
            </div>
        </form>
    </body>
</html>

Các bạn để ý sẽ thấy method="process.php" vậy mình sẽ tạo tiếp một file process.php để xử lý thông tin được người dùng nhập và gửi đi.

Các bạn dán đoạn code sau vào file process.php vừa tạo:

Code
<?php
    $data = $_POST;
    $errors = [];
 
    //Validate name
    if (!is_string($data['name']) || strlen($data['name']) < 5 
        || strlen($data['name']) > 55) {
         $errors['name'] = $data['name'] . "Tên cầu thủ không hợp lệ!";
    }
    //Validate age
    if (!is_numeric($data['age']) || $data['age'] < 0 || $data['age'] > 150) {
        $errors['age'] = "Tuổi không hợp lệ!";
    }
    //Validate national
    if (!is_string($data['national']) || strlen($data['national']) < 2 
        || strlen($data['national']) > 55) {
        $errors['national'] = "Quốc tịch không hợp lệ!";
    }
    //Validate position
    if (!is_string($data['position']) || strlen($data['position']) < 2 
        || strlen($data['position']) > 10) {
        $errors['position'] = "Vị trí không hợp lệ!";
    }
    //Validate salary
    if (!is_numeric($data['salary']) || $data['salary'] < 0 || $data['salary'] > 1000000) {
        $errors['salary'] = "Lương không hợp lệ!";
    }
    if (count($errors) > 0) {
        $err_str = '<ul>';
        foreach ($errors as $err) {
            $err_str .= '<li>'.$err.'</li>';
        }   
        $err_str .= '</ul>';
        echo  $err_str;
    }else{
        //Kết nối databse
        $con = mysqli_connect('localhost', 'root', '', 'demo');
        //Viết câu SQL lấy tất cả dữ liệu trong bảng players
        $sql = "INSERT INTO `players` 
                (`name`, `age`, `national`, `position`, `salary`) 
                VALUES ('".$data['name']."', '".$data['age']."',
                '".$data['national']."', '".$data['position']."', '".$data['salary']."');";
        //Chạy câu SQL
        if ($result = mysqli_query($con,$sql)) {
            echo "<h1>Thêm mới cầu thủ thành công Click vào 
            <a href='index.php'>đây</a> để về trang danh sách</h1>";
        }else{
            echo "<h1>Có lỗi xảy ra Click vào 
            <a href='index.php'>đây</a> để về trang danh sách</h1>";
        }
 
    }
?>

Đầu tiên là mình sẽ gán dữ liệu trong biến $_POST vào biến $data.

Tiếp đến là tạo bến $errors để lưu các lỗi.

Tiếp theo mình sẽ validate các giá trị được người dùng gửi lên, ở đây các điều kiện khá đơn giản nên mình sẽ không giải thích nhiều nữa. Nếu có lỗi ở phần tử nào thì sẽ tạo phần tử đó trong mảng $errors và gán nội dung lỗi vào đó.

Sau khi đã kiểm tra tất cả các giá trị, ta tiến hành kiểm tra mảng $errors, nếu số phần tử mảng $errors lớn hơn 0 tức là đã có lỗi xảy ra và mình sẽ in nó ra.

Ngược lại, tức là không có phần tử nào trong mảng $errors và các giá trị đều hợp lệ ta tiến hành kết nối tới database và sử dụng câu lệnh INSERT để thêm mới dữ liệu, cuối cùng là hiện câu thông báo đã thêm thành công hoặc có lỗi xảy ra.

Vậy là mình đã hướng dẫn các bạn tạo xong chức năng thêm mới cầu thủ.

Chức năng sửa thông tin cầu thủ

Cúng giống với thêm cầu thủ, chức năng sửa thông tin cũng cần một file giao diện để người dùng nhập liệu, các bạn tạo file edit.php và dán nội dung dưới đây vào nhé.

Code
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <style type="text/css">
            button{
                margin-right: 20px;
                padding: 5px;
            }
            form{
                width: 600px;
                margin: auto;
                text-align: center;
            }
            div.form-group{
                width: 90%;
                height: 24px;
                margin: 5px;
            }
            div.form-group input{
                float: right;
                height: 20px;
                width: 400px;
            }
            span{
                font: 18px bold;
                font-weight: bold;
                float: right;
                margin-right: 10px; 
            }
            h1{
                text-align: center;
            }
        </style>
    </head>
    <body>
        <?php 
            $id = $_GET['id'];
            //Kết nối databse
            $con = mysqli_connect('localhost', 'root', '', 'demo');
            //Viết câu SQL lấy tất cả dữ liệu trong bảng players
            $sql="SELECT * FROM `players` WHERE `id`= ".$id;
            //Chạy câu SQL
            $result=mysqli_query($con,$sql);
            //Gắn dữ liệu lấy được vào mảng $data
            while ($row=mysqli_fetch_assoc($result)) {
                $info = $row;
            }
        ?>
        <form action="process.php" method="POST">
            <h1>Chỉnh sửa thông tin cầu thủ</h1>
            <div class="form-group">
                <input type="text" name="name" value="<?php echo $info['name'] ?>"><span>Tên cầu thủ: </span>
            </div>
            <div class="form-group">
                <input type="text" name="age" value="<?php echo $info['age'] ?>"><span>Tuổi: </span>
            </div>
            <div class="form-group">
                <input type="text" name="national" value="<?php echo $info['national'] ?>"><span>Quốc tịch: </span>
            </div>
            <div class="form-group">
                <input type="text" name="position" value="<?php echo $info['position'] ?>"><span>Vị trí: </span>
            </div>
            <div class="form-group">
                <input type="text" name="salary" value="<?php echo $info['salary'] ?>"><span>Lương: </span>
            </div>
            <div class="form-group">
                <button type="submit">Cập nhật</button>
                <button type="reset">Reset</button>
                <a href="index.php"><button type="button">Cancle</button></a>
            </div>
        </form>
    </body>
</html>

Ở đây có 3 điểm cần lưu ý, đầu tiên là biến $_GET['id'] ở đâu mà có ? Ở bước gắn dữ liệu vào biến $html ở file index.php, mình có gắn link vào hai ô edit và delete như sau:

Code
<td><a href="edit.php?id='.$value['id'].'">Edit</a></td>
<td><a href="delete.php?id='.$value['id'].'"> Delete</a></td>

Các bạn để ý đoạn mã href="edit.php?id='.$value['id'].'" mình đã truyền luôn id của cầu thủ trên url và nó sẽ được truyền đến file edit.php thông qua biến $_GET['id'].

Từ biến $id này ta có thể sử dụng câu SQL và lấy thông tin của cầu thủ có id đó.

Thứ hai là phần action của form, mình vẫn để là process.php mà phương thức thêm cầu thủ sử dụng, sở dĩ mình sử dụng chung file này để xử lý vì phương thức chỉnh sửa cũng có các bược validate giống với thêm mới.

Cuối cùngi là khi đã có thông tin cầu thủ lưu trong biến $info, mình sẽ đổ nó ra các ô nhập liệu bằng thuộc tính value của thẻ input:

Code
<input type="text" name="name" value="<?php echo $info['name'] ?>"><span>Tên cầu thủ: </span>

Như vậy là xong về giao diện, nó khá giống với form thêm cầu thủ nhưng chỉ khác là nó sẽ hiển thị thông tin cũ của cầu thủ để người dùng xác định xem cần sửa giá trị nào.

Và đây là kết quả sau khi click vào chỉnh sửa thông tin Messi:

Ok vậy là xong phần giao diện, giờ các bạn chỉnh sửa action của form trong file edit.php thành như sau:

Code
action="process.php?id=<?php echo $id ?>"

Ta sẽ gửi tới file process.php một biến $id thông qua url để nó nhận ra đâu là chỉnh sửa đâu là thêm mới.

Giờ ta sẽ chỉnh sửa flle process.php để nó nhận diện đâu là thêm mới và đâu là chỉnh sửa để có những xử lý phù hợp.

Mình sẽ chỉ cần chỉnh sửa doạn code sau khi đã validate thành công, vì cả hai phương thức đều cần validate mà. Ta sẽ chú ý đến đoạn code trong khung được bôi đỏ:

Mình sẽ phân biệt giữa hai chức năng thêm và chỉnh sửa dựa vào biến $_GET['id']. Nếu tồn tại biến $_GET['id'] thì đó là chức năng sửa thông tin và ngược lại là chức năng thêm mới.

Các bạn dán đoạn mã sau thay thế cho đoạn mã được mình khoanh đỏ ở trên:

Code
if (isset($_GET['id'])) {
    //Chỉnh sửa thông tin
    //Kết nối databse
    $con = mysqli_connect('localhost', 'root', '', 'demo');
    //Viết câu SQL lấy tất cả dữ liệu trong bảng players
    $sql = "UPDATE `players` SET `name`='".$data['name']."',`age`='".$data['age']."',`national`='".$data['national']."',`position`='".$data['position']."',`salary`='".$data['salary']."' WHERE `id` = ".$_GET['id'];
    // Chạy câu SQL
    if ($result = mysqli_query($con,$sql)) {
        echo "<h1>Chỉnh sửa thông tin cầu thủ thành công Click vào <a href='index.php'>đây</a> để về trang danh sách</h1>";
    }else{
        echo "<h1>Có lỗi xảy ra Click vào <a href='index.php'>đây</a> để về trang danh sách</h1>";
    }
}else{
    //Thêm mới cầu thủ
    //Kết nối databse
    $con = mysqli_connect('localhost', 'root', '', 'demo');
    //Viết câu SQL lấy tất cả dữ liệu trong bảng players
    $sql = "INSERT INTO `players` 
            (`name`, `age`, `national`, `position`, `salary`) 
            VALUES ('".$data['name']."', '".$data['age']."',
            '".$data['national']."', '".$data['position']."', '".$data['salary']."');";
    //Chạy câu SQL
    if ($result = mysqli_query($con,$sql)) {
        echo "<h1>Thêm mới cầu thủ thành công Click vào <a href='index.php'>đây</a> để về trang danh sách</h1>";
    }else{
        echo "<h1>Có lỗi xảy ra Click vào <a href='index.php'>đây</a> để về trang danh sách</h1>";
    }
}

Trong phần này các bạn chỉ cần lưu ý đến câu SQL UPDATE vì các bước khác đều tương tự như chức năng thêm mới.

Vậy là chúng ta đã xây dựng xong chức năng chỉnh sửa thông tin cầu thủ, cùng tiến hành bước cuối cùng nhé.

Xóa cầu thủ

Chức năng xóa cầu thủ này khá đơn giản vì chúng ta sẽ không phải xây dựng giao diện mà sẽ tiến hành xây viết code xử lý luôn.

Các bạn tạo file delete.php và dán nội dụng dưới đây vào:

Code
<?php
    $id = $_GET['id'];
    $con = mysqli_connect('localhost', 'root', '', 'demo');
    //Viết câu SQL lấy tất cả dữ liệu trong bảng players
    $sql = "DELETE FROM `players` WHERE `id`='".$id."'";
    // Chạy câu SQL
    if ($result = mysqli_query($con,$sql)) {
        echo "<h1>Xóa cầu thủ thành công Click vào <a href='index.php'>đây</a> để về trang danh sách</h1>";
    }else{
        echo "<h1>Có lỗi xảy ra Click vào <a href='index.php'>đây</a> để về trang danh sách</h1>";
    }
?>

Khá đơn giản phải không nào, đầu tiên là lấy id của cầu thủ muốn xóa thì cũng giống với chức năng edit, ta sẽ gửi id thông qua url và nhận nó qua biến $_GET['id'].

Sau đó viết câu SQL DELETE và chạy nó tương tự như các chức năng khác. Các bạn lưu ý cấu trúc câu SQL DELETE nhé, nó đơn giản nhưng không thể thiếu trong bất cứ ứng dụng nào sử dụng MySql đâu.

Như vậy là mình đã hướng dẫn các bạn tạo xong ứng dụng quản lý cầu thủ đơn giản rồi.

Những điều cần chú ý và mẹo

Trong bài viết này các bạn cần nắm được một số ý chính sau:

  • Khái niệm về CURD, thực ra cũng chẳng có gì, chỉ cần nhớ nó là viết tắt của Creat, Update, Read, Delete hay thêm, sửa, xóa, đọc dữ liệu từ database.
  • Cấu trúc các câu lệnh SQL INSERT, UPDATE, DELETE, SELECT, có một mẹo là các bạn nên viết hoa các từ khóa của SQL và viết in thường các giá trị cũng như tên cột, tên bảng..., luôn đặt các giá trị chuỗi trong cặp dấu nháy đơn hoặc nháy đôi, nên đặt các tên bảng, tên cột trong cặp dấu `( dưới nút Esc).
  • Gửi và nhận dữ liệu từ form thông qua hai biến $_GET$_POST, trong bài này mình cũng hướng dẫn các bạn một mẹo nhỏ để truyền dữ liệu thông qua url.

Đó là tất cả rồi :D hi vọng các bạn đã làm chủ được CURD. Hẹn gặp lại các bạn ở các bài viết tiếp theo trên freetuts.net.

Bạn đang muồn tìm hiểu PHP Framework?

Nếu bạn muốn học mô hình MVC thì nên lựa chọn Codeigniter, đây là framework đơn giản và dễ sử dụng nhất. Tham khảo khóa học Codeigniter để dễ dàng nắm bắt  hơn.

Nguồn: freetuts.net

KHÓA HỌC ĐANG GIẢM GIÁ

FEDU - 20: Học lập trình Angular js/MySQL/PHP

(Giảng viên: Nguyễn Đức Việt)

XEM
UNICA - Xây dựng website hoàn chỉnh với Laravel PHP Framework

(Giảng viên: )

XEM
UNICA - Lập trình FULLSTACK với ANGULAR - PHP - MYSQL

(Giảng viên: )

XEM
KYNA - Lập trình Fullstack với Angular - PHP - MySQL

(Giảng viên: Nguyễn Đức Việt)

XEM
KYNA - Lập trình hướng đối tượng từ cơ bản đến nâng cao trong PHP

(Giảng viên: Lưu Trường Hải Lân)

XEM