Nhận dữ liệu người dùng và thao tác với dữ liệu từ database MySQL

/ Lập trình web / Php & Mysql
Nhận dữ liệu người dùng và thao tác với dữ liệu từ database MySQL
1

Trong bài học hôm nay, chúng ta sẽ tiến hành lấy dữ liệu người dùng thông qua phương thức GET, POST trong PHP. Thông qua ví dụ xuyên suốt là màn hình với chức năng thêm, xóa, sửa và hiển thị danh sách thành viên.

 

Trước tiên, mình sẽ đề cập qua về lý thuyết việc nhận dữ liệu bằng PHP thông qua phương thức GET và POST.

 

Nhận dữ liệu người dùng thông qua phương thức GET trong PHP

Chúng ta có thể truyền các dữ liệu đơn giản và không cần tính bảo mật ngay trên URL khi gọi request tới server, cú pháp URL:

<pathOfUrl>?field1=value1[&fieldN=valueN]

 

Ví dụ: 

https://tutrithuc.com/postDetail.php?id=123
Trong ví dụ này thì mình đã truyền giá trị 123 cho field id khi gọi file postDetail.php
 
Để nhận được các giá trị mà người dùng đã gửi trên URL, chúng ta có thể sử dụng cú pháp $_GET['fieldName'], để lấy dữ liệu từ ví dụ trên, chúng ta có thể viết file postDetail.php như sau:
<?php
// Lấy id bài viết từ URL
$postId = $_GET['id']; 
var_dump($postId); // Kết quả là: 123

// Lấy dữ liệu bài viết từ DB và hiển thị

 

Lưu ý:

- $_GET là biến toàn cục trong PHP.

- Dữ liệu truyền trên URL sẽ bị giới hạn do chiều dài của URL là có giới hạn.

 

Nhận dữ liệu người dùng thông qua phương thức POST trong PHP

Đối với các dữ liệu cần tính bảo mật hơn, hoặc/ và cần có dung lượng truyền đi cao hơn (video chẳng hạn) thì chúng ta có thể gửi thông qua phương thức POST. Đối với phương thức này, dữ liệu gửi đi vẫn được thể hiện theo từng cặp field/value, tuy nhiên chúng được gửi ngầm khi thực hiện request chứ không thể hiện trực tiếp lên URL. 

Chúng ta có thể tạo và gửi dữ liệu POST thông qua form HTML như sau:

<form action="xuLyDangNhap.php" method="POST">
    <input type="text" name="username" placeholder="Nhập UserName">
    <input type="password" name="password" placeholder="Nhập Mật Khẩu">
    <input type="submit" name="submitBtn" value="OK">
</form>

 

Khi chúng ta nhấn nút OK thì đồng nghĩa với việc một request tới file xuLyDangNhap.php sẽ được gọi kèm theo các dữ liệu của phương thức POST như sau:

- username=<giá trị người dùng đã nhập vào ô username>

- password=<giá trị người dùng đã nhập vào ô password>

- submitBtn="OK"

 

Tại file xuLyDangNhap.php chúng ta có thể nhận được các giá trị này thông qua cú pháp $_POST['fieldName'] như sau:

<?php
    if (isset($_POST['submitBtn'])){
        $username = $_POST['username'];
        $password = $_POST['password'];

        var_dump($username);
        var_dump($password);

        // Xử lý đăng nhập với username và password nhận được
    }
?>

Lưu ý:

- $_POST là biến toàn cục trong PHP

 

Ví dụ màn hình chức năng thêm, xóa, sửa và hiển thị danh sách thành viên bằng PHP

Các chức năng chính:

1. Hiển thị form thêm thành viên mới, xử lý thêm thành viên mới.

2. Hiển thị danh sách các thành viên đang có, kèm theo nút chỉnh sửaxóa.

3. Khi nhấn vào nút xóa > xóa thành viên tương ứng.

4. Khi nhấn nút chỉnh sửa > hiển thị form chỉnh sửa cho thành viên hiện tại, có nút cập nhật để tiến hành lưu thông tin chỉnh sửa.

 

Các bước tiến hành:

1. Tạo database để test, giả sử mình tạo database với tên là mydb1

2. Tạo table chứa thông tin người dùng, giả sử mình tạo bảng user với các field như trong khai báo sau:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `m_username` varchar(255) NOT NULL,
  `m_password` varchar(255) NOT NULL,
  `m_gender` tinyint(4) DEFAULT NULL,
  `m_phone` varchar(50) DEFAULT NULL,
  `m_email` varchar(255) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

 

3. Tạo class tương tác với database, các bạn truy cập Class PHP tương tác với CSDL thông qua PDO và sao chép class Db lưu vào file Db.php
4. Tạo file userManager.php với nội dung như sau:

