MySQL form update

Định nghĩa và cách dùng

  • Bài này sẽ hướng dẫn cách truyền tham số xác định record (hàng) để cập nhật dữ liệu.
  • Các bước thực hiện:

    • Tạo liên kết cập nhật dữ liệu từ trang view.php
    • Khi Click liên kết sẽ truyền tham số sang trang update.php
    • Dựa theo tham số này, đổ dữ liệu vào các giá trị form tương ứng trong trang update.php, submit form tới trang xử lý process.php
    • Kết nối database và table ở trang xử lý.
    • Xử lý dữ liệu dựa theo tham số được gửi.
    • Đóng database.

Trang view.php

Kiểu hướng đối tượng

Nội dung giống như MySQL view, tuy nhiên ta sẽ thêm một liên kết có tham số tương ứng với mỗi record.

<?php
$username = "user_tintuc"; // Khai báo username
$password = "123456";      // Khai báo password
$server   = "localhost";   // Khai báo server
$dbname   = "tintuc";      // Khai báo database

// Kết nối database tintuc
$connect = new mysqli($server, $username, $password, $dbname);

//Nếu kết nối bị lỗi thì xuất báo lỗi và thoát.
if ($connect->connect_error) {
    die("Không kết nối :" . $connect->connect_error);
    exit();
}

//Code xử lý, insert dữ liệu vào table
$sql     = "SELECT * FROM tin_xahoi";
$ket_qua = $connect->query($sql);

//Nếu kết quả kết nối không được thì xuất báo lỗi và thoát
if (!$ket_qua) {
    die("Không thể thực hiện câu lệnh SQL: " . $connect->connect_error);
    exit();
}

//Dùng vòng lặp while truy xuất các phần tử trong table
while ($row = $ket_qua->fetch_array(MYSQLI_ASSOC)) {
    echo "<p>ID: " . $row['id'] . "</p>";
    echo "<p>Tiêu đề: " . $row['title'] . "</p>";
    echo "<p>Ngày: " . $row['date'] . "</p>";
    echo "<p>Mô tả: " . $row['description'] . "</p>";
    echo "<p>Nội dung: " . $row['content'] . "</p>";

    //Truyền tham số id tới trang update.php
    echo "<p><a href='update.php?id=" . $row['id'] . "'>Update</a></p>";
    echo "<hr>";
}

//Đóng kết nối database tintuc
$connect->close();
?>

ID: 1

Tiêu đề: Tin hot

Ngày: 2016-10-24

Mô tả: Đây là mô tả cho tin hot

Nội dung: Đây là nội dung của tin hot

Update


ID: 2

Tiêu đề: Tin mới

Ngày: 2016-10-28

Mô tả: Mô tả cho tin mới

Nội dung: Nội dung cho tin mới

Update


ID: 3

Tiêu đề: Tiêu đề

Ngày: 2016-10-29

Mô tả: Mô tả cho tiêu đề

Nội dung: Nội dung cho tiêu đề

Update

Khi giữ con trỏ chuột vào liên kết Update, ta sẽ thấy có tham số id có giá trị khác nhau ở mỗi record:
http://localhost:83/tutorial/php/update.php?id=1

Kiểu thủ tục

<?php
$username = "user_tintuc"; // Khai báo username
$password = "123456";      // Khai báo password
$server   = "localhost";   // Khai báo server
$dbname   = "tintuc";      // Khai báo database

// Kết nối database tintuc
$connect = mysqli_connect($server, $username, $password, $dbname);

//Nếu kết nối bị lỗi thì xuất báo lỗi và thoát.
if (!$connect) {
    die("Không kết nối :" . mysqli_connect_error());
    exit();
}

//Code xử lý, insert dữ liệu vào table
$sql    = "SELECT * FROM tin_xahoi";
$ket_qua = mysqli_query($connect,$sql);

//Nếu kết quả kết nối không được thì xuất báo lỗi và thoát
if (!$ket_qua) {
    die("Không thể thực hiện câu lệnh SQL: " . mysqli_error($connect));
    exit();
}

//Dùng vòng lặp while truy xuất các phần tử trong table
while ($row = mysqli_fetch_array($ket_qua)) {
    echo "<p>ID: " . $row['id'] . "</p>";
    echo "<p>Tiêu đề: " . $row['title'] . "</p>";
    echo "<p>Ngày: " . $row['date'] . "</p>";
    echo "<p>Mô tả: " . $row['description'] . "</p>";
    echo "<p>Nội dung: " . $row['content'] . "</p>";

    //Truyền tham số id tới trang update.php
    echo "<p><a href='update.php?id=" . $row['id'] . "'>Update</a></p>";
    echo "<hr>";
}

//Đóng kết nối database tintuc
mysqli_close($connect);
?>

