Sau khi đã tạo xong trang hiển thị danh sách bài viết, thì trong bài này mình sẽ tiếp tục hướng dẫn các bạn cách tạo trang hiển thị nội dung bài viết bằng PHP. Các bạn lưu ý là những bài viết của mình thường ít chú tâm đến công đoạn chỉnh sửa, styling cho website đẹp bắt mắt bằng HTML, CSS vì những điều này bạn có thể chỉnh sau khi đã nắm được cách thức tạo website bằng PHP thông qua các bài viết của mình. Vì thế giao diện có xấu xí thì các bạn cũng bỏ qua 🙂
TẠO TRANG HIỂN THỊ NỘI DUNG BÀI VIẾT
Nội dung của chính của bài hướng dẫn hôm nay bao gồm 3 phần:
- Ôn lại bài cũ
- Thiết kế giao diện trang hiển thị nội dung bài viết
- Thực hiện truy vấn thông tin và hiển thị nội dung bài viết
Ôn lại bài cũ
Ở bài hôm trước Tạo trang hiển thị danh sách bài viết, chúng ta đã hoàn thành cơ bản phần hiển thị danh sách bài viết lấy từ cơ sở dữ liệu ra ngoài trang index, và ở dưới mỗi bài hiển thị, chúng ta có thêm đường link là Xem thêm, để khi người ta ấn vào sẽ nhảy sang trang display.php với tham số truyền vào là id của bài viết.
Trong bài viết hôm nay thì chúng ta sẽ tạo trang display.php và hứng tham số id truyền vào này để thực hiện truy vấn thông tin và hiển thị nội dung bài viết.
Thiết kế giao diện trang hiển thị nội dung bài viết
Tại thư mục gốc của folder website mà chúng ta đã tạo ra trong các bài trước, các bạn tạo một file mới và đặt tên là display.php như hình sau
Ở file này, chúng ta sẽ có nội dung như sau :
<?php require_once("includes/connection.php"); ?> <?php include "includes/header.php" ?> <div class="innertube"> </div> </main> <?php include "includes/menu.php" ?> <?php include "includes/footer.php" ?>
Các bạn để ý, ở file display.php này so với file index.php sẽ có sự khác nhau nhỏ nhỏ ở đoạn
<?php include "includes/menu.php" ?>
Đó chính là mình đã copy toàn bộ đoạn code html tĩnh là
<nav> <div class="innertube"> <h3>Right heading</h3> <ul> <li><a href="#">Link 1</a></li> <li><a href="#">Link 2</a></li> <li><a href="#">Link 3</a></li> <li><a href="#">Link 4</a></li> <li><a href="#">Link 5</a></li> </ul> <h3>Right heading</h3> <ul> <li><a href="#">Link 1</a></li> <li><a href="#">Link 2</a></li> <li><a href="#">Link 3</a></li> <li><a href="#">Link 4</a></li> <li><a href="#">Link 5</a></li> </ul> <h3>Right heading</h3> <ul> <li><a href="#">Link 1</a></li> <li><a href="#">Link 2</a></li> <li><a href="#">Link 3</a></li> <li><a href="#">Link 4</a></li> <li><a href="#">Link 5</a></li> </ul> </div> </nav>
bỏ vào file includes/menu.php, sau đó trong file display.php mình chỉ include file menu này vào để nhìn cho code gọn hơn, đỡ rồi rắm chứ không có gì phức tạp cả.
Giờ thì các bạn vào trang index.php và ấn vào link Xem thêm. Các bạn sẽ thấy hiện thị ra trang display.php trống trơn, đó là bởi vì chúng ta chỉ mới tạo giao diện chứ chưa thực hiện truy vấn lấy thông tin bài viết gì cả.
Thực hiện truy vấn thông tin và hiển thị nội dung bài viết
Phần này mình sẽ hướng dẫn các bạn thực hiện hiển thị nội dung bài viết chi tiết như sau.
Đầu tiên các bạn để ý rằng khi chúng ta ấn vào link Xem thêm, ta sẽ được điều hướng tới trang display.php với địa chỉ url có nội dung như sau
Gợi ý : Bạn là người mới và muốn tìm hiểu về Bitcoin nhưng không biết bắt đầu từ đâu? Click xem ngay Hướng Dẫn Đầu Tư Bitcoin Cho Người Mới nhé!
localhost/website/display.php?id=xxx
Ở đây, xxx chính là tham số id của bài viết mà chúng ta đã truyền vào ở bài viết trước. Bây giờ chúng ta sẽ thực hiện thấy biến này bằng phương thức GET như sau
$id = intval($_GET['id']);
Sau khi đã lấy được tham số id bài viết, thì ta sẽ thực hiện viết câu query truy vấn thông tin nội dung bài viết từ cơ sở dũ liệu thông qua tham số id này.
// Lấy ra nội dung bài viết theo điều kiện id $sql = "select * from posts where id = $id"; // Thực hiện truy vấn data thông qua hàm mysqli_query $query = mysqli_query($conn,$sql);
Sau khi đã thực thi câu query và lấy dữ liệu trả về, ta sẽ tiếp tục hiển thị dữ liệu này ra trang display.php như sau
<div class="innertube"> <?php while ( $data = mysqli_fetch_array($query) ) { ?> <h3><?php echo $data['title']; ?></h3></div></ br> <i> Ngày tạo : <?php echo $data['createdate']; ?></i> <p><?php echo $data['content']; ?></p> <?php } ?> </div>
Ở đoạn code trên, chúng ta sẽ echo ra các thông tin bao gồm tiêu đề bài viết (title), ngày tạo bài viết (createdae), và nội dung chính của bài viết (content)
Như vậy, toàn bộ nội dung của trang hiển thị nội dung bài viết sẽ như dưới đây:
<?php require_once("includes/connection.php"); ?> <?php include "includes/header.php" ?> <?php $id = -1; if (isset($_GET["id"])) { $id = intval($_GET['id']); } // Lấy ra nội dung bài viết theo điều kiện id $sql = "select * from posts where id = $id"; // Thực hiện truy vấn data thông qua hàm mysqli_query $query = mysqli_query($conn,$sql); ?> <div class="innertube"> <?php while ( $data = mysqli_fetch_array($query) ) { ?> <h3><?php echo $data['title']; ?></h3></div></ br> <i> Ngày tạo : <?php echo $data['createdate']; ?></i> <p><?php echo $data['content']; ?></p> <?php } ?> </div> </main> <?php include "includes/menu.php" ?> <?php include "includes/footer.php" ?>
Giờ thì các bạn vào lại trang index.php và ấn vào link Xem thêm của một bài viết bất kì, sẽ được chuyển hướng sang trang display.php và hiển thị toàn bộ thông tin đầy đủ của bài viết đó như dưới đây
Tổng kết
Kết thúc bài viết hôm nay, tuy khá dài nhưng bản chất rất đơn giản, chỉ là chúng ta lấy tham số id truyền trên thanh địa chỉ của browser qua phương thức $_GET, sau đó thực hiện truy vấn và hiển thị dữ liệu thông qua tham số id này.
Nếu bạn có bất kỳ thắc mắc nào thì để lại bình luận bên dưới bài này nhé. Nếu bạn muốn cập nhật những bài viết mới nhất từ Kungfu PHP thì để lại thông tin dưới form này và ấn Đăng ký nhé.