<?php
include_once 'Db.php';

// Khai báo các tham số để kết nối với CSDL
const DB_HOST = "localhost";
const DB_NAME = "mydb1";
const DB_USER = "root";
const DB_PASS = "";

// Tạo đối tượng từ class Db
$db = new Db();
// chỉ định bảng trong csdl để thao tác
$db->table("user");

/*
 * Add new user
 */
if (isset($_POST['addUser'])) {
    $db->reset();

    if (isset($_POST['username']) && isset($_POST['password'])) {
        $userData = [
            'm_username' => $_POST['username'],
            'm_password' => $_POST['password']
        ];
        if (isset($_POST['phone'])) {
            $userData['m_phone'] = $_POST['phone'];
        }
        if (isset($_POST['email'])) {
            $userData['m_email'] = $_POST['email'];
        }
        if (isset($_POST['gender'])) {
            $userData['m_gender'] = $_POST['gender'];
        }
        $db->insert($userData);
        header("location: userManager.php");
    }
}
// End of add new user



/*
 * Edit user
 */
if (isset($_POST['editUser'])) {
    $db->reset();

    if (isset($_POST['username']) && isset($_POST['password'])) {
        $userData = [
            'm_username' => $_POST['username'],
            'm_password' => $_POST['password']
        ];
        if (isset($_POST['phone'])) {
            $userData['m_phone'] = $_POST['phone'];
        }
        if (isset($_POST['email'])) {
            $userData['m_email'] = $_POST['email'];
        }
        if (isset($_POST['gender'])) {
            $userData['m_gender'] = $_POST['gender'];
        }
        $db
                ->where([
                    'id' => $_POST['id']
                ])
                ->update($userData);
        header("location: userManager.php");
    }
}
// End of edit user




/*
 * Delete user
 */
if (isset($_GET['action'])) {
    if ($_GET['action'] == 'delete') {
        $userId = $_GET['id'];
        $db
                ->reset()
                ->where([
                    'id' => $userId
                ])
                ->delete();
        header("location: userManager.php");
    }
}
// End of delete user


/*
 * Get edit user data
 */
$userEdit = null;
if (isset($_GET['action'])) {
    if ($_GET['action'] == 'edit') {
        $userId = $_GET['id'];
        $userEdit = $db
                ->reset()
                ->where([
                    'id' => $userId
                ])
                ->get()
                ->result();
        $userEdit = $userEdit[0];
    }
}
// End of get edit user data

/*
 * Get list of user
 */
$userList = $db
        ->reset()
        ->order([
            'id' => 'DESC'
        ])
        ->get()
        ->result();
// End of get list of user
?>




