[Module User] – Danh sách người dùng

Vậy là bạn đã hiểu ý tưởng cũng như cách viết hàm phân trang rồi đúng không nào? Nếu chưa biết thì hãy quay lại bài viết hàm phân trang để học nó trước khi vào bài này nhé.

test php

banquyen png

Bài viết này được đăng tại phpbbvietnam.com, không được copy dưới mọi hình thức.

Trong bài này chúng ta sẽ xây dựng chức năng hiển thị danh sách người dùng có phân trang được lấy từ bảng tb_user trong cơ sở dữ liệu. Giao diện sau khi hoàn thành sẽ hoàn thành sẽ như sau:

danh sach nguoi dung png

Như thường lệ chúng ta sẽ có các bước thực hiện như sau.

Bài viết này được đăng tại [phpbbvietnam.com]

1. Bổ sung CSS trên header

Để có giao diện như trong hình thì chúng ta cần bổ sung một số đoạn CSS. Bạn mở file admin/widgets/header.php lên và bổ sung đoạn CSS sau vào thẻ style.


.pagination a, .pagination span{
    margin-right: 3px;
}
.pagination span{
    display: inline-block;
    padding: 3px 5px;
    background: gray;
    color: #fff;
    text-decoration: none;
    margin-top: 10px;
}
table.form{
    width: 100%;
}
table.form td{
    border: solid 1px #ddd;
    padding: 5px 10px;
}
table.form thead{
    font-weight: bold;
}
.controls{
    margin: 10px 0px;
    text-align: right;
}

Vẫn ở file này, bạn thay đổi đường dẫn URL trên thanh menu của User thành như sau:


<a href="https://phpbbvietnam.com/<?php echo create_link(base_url("admin'), array('m' => 'user', 'a' => 'list')); ?>">User</a>

2. Bổ sung dữ liệu bảng người dùng

Ta phải bổ sung một số User để thực hiện phân trang. Bạn copy đoạn mã SQL sau và vào PHPMYADMIN để chạy nó.