Nhìn avatar mình như hoạt hình trẻ trâu phải không? Lại còn không để ảnh đại diện thật nữa chứ? À, thật ra thì mình chỉ muốn các bạn tập trung vào nội dung, giá trị mình chia sẻ, chứ mình không thích mặc vest này nọ rồi để avatar xịn xò để thu hút bằng vẻ chuyên nghiệp đâu. Thông cảm cho mình nhé 😀
Uncaught TypeError: mysqli_fetch_array(): Argument #1 ($result) must be of type mysqli_result, bool given in E:\website\index.php:16 Stack trace: #0 E:\website\index.php(16): mysqli_fetch_array(false) #1 {main} thrown in E:\website\index.php on line 16 lỗi này là sao v admin
a cho e hỏi làm sao mà ngắt dòng, chèn thêm ảnh và bôi đen cho cho 1 dòng chữ bất kì trong nội dung chính ạ?
cái này chủ yếu là css e, ngắt dòng thì e có thể dùng thẻ
, … e coi thêm về css và html những cái này đều có trên internet
, còn chèn thêm ảnh thì dùng thẻ
Anh ơi cột id em không để tăng tự động mà có dạng “SP001” thì phải làm sao ạ. Hình như hướng dẫn này chỉ áp dụng cho dữ liệu số :((
Anh ơi cột id em không để tăng tự động mà có dạng “SP001” thì phải làm sao ạ. Hình như hướng dẫn này chỉ áp dụng cho dữ liệu số :((
Update: Em sửa được rồi. Ở dòng $sql bỏ $ trong cặp dấu ‘ là xong. Cho ai gặp giống em.
ad ơi tạo bài chỉnh sửa thông tin bài viết thêm đi. Thanks ad
có rồi nhé, bạn xem tất cả bài viết ở đây : https://kungfuphp.com/tag/tao-trang-web-php
a có bài nào hướng dẫn up sách dạng file tải lên và xem dạng pdf có nút tải về cho người dùng không ạ em cảm ơn
upload file trong PHP thì e có thể xem bài này : https://kungfuphp.com/tong-hop-php/tao-form-upload-file-trong-php.html
Còn sau khi upload mà e muốn xem file đó trên trình duyệt có nút tải thì đơn giản e chỉ cần sử dụng đoạn code này
header(“Content-type: application/pdf”);
header(“Content-Disposition: inline; filename=filename.pdf”);
@readfile(‘tham số là đường dẫn tới file pdf’);
$id = -1;
Cho $id = -1; là sao vậy Admin
Id = -1 tức là ko tồn tại id bài viết nào. Vì id nhỏ nhất là 0 rồi
Bài viết của anh hay quá, rất hiểu và làm theo… chúc anh luôn khỏe, tiếp tục có những bài viết hay phục vụ cộng đồng thiết kế web.
Mình cũng thống nhất với admin, là tập trung vào code PHP , Mysql… chứ không cần thiết tập trung quá nhiều về giao diện của web, có thể để chỉnh sửa sau, sau khi đã nắm vững PHP
Cám ơn những lời chúc cùa em nhé, a cũng chúc gặt hái nhiều thành công nhé
e code theo như a mà soa nó không hiển thị nội dung lên v a???
giống như bạn vẫn k hiện gì ra cả
localhost/website/display.php?id=xxx
bạn nên thêm bài viết vào cơ sở dữ liệu.
và thay xxx bằng id bài viết đó thì sẽ ra được ak
Anh cho em hỏi sao em chèn ảnh vào bài viết lúc hiển thị lại k có ảnh ạ
Lúc e lưu hình ảnh thì e lưu đường dẫn tới thự mục hình ảnh, còn khi muốn hiển thị lên thì phải để đường dẫn đó trong thuộc tính src của thẻ img nó mới hiển thị nhé
Em chèn ảnh vào mục thêm bài viết ,lúc hiển thị nội dung thì k có ảnh
e xem thử nội dung lúc hiển thị ra là gì, có thẻ img trong đó hay ko, nếu ko có thì e kiểm trả lại lúc lưu xuống nó có lưu được thẻ img vào database ko, từ đó kiểm tra lỗi từ từ
nó ra ntn trên database anh ak
a cho e hỏi là làm sao để cho tên từ trong dữ liệu users vào
$query = mysqli_query($conn,$sql);
?>
Ngày tạo :
Ngoài pưhương thức $_GET ra thì còn dùng phương thức nào tốt hơn nữa không anh.
Em có thể sử dụng phương thức POST nhé, tuy nhiên đa phần thì hiển thị thông tin thì dùng phương thức GET là tối ưu rồi nhé
Thân ái !
ok thank anh.
Em đang làm web tới phần hiển thị dữ liệu mà không biết làm kiểu gì ngoài lấy thông tin từ URl thì gặp bài của anh.