<html>
    <head>
        <title>Quản lý thành viên</title>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width,initial-scale=1" />
        <style>
            *{
                padding: 0;
                margin: 0;
                box-sizing: border-box;
            }
            body{
                font-family: sans-serif;
                max-width: 1200px;
                padding-left: 15px;
                padding-right: 15px;
                margin: 15px auto;
            }
            h2{
                margin-top: 40px;
            }
            input[type=text],
            input[type=password],
            input[type=email],
            input[type=submit]{
                display: inline-block;
                max-width: 100%;
                height: 40px;
                padding-left: 15px;
                padding-right: 15px;
                border-radius: 5px;
                border: 1px solid #666666;
            }
            input[type=submit]{
                background-color: #098fd2;
                color: #ffffff;
                cursor: pointer;
            }

            .basic-table{
                border: 1px solid #333333;
                border-collapse: collapse;
                width: 100%;
            }
            .basic-table th,
            .basic-table td{
                padding: 7.5px 15px;
                border: 1px solid #333333;
                text-align: left;
            }
            .input-group{
                line-height: 50px;
            }

        </style>
    </head>
    <body>
        <h1>Quản lý thành viên</h1>

        <div id="new-user">
            <h2>Thêm thành viên mới</h2>
            <form action="" method="POST">
                <div class="input-group">
                    <input type="text"      name="username" placeholder="Tên đăng nhập" required />
                    <input type="password"  name="password" placeholder="Mật khẩu" required/>
                    <input type="text"      name="phone"    placeholder="Số điện thoại" />
                    <input type="email"     name="email"    placeholder="Email" />

                    <input type="radio"     name="gender"   value="1" id="new-user-gender-1"/>
                    <label for="new-user-gender-1">Nam</label>

                    &nbsp;&nbsp;&nbsp;

                    <input type="radio"     name="gender"   value="0" id="new-user-gender-0"/>
                    <label for="new-user-gender-0">Nữ</label>

                    <br />
                    <input type="submit"    name="addUser"  value="Thêm" />
                </div>

            </form>
        </div>

        <?php if (isset($userEdit)): ?>
            <div id="edit-user">
                <h2>Sửa thông tin thành viên</h2>
                <form action="" method="POST">
                    <div class="input-group">
                        <input type="hidden"    name="id" value="<?= $userEdit['id'] ?>" />
                        <input type="text"      name="username" placeholder="Tên đăng nhập" value="<?= $userEdit['m_username'] ?>" required />
                        <input type="password"  name="password" placeholder="Mật khẩu"      value="<?= $userEdit['m_password'] ?>" required/>
                        <input type="text"      name="phone"    placeholder="Số điện thoại" value="<?= $userEdit['m_phone'] ?>"/>
                        <input type="email"     name="email"    placeholder="Email"         value="<?= $userEdit['m_email'] ?>"/>

                        <input type="radio"     name="gender"   value="1" id="edit-user-gender-1" <?= ($userEdit['m_gender'] === '1') ? 'checked' : '' ?> />
                        <label for="edit-user-gender-1">Nam</label>

                        &nbsp;&nbsp;&nbsp;

                        <input type="radio"     name="gender"   value="0" id="edit-user-gender-0" <?= ($userEdit['m_gender'] === '0') ? 'checked' : '' ?> />
                        <label for="edit-user-gender-0">Nữ</label>

                        <br />
                        <input type="submit"    name="editUser"  value="Cập nhật" />
                    </div>
                </form>
            </div>
        <?php endif ?>

        <div id="user-list">
            <h2>Danh sách thành viên</h2>
            <table class="basic-table">
                <thead>
                    <tr>
                        <th>ID</th>
                        <th>Tên đăng nhập</th>
                        <th>Mật khẩu</th>
                        <th>Số điện thoại</th>
                        <th>Email</th>
                        <th>Giới tính</th>
                        <th>Tác vụ</th>
                    </tr>
                </thead>
                <tbody>
                    <?php
                    if ($userList == false) {
                        echo "<tr><td colspan='7'>Chưa có thành viên nào trong danh sách</td></tr>";
                    } else {
                        foreach ($userList as $index => $userData) {
                            $gender = "----";
                            if ($userData["m_gender"] == '1') {
                                $gender = "Nam";
                            }
                            if ($userData["m_gender"] == '0') {
                                $gender = "Nữ";
                            }
                            echo '
                                <tr>
                                    <td>' . $userData["id"] . '</td>
                                    <td>' . $userData["m_username"] . '</td>
                                    <td>' . $userData["m_password"] . '</td>
                                    <td>' . $userData["m_phone"] . '</td>
                                    <td>' . $userData["m_email"] . '</td>
                                    <td>' . $gender . '</td>
                                    <td>
                                        <a href="?action=edit&id=' . $userData["id"] . '" title="Sửa thành viên">Sửa</a>
                                        &nbsp;&nbsp;&nbsp;
                                        <a href="?action=delete&id=' . $userData["id"] . '" title="Xóa thành viên">Xóa</a>
                                    </td>
                                </tr>';
                        }
                    }
                    ?>
                </tbody>
            </table>
        </div>
    </body>
</html>

 

5. Truy cập file userManager.php bằng trình duyệt web, và các bạn sẽ thấy được kết quả như hình sau:

 

Khi này, các chức năng của màn hình quản lý người dùng đã sẵn sàng, chúng ta có thể thêm, xóa, sửa và hiển thị danh sách người dùng.

 

Trong ví dụ trên:

- File Db.php và file userManager.php được lưu cùng cấp với nhau.

- Mình có ghi chú theo từng khối code trong các file, nên mình sẽ không trình bày lại các ghi chú này.

 

Như vậy là chúng ta đã vừa học được cách truyền và nhận dữ liệu thông qua phương thức GETPOST, đồng thời tương tác với CSDL dựa vào các dữ liệu thực tế nhận được.

Ví dụ trong bài học chỉ mang tính tham khảo. Trong thực tế, quá trình quản lý người dùng sẽ bao gồm các quy trình phức tạp hơn như xác thực dữ liệu, mã hóa mật khẩu, phân quyền...

 

 

 

Tạo vào 04/03/2023, Cập nhật 1 năm trước

Bình luận

Hãy là nguời đầu tiên bình luận về Nhận dữ liệu người dùng và thao tác với dữ liệu từ database MySQL

Bài viết có vấn đề ? Hãy cho chúng tôi biết.

Gửi báo cáo sai phạm
Bạn đang đọc bài viết Nhận dữ liệu người dùng và thao tác với dữ liệu từ database MySQL

Hãy để nguồn Suta.media khi phát hành lại nội dung này !