ID: 1

Tiêu đề: Tin hot

Ngày: 2016-10-24

Mô tả: Đây là mô tả cho tin hot

Nội dung: Đây là nội dung của tin hot

Update


ID: 2

Tiêu đề: Tin mới

Ngày: 2016-10-28

Mô tả: Mô tả cho tin mới

Nội dung: Nội dung cho tin mới

Update


ID: 3

Tiêu đề: Tiêu đề

Ngày: 2016-10-29

Mô tả: Mô tả cho tiêu đề

Nội dung: Nội dung cho tiêu đề

Update

Trang update.php

Tạo trang form thu thập dữ liệu

  • Trang này cấu trúc form tương tự như trang dùng insert dữ liệu, có thể ID để dễ xác định và truyền dữ liệu.
<form action="process.php" method="post">
    <table>
        <tr>
            <th>ID:</th>
            <td><input type="hidden" name="id" value=""></td>
        </tr>
        <tr>
            <th>Tiêu đề:</th>
            <td><input type="text" name="title" value=""></td>
        </tr>

        <tr>
            <th>Ngày tháng:</th>
            <td><input type="date" name="date" value=""></td>
        </tr>

        <tr>
            <th>Mô tả:</th>
            <td><input type="text" name="description" value=""></td>
        </tr>

        <tr>
            <th>Nội dung:</th>
            <td><textarea cols="30" rows="7" name="content"></textarea></td>
        </tr>
    </table>
    <button type="submit">Gửi</button>
</form>
ID:
Tiêu đề:
Ngày tháng:
Mô tả:
Nội dung:

Xử lý tham số truyền từ trang view.php - Kiểu hướng đối tượng

Xử lý tương tự trang view, tuy nhiên ở câu lệnh SELECT ta gán điều kiện WHERE id='$id', để xác định dữ liệu nào cần cập nhật.

<?php
$username = "user_tintuc"; // Khai báo username
$password = "123456";      // Khai báo password
$server   = "localhost";   // Khai báo server
$dbname   = "tintuc";      // Khai báo database

// Kết nối database tintuc
$connect = new mysqli($server, $username, $password, $dbname);

//Nếu kết nối bị lỗi thì xuất báo lỗi và thoát.
if ($connect->connect_error) {
    die("Không kết nối :" . $connect->connect_error);
    exit();
}

//Lấy dữ liệu từ view.php bằng phương thức GET.
if(isset($_GET['id'])){
    $id = $_GET['id'];
    $sql     = "SELECT * FROM tin_xahoi WHERE id='$id'";
    $ket_qua = $connect->query($sql);

    while ($row = $ket_qua->fetch_array(MYSQLI_ASSOC)) {
        $title       = $row['title'];
        $date        = $row['date'];
        $description = $row['description'];
        $content     = $row['content'];
?>

<!-- Truyền dữ liệu vào form. -->
<form action="process.php" method="post">
    <table>
        <tr>
            <th>ID:</th>
            <td>
                <input type="hidden" name="id" value="<?php echo $id; ?>">
                <?php echo $id; ?>
            </td>
        </tr>
        <tr>
            <th>Tiêu đề:</th>
            <td><input type="text" name="title" value="<?php echo $title; ?>"></td>
        </tr>

        <tr>
            <th>Ngày tháng:</th>
            <td><input type="date" name="date" value="<?php echo $date; ?>"></td>
        </tr>

        <tr>
            <th>Mô tả:</th>
            <td><input type="text" name="description" value="<?php echo $description; ?>"></td>
        </tr>

        <tr>
            <th>Nội dung:</th>
            <td><textarea cols="30" rows="7" name="content"><?php echo $content; ?></textarea></td>
        </tr>
    </table>
    <button type="submit">Gửi</button>
</form>

<?php 
    } //Đóng vòng lặp while.
} //Đóng câu lệnh if.

//Đóng kết nối database tintuc
$connect->close();
?>

MySQL form update

Ở hàng ID có 2 dữ liệu, 1 dùng để hiện thị để xem, 1 dùng để gửi sang trang xử lý, để dạng ẩn. Tới đây ta đã xong phần truyền tham số vào form.

Xử lý tham số truyền từ trang view.php - Kiểu thủ tục

<?php
$username = "user_tintuc"; // Khai báo username
$password = "123456";      // Khai báo password
$server   = "localhost";   // Khai báo server
$dbname   = "tintuc";      // Khai báo database

// Kết nối database tintuc
$connect = mysqli_connect($server, $username, $password, $dbname);

//Nếu kết nối bị lỗi thì xuất báo lỗi và thoát.
if (!$connect) {
    die("Không kết nối :" . mysqli_connect_error());
    exit();
}

