MySQL form update
- 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
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
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 đề
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
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
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 đề
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>
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(); ?>
Ở 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(); ?>
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);
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.