Đăng nhập Đăng ký website 
DÙNG THỬ MIỄN PHÍ

Phần 5: Tổ chức cơ sở dữ liệu cho PHP Framework

Đối với website việc truy vấn, lưu trữ, cập nhật và xóa cơ sở dữ liệu là các thao tác thường xuyên được thực hiện trong suốt quá trình hoạt động.

PHP có thể kết nối được với nhiều loại cơ sở dữ liệu như SQL, MySQL, Oracle v.v… với mỗi loại bạn chỉ cần sử dụng extension phù hợp.Tổ chức tốt các chức năng này sẽ giúp việc lập trình được thuận tiện, dễ dàng thay đổi và nâng cấp cũng như mở rộng trong quá trình phát triển.

Trong phần này chúng ta sẽ xây dựng các chức năng để kết nối PHP với cơ sở dữ liệu MySQL.
Chúng ta sẽ xây dựng lớp DDatabase để thực hiện các chức năng cần thiết.

Trong thư mục dframework/libs/ tạo file ddatabase.php với nội dung sau:
?php
include(__DIR__.'/dsecurity.php');
class DDatabase extends DSecurity{
    public $con=false;
    public function db_connect($db_host,$db_user,$db_pass,$db_name){
        $this->con = mysqli_connect($m_host,$db_user,$db_pass,$db_name);
        if(!$this->con){
            die('Could not connect: ' . mysqli_connect_error());
        }
    }
    public function db_query($m_sql){
        if($db_result=mysqli_query($this->con,$m_sql)){
            return $db_result;
        }else{
            return false;
        }
    }
}
?>

Để thuận tiện cho việc kết nối với nhiều loại cơ sở dữ liệu khác nhau, chúng ta sẽ không dùng trực tiếp các hàm của PHP để thao tác với dữ liệu mà xây dựng các hàm riêng để thực hiện, lợi ích là khi thay đổi chúng ta chỉ cần thay đổi trong lớp kết nối Database mà không cần phải thay đổi lại code đã viết ở các vị trí khác.

Viết thêm cho lớp DDatabase các chức năng sau:
1. Chức năng truy vấn: là chức năng lấy dữ liệu từ cơ sở dữ liệu để sử dụng trên website.
public function get_rows($m_sql){
    if($rs=$this->db_query($m_sql)){
        $m_data=array();
        while($rows = mysqli_fetch_assoc($rs)){
            $m_data[] = $rows;
        }
        return $m_data;
    }
    return false;
}

2. Chức năng lưu trữ: là chức năng lưu dữ liệu từ website vào cơ sở dữ liệu.
public function db_insert($tbl_name,$tbl_data){
    if(is_array($tbl_data)){
        $m_fields=implode(',',array_keys($tbl_data));
        $db_values=array();
        foreach($tbl_data as $m_values){
            $db_values[]="'$m_values'";
        }
        $m_sql="insert into $tbl_name($m_fields) values(".implode(',',$db_values).')';
        return $this->db_query($m_sql);
    }else return false;
}

3. Chức năng cập nhật: là chức năng cập nhật lại dữ liệu đã có trong cơ sở dữ liệu.
public function db_update($tbl_name,$tbl_data,$m_where){
    if(is_array($tbl_data)){
        $m_fields=array_keys($tbl_data);
        $db_values=array();
        foreach($m_fields as $m_key){
            $db_values[]="$m_key='{$tbl_data[$m_key]}'";
        }
        $m_value = implode(',',$db_values);
        $m_sql="update $tbl_name set $m_value $m_where";
        return $this->db_query($m_sql);
    }
}

4. Chức năng xóa: là chức năng xóa dữ liệu đã có trong cơ sở dữ liệu.
public function db_delete($tbl_name,$m_where){
    return $this->db_query('delete from '.$tbl_name.' '.$m_where);
}

Ứng dụng:

Thực hiện Example 3 với yêu cầu sau:
1. Nhập vào tên xe và lưu trữ các thông tin này vào cơ sở dữ liệu
2. Sau khi nhập xong sẽ hiện danh sách các xe đã nhập
3. Khi nhấn nút xóa ứng với mỗi xe trong danh sách thì xóa dữ liệu này trong cơ sở dữ liệu
4. Khi nhấn nút sửa tương ứng thì cho phép cập nhật lại dữ liệu đó

Thực hiện:
Bước 1: Tạo Database tên mydatabase để sử dụng, sau đó tạo Table là cac_loai_xe đây là nơi chúng ta sẽ lưu trữ các thông tin mà người sử dụng nhập vào.
Tạo Database với phpMyAdmin
Trong bài hướng dẫn cài đặt PHP chạy Localhost trên Window mình có hướng dẫn cài đặt PHP bằng phần mềm Appserv, phần mềm này đã tích hợp sẵn phpMyAdmin hoặc bạn có thể tải về từ trang chủ phpMyAdmin
Giao diện phần mềm phpMyAdmin

Để tạo database mới bạn vào mục Databases
Tạo Database mới

Sau khi có Database chúng ta sẽ tạo thêm Table để chứa dữ liệu
Tạo table mới