//Lấy dữ liệu từ view.php bằng phương thức GET.
if(isset($_GET['id'])){ 
    $id = $_GET['id'];
    $sql     = "SELECT * FROM tin_xahoi WHERE id='$id'";
    $ket_qua = mysqli_query($connect,$sql);

    while ($row = mysqli_fetch_array($ket_qua)) {
        $title       = $row['title'];
        $date        = $row['date'];
        $description = $row['description'];
        $content     = $row['content'];
?>

<!-- Truyền dữ liệu vào form. -->
<form action="process.php" method="post">
    <table>
        <tr>
            <th>ID:</th>
            <td>
                <input type="hidden" name="id" value="<?php echo $id; ?>">
                <?php echo $id; ?>
            </td>
        </tr>
        <tr>
            <th>Tiêu đề:</th>
            <td><input type="text" name="title" value="<?php echo $title; ?>"></td>
        </tr>

        <tr>
            <th>Ngày tháng:</th>
            <td><input type="date" name="date" value="<?php echo $date; ?>"></td>
        </tr>

        <tr>
            <th>Mô tả:</th>
            <td><input type="text" name="description" value="<?php echo $description; ?>"></td>
        </tr>

        <tr>
            <th>Nội dung:</th>
            <td><textarea cols="30" rows="7" name="content"><?php echo $content; ?></textarea></td>
        </tr>
    </table>
    <button type="submit">Gửi</button>
</form>

<?php 
    } //Đóng vòng lặp while.
} //Đóng câu lệnh if.

//Đóng kết nối database tintuc
$connect->close();
?>

MySQL form update

Trang xử lý process.php

  • Nội dung trang này là nhận dữ liệu được submit từ trang update.php, sau đó xử lý cập nhật dữ liệu vào database, trả kết quả về cho trang view.php nếu thành công, hoặc về update.php nếu xảy ra lỗi.

Kiểu hướng đối tượng

<?php
$username = "user_tintuc"; // Khai báo username
$password = "123456";      // Khai báo password
$server   = "localhost";   // Khai báo server
$dbname   = "tintuc";      // Khai báo database

// Kết nối database tintuc
$connect = new mysqli($server, $username, $password, $dbname);

//Nếu kết nối bị lỗi thì xuất báo lỗi và thoát.
if ($connect->connect_error) {
    die("Không kết nối :" . $connect->connect_error);
    exit();
}

$id          = $_POST['id'];
$title       = $_POST['title'];
$description = $_POST['description'];
$content     = $_POST['content'];

//Code xử lý, update dữ liệu vào table dựa theo điều kiện WHERE tại id = 1
$sql = "UPDATE tin_xahoi SET title='$title', description='$description', content='$content' WHERE id=$id";


if ($connect->query($sql) === TRUE) {
    //Nếu kết quả kết nối thành công, trở về trang view.
    header('Location: view.php');
} else {
    //Nếu kết quả kết nối không được thì trở về update.php đồng thời gán giá trị error=1, dựa theo giá trị này trang update.php có thể thông báo lỗi cần thiết.
    header('Location: update.php?error=1');
}

//Đóng kết nối database tintuc
$connect->close();

Kiểu thủ tục

<?php
$username = "user_tintuc"; // Khai báo username
$password = "123456";      // Khai báo password
$server   = "localhost";   // Khai báo server
$dbname   = "tintuc";      // Khai báo database

// Kết nối database tintuc
$connect = mysqli_connect($server, $username, $password, $dbname);

//Nếu kết nối bị lỗi thì xuất báo lỗi và thoát.
if (!$connect) {
    die("Không kết nối :" . mysqli_connect_error());
    exit();
}

$id          = $_POST['id'];
$title       = $_POST['title'];
$description = $_POST['description'];
$content     = $_POST['content'];

//Code xử lý, update dữ liệu vào table dựa theo điều kiện WHERE tại id = 1
$sql = "UPDATE tin_xahoi SET title='$title', description='$description', content='$content' WHERE id=$id";


if (mysqli_query($connect, $sql)) {
    //Nếu kết quả kết nối thành công, trở về trang view.
    header('Location: view.php');
} else {
    //Nếu kết quả kết nối không được thì trở về update.php đồng thời gán giá trị error=1, dựa theo giá trị này trang update.php có thể thông báo lỗi cần thiết.
    header('Location: update.php?error=1');
}

//Đóng kết nối database tintuc
mysqli_close($connect);

Download file ví dụ

Trong file download đã có sẵn file tintuc.sql, file này là file dữ liệu mẫu, sau khi đã tạo database chúng ta có thể đưa dữ liệu từ file tintuc.sql bằng thao tác import có trong phpMyAdmin.

THÔNG BÁO LỖI