INSERT INTO `tb_user` (`id`, `username`, `password`, `email`, `fullname`, `level`, `add_date`) VALUES
(2, 'User2', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User2 Name', 2, NULL),
(3, 'User3', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User3 Name', 2, NULL),
(4, 'User4', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User4 Name', 2, NULL),
(5, 'User5', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User5 Name', 2, NULL),
(6, 'User6', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User6 Name', 2, NULL),
(7, 'User7', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User7 Name', 2, NULL),
(8, 'User8', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User8 Name', 2, NULL),
(9, 'User9', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User9 Name', 2, NULL),
(10, 'User10', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User10 Name', 2, NULL),
(11, 'User11', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User11 Name', 2, NULL),
(12, 'User12', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User12 Name', 2, NULL),
(13, 'User13', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User13 Name', 2, NULL),
(14, 'User14', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User14 Name', 2, NULL),
(15, 'User15', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User15 Name', 2, NULL),
(16, 'User16', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User16 Name', 2, NULL),
(17, 'User17', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User17 Name', 2, NULL),
(18, 'User18', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User18 Name', 2, NULL),
(19, 'User19', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User19 Name', 2, NULL),
(20, 'User20', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User20 Name', 2, NULL),
(21, 'User21', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User21 Name', 2, NULL),
(22, 'User22', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User22 Name', 2, NULL),
(23, 'User23', '83617175fd8cf470d4af657a28def98e', '[email protected]', 'User23 Name', 2, NULL);

3. Viết hàm tạo câu truy vấn

Trong các câu truy vấn sẽ có các điều kiện where nên để tiện cho việc xây dựng các câu truy vấn thì chúng ta cần tạo một hàm có nhiệm vụ tự động tạo ra câu SQL kèm với điều kiện WHERE.

Read More:   [Module User] - Xóa người dùng

Bạn mở file libs/database.php lên và bổ sung hàm sau:


// Hàm tạo câu truy vấn có thêm điều kiện Where
function db_create_sql($sql, $filter = array())
{    
    // Chuỗi where
    $where="";
    
    // Lặp qua biến $filter và bổ sung vào $where
    foreach ($filter as $field => $value){
        if ($value != ''){
            $value = addslashes($value);
            $where .= "AND $field = '$value', ";
        }
    }
    
    // Remove chữ AND ở đầu
    $where = trim($where, 'AND');
    // Remove ký tự , ở cuối
    $where = trim($where, ', ');
    
    // Nếu có điều kiện where thì nối chuỗi
    if ($where){
        $where=" WHERE ".$where;
    }
    
    // Return về câu truy vấn
    return str_replace('{where}', $where, $sql);
}

Hàm này có hai tham số truyền vào:

  • $sql: Là câu lệnh SQL không có WHERE
  • $filter: Là một mảng key => value tương ứng với key là tên field và value là giá trị tìm kiếm. Như vậy tham số này chính là điều kiện where.

Có một lưu ý là trong câu lênh $sql bạn sẽ phải xác định vị trí đặt điều kiện where bằng cách bổ sung chữ {where} tại vị trí mong muốn.

Ví dụ:


echo db_create_sql("SELECT * FROM tb_user {where}", array('id' => '1'));

Kết quả sẽ là câu truy vấn dạng:


SELECT * FROM tb_user WHERE id = '1'

4. Xử lý trang danh sách người dùng

Trang danh sách người dùng sẽ có URL là: http://localhost/php_example/admin/?m=user&a=list.

Bạn mở file modules/user/list.php lên và dán nội dung sau vào:


<?php if (!defined('IN_SITE')) die ('The request not found');

// Kiểm tra quyền, nếu không có quyền thì chuyển nó về trang logout
if (!is_admin()){
    redirect(base_url('admin'), array('m' => 'common', 'a' => 'logout'));
}
?>

<?php include_once('widgets/header.php'); ?>

<?php // VỊ TRÍ 01: CODE XỬ LÝ PHÂN TRANG ?>

<h1>Danh sách thành viên</h1>
<div class="controls">
    <a class="button" href="https://phpbbvietnam.com/<?php echo create_link(base_url("admin'), array('m' => 'user', 'a' => 'add')); ?>">Thêm</a>
</div>
<table cellspacing="0" cellpadding="0" class="form">
    <thead>
        <tr>
            <td>Username</td>
            <td>Email</td>
            <td>Action</td>
        </tr>
    </thead>
    <tbody>
        <?php // VỊ TRÍ 02: CODE HIỂN THỊ NGƯỜI DÙNG ?>
    </tbody>
</table>

<div class="pagination">
    <?php // VỊ TRÍ 03: CODE HIỂN THỊ CÁC NÚT PHÂN TRANG ?>
</div>

<?php include_once('widgets/footer.php'); ?>

Trong đó mình có sử dụng một đoạn code như sau:


// Kiểm tra quyền, nếu không có quyền thì chuyển nó về trang logout
if (!is_admin()){
    redirect(base_url('admin'), array('m' => 'common', 'a' => 'logout'));
}

Đoạn code này chính là kiểm tra ngươi dùng có phải là admin hay không? Nếu không phải thì đẩy ra ngoài hệ thống.

Và mình có comment ba vị trí:

  • VỊ TRÍ 01: CODE XỬ LÝ PHÂN TRANG
  • VỊ TRÍ 02: CODE HIỂN THỊ NGƯỜI DÙNG
  • VỊ TRÍ 03: CODE HIỂN THỊ CÁC NÚT PHÂN TRANG

Bây giờ ta sẽ code cho từng vị trí.

Ví trí 01: Code xử lý phân trang.

Bạn dán vào đoạn code sau:


// Tìm tổng số records
$sql = db_create_sql('SELECT count(id) as counter from tb_user {where}');
$result = db_get_row($sql);
$total_records = $result['counter'];

// Lấy trang hiện tại
$current_page = input_get('page');

// Lấy limit
$limit = 10;

// Lấy link
$link = create_link(base_url('admin'), array(
    'm' => 'user',
    'a' => 'list',
    'page' => '{page}'
));

// Thực hiện phân trang
$paging = paging($link, $total_records, $current_page, $limit);

// Lấy danh sách User
$sql = db_create_sql("SELECT * FROM tb_user {where} LIMIT {$paging['start']}, {$paging['limit']}");
$users = db_get_list($sql);

Sau khi chạy xong đoạn code này ta sẽ có hai biến:

  • $users: Chứa danh sách người dùng
  • $paging: Chứa nội dung HTML phân trang

Vị trí 02: Code hiển thị người dùng.

Bạn dán vào đoạn code sau:


<?php foreach ($users as $item){ ?>
<tr>
    <td><?php echo $item['username']; ?></td>
    <td><?php echo $item['email']; ?></td>
    <td>
        <form method="POST" class="form-delete" action="https://phpbbvietnam.com/<?php echo create_link(base_url("admin/index.php'), array('m' => 'user', 'a' => 'delete')); ?>">
            <a href="https://phpbbvietnam.com/<?php echo create_link(base_url("admin'), array('m' => 'user', 'a' => 'edit', 'id' => $item['id'])); ?>">Edit</a>
            <input type="hidden" name="user_id" value="<?php echo $item['id']; ?>"/>
            <input type="hidden" name="request_name" value="delete_user"/>
            <a href="#" class="btn-submit">Delete</a>
        </form>
    </td>
</tr>
<?php } ?>

Mình đã lặp biến $users để hiển thị danh sách người dùng. Mỗi người dùng sẽ có một button edit và một button delete và được đặt trong một form, ngoài 2 button đó ra thì bên trong form còn có hai input hidden chứa ID và request_name. Những thông tin này sẽ được giải thích ở bài xây dựng chức năng xóa người dùng.

Vị trí 03: Code hiển thị các nút phân trang.

Vị trí này đơn giản nhất bởi vì ta chỉ cần show mã HTML phân trang là được.

Toàn bộ code:

Và đây là toàn bộ nội dung của file này:


<?php if (!defined('IN_SITE')) die ('The request not found');

    // Kiểm tra quyền, nếu không có quyền thì chuyển nó về trang logout
    if (!is_admin()){
        redirect(base_url('admin'), array('m' => 'common', 'a' => 'logout'));
    }
    ?>

    <?php include_once('widgets/header.php'); ?>

    <?php 
    // VỊ TRÍ 01: CODE XỬ LÝ PHÂN TRANG 
    // Tìm tổng số records
    $sql = db_create_sql('SELECT count(id) as counter from tb_user {where}');
    $result = db_get_row($sql);
    $total_records = $result['counter'];

    // Lấy trang hiện tại
    $current_page = input_get('page');

    // Lấy limit
    $limit = 10;

    // Lấy link
    $link = create_link(base_url('admin'), array(
        'm' => 'user',
        'a' => 'list',
        'page' => '{page}'
    ));

    // Thực hiện phân trang
    $paging = paging($link, $total_records, $current_page, $limit);

    // Lấy danh sách User
    $sql = db_create_sql("SELECT * FROM tb_user {where} LIMIT {$paging['start']}, {$paging['limit']}");
    $users = db_get_list($sql);
?>

<h1>Danh sách thành viên</h1>
<div class="controls">
    <a class="button" href="https://phpbbvietnam.com/<?php echo create_link(base_url("admin'), array('m' => 'user', 'a' => 'add')); ?>">Thêm</a>
</div>
<table cellspacing="0" cellpadding="0" class="form">
    <thead>
        <tr>
            <td>Username</td>
            <td>Email</td>
            <td>Action</td>
        </tr>
    </thead>
    <tbody>
        <?php // VỊ TRÍ 02: CODE HIỂN THỊ NGƯỜI DÙNG ?>
        <?php foreach ($users as $item){ ?>
        <tr>
            <td><?php echo $item['username']; ?></td>
            <td><?php echo $item['email']; ?></td>
            <td>
                <form method="POST" class="form-delete" action="https://phpbbvietnam.com/<?php echo create_link(base_url("admin/index.php'), array('m' => 'user', 'a' => 'delete')); ?>">
                    <a href="https://phpbbvietnam.com/<?php echo create_link(base_url("admin'), array('m' => 'user', 'a' => 'edit', 'id' => $item['id'])); ?>">Edit</a>
                    <input type="hidden" name="user_id" value="<?php echo $item['id']; ?>"/>
                    <input type="hidden" name="request_name" value="delete_user"/>
                    <a href="#" class="btn-submit">Delete</a>
                </form>
            </td>
        </tr>
        <?php } ?>
    </tbody>
</table>

<div class="pagination">
    <?php 
    // VỊ TRÍ 03: CODE HIỂN THỊ CÁC NÚT PHÂN TRANG
    echo $paging['html']; 
    ?>
</div>

<?php include_once('widgets/footer.php'); ?>

Bây giờ bạn hãy chạy web lên với đường dẫn là http://localhost/php_example/admin/?m=user&a=list để xem kết quả nhé, nhớ click vào các nút phân trang để xem sự khác biệt.

5. Lời kết

Bài này có vẻ bắt đầu khó dần rồi phải không các bạn. Nếu các bạn hiểu được toàn bộ code trên thì khả năng của bạn cũng tương đối tốt rồi đấy.

Để dễ hiểu bài thì bạn nên xem video một lần rồi sau đó thực hành theo. Trong quá trình học nếu bị lỗi gì thì hãy lên trang hỏi đáp để đăng câu hỏi nhé, mình chỉ hỗ trợ trên đó thôi. Bài tiếp theo ta sẽ xây dựng chức năng xóa người dùng.

https://www.youtube.com/watch?v=Lt460Bfz65w

Bài viết này, The Learn PHP Tutorial Đã gửi đến bạn đọc kiến thức về “[Module User] – Danh sách người dùng❤️️”. Admin hy vọng qua phần nội dung trong bài”[Module User] – Danh sách người dùng” có thể giúp bạn đọc có thêm kiến thức về “[Module User] – Danh sách người dùng trong quá trình tự học PHP của mình .

Bài viết “[Module User] – Danh sách người dùng” posted by on 2022-07-15 03:54:00. Cảm ơn bạn đọc đã xem bài viết tại Phpbbvietnam.com Và đừng quên chia sẻ bài viết này để nhiều người khác cũng có thể xem tài liệu học php miễn phí này nhé.

Back to top button