Trong ví dụ này chúng ta chỉ đơn giản là lưu tên nên Table cac_loai_xe sẽ gồm 2 dữ liệu chính là id và name, trong đó id sẽ được tạo tự động và được sử dụng để cập nhật hoặc xóa dữ liệu.
Table các loại xe

Sau khi tạo xong chúng ta sẽ có thông tin:
Cấu trúc Table sau khi tạo xong

Như vậy là chúng ta đã hoàn thành xong bước tạo dữ liệu cho website.

Bước 2: Lập trình
+ Trong thư mục dframework/example tạo file example3.php có nội dung sau:
?php
include('../libs/dframework.php');
$tpl = new DFramework;
$tpl->loadtemplate('example3.htm');
$tpl->db_connect('localhost','root','rootroot',mydatabase);
$tbl_name='cac_loai_xe';
$initAction=$initValue='';
if(isset($_POST['name'])){
    if(isset($_GET['eid']) && intval($_GET['eid']) > 0){
        $tpl->db_update($tbl_name,array('name' => strval($_POST['name'])),'where id='.intval($_GET['eid']));    
    }else{
        $tpl->db_insert($tbl_name,array('name' => strval($_POST['name'])));
    }
    header('location:?');
}
if(isset($_GET['did']) && intval($_GET['did']) > 0){
    $tpl->db_delete($tbl_name,'where id='.intval($_GET['did']));
    header('location:?');
}
if(isset($_GET['eid']) && intval($_GET['eid']) > 0){
    $m_init = $tpl->get_rows('select * from '.$tbl_name.' where id='.intval($_GET['eid']));
    if($m_init){
        $initValue = $m_init[0]['name'];
        $initAction = '?eid='.intval($_GET['eid']);
    }
}
$tpl->assign('data.init',$initValue);
$tpl->assign('data.action',$initAction);
if($allrows = $tpl->get_rows('select * from '.$tbl_name)){
    foreach($allrows as $rows){
        $rows['edit']='Sửa';
        $rows['delete']='Xóa';
        $tpl->assign('loaixe',$rows,'data');
    }
    $tpl->show_block('loaixe');
}
$tpl->assign($data_assign);
$tpl->display();
?>

+ Trong thư mục dframework/example tạo file example3.htm có nội dung sau:
html>
link rel="stylesheet" type="text/css" href="../css/style.css">
body align="center">
form method="post" action="{data.action}">
br />p>Nhập vào tên xe input type="text" name="name" value="{data.init}" />/p>
input type="submit" value="Lưu dữ liệu" />
/form>
br>
table width="60%" border="1" style="border-collapse: collapse;margin:auto;text-align:center" cellspacing="0" cellpadding="5">
    tr style="background:#f7f7f7">
        td>ID/td>
        td>Name/td>
        td>Edit/td>
        td>Delete/td>
    /tr>
    {d:block name="loaixe" loop="0"}
    tr>
        td>{data.id}/td>
        td>{data.name}/td>
        td>{data.edit}/td>
        td>{data.delete}/td>
    /tr>
    {d:/block}
/table>
/body>
/html>

Kết quả:
Kết quả chương trình cập nhật dữ liệu bằng DFramework
+ Download toàn bộ mã nguồn tại đây

Tổng kết:

Với ví dụ trên chúng ta đã ứng dụng được toàn bộ các chức năng của DFramework, từ sử dụng biến, block cho tới cơ sở dữ liệu, tất cả các hoạt động của website đều sẽ xoay quanh các chức năng cơ bản này.
Phân tích một số chức năng cơ bản trên website ta sẽ thấy như sau:
+ Trang sản phẩm: là lấy toàn bộ dữ liệu trong database sản phẩm và hiển thị lên website
+ Trang tin tức: là lấy toàn bộ dữ liệu trong database tin tức và hiển thị lên website
+ Xem chi tiết sản phẩm: là lấy 1 dữ liệu trong database sản phẩm và hiển thị
+ Đăng ký thành viên: là lưu lại thông tin người sử dụng đã nhập vào database user
+ Đăng nhập vào website: là lấy dữ liệu từ database user và so sánh với thông tin đã nhập vào
+ Đổi mật khẩu đăng nhập: là cập nhật lại thông tin đã lưu trong database user
Website càng lớn thì sẽ càng nhiều chức năng cho người sử dụng nhưng tất cả phần lập trình đều quay về 4 chức năng cơ bản trên.

Đến đây chúng ta đã hoàn thành được các phần cơ bản cho DFramework, trong các phần tiếp theo chúng ta sẽ đi vào các chức năng chi tiết hơn như cache lại website để tăng tốc độ truy cập, xây dựng cơ chế bảo mật cho các chức năng liên quan đến cơ sở dữ liệu.


Các tin khác
CÔNG TY TNHH THƯƠNG MẠI DỊCH VỤ THƯƠNG HIỆU TRỰC TUYẾN
Address: 216/14 Bùi Văn Ba, Phường Tân Thuận Đông, Quận 7, Tp.HCM
Hotline: 0908.622.880 -  Zalo: 0908 622 880
Email: Email info
Số Hotline
Zalo