การสร้าง Webboard ด้วย PHP MySQL ตอนที่ 5 แสดงกระทู้,ตั้งกระทู้,ตอบกระทู้
หลังจากที่เราได้หน้าโฮมเพจมาแล้ว จากที่ได้สอนในบทความก่อนหน้า (สอนทำ Webboard ด้วย PHP MySQL ตอนที่ 4 เพิ่ม/แสดง/ลบ/แก้ไข หมวดกระทู้ และแสดงหมวดกระทู้ในหน้าโฮมเพจ ) ต่อไปจะเป็นส่วนหน้าแสดงกระทู้ต่อจากหน้าหลักที่แสดงหมวดของกระทู้ก่อน ซึ่งหน้าแสดงกระทู้จะแสดงกระทู้ในหมวดนั้นๆที่เราคลิกเลือกจากหน้าหลักครับ จากนั้นในหน้าแสดงกระทู้ สามารถให้สมาชิกเข้าไปตั้งกระทู้หรือตอบกระทู้ได้ สำหรับบุคคลทั่วไป สามารถเข้ามาอ่านเนื้อหาของกระทู้ได้เท่านั้น
สำหรับไฟล์ที่ใช้ในบทความนี้ จะมีอยู่ 3 ไฟล์ คือ showboard.php (แสดงกระทู้จากหมวดกระทู้ที่เลือกจากเว็บหลัก (Home Page)) , board_add.php (ตั้งกระทู้) , viewboard.php (แสดงเนื้อหากระทู้ และสามารถแสดงความคิดเห็น(ตอบกระทู้)ได้จากหน้านี้)
1.เริ่มที่ไฟล์ showboard .php (แสดงกระทู้) กันก่อนครับ เราจะใช้คำสั่งดังนี้
เมื่อรันไฟล์ขึ้นมา โดยจะต้องคลิกเลือกหมวดกระทู้ หมวดใดหมวดหนึ่ง จากหน้าหลักก่อนนะครับ จึงจะได้ผลลัพธุ์ดังนี้
2.ไฟล์ board_add.php (ตั้งกระทู้) เป็นหน้าที่ต่อจากหน้าแสดงกระทู้ showboard.php ครับ สมาชิกเท่านั้นที่สามารถตั้งกระทู้ได้ เราจะใช้คำสั่งดังนี้
ถ้าจะให้ไฟล์นี้ทำงาน จะต้องล็อกอินเข้าสู่ระบบก่อนครับ แล้วไปที่หน้าหลัก (Home Page) คลิกเลือกหมวดกระทู้หมวดใดหมวดหนึ่ง แล้วจะโชว์ลิงค์ชื่อว่า ตั้งกระทู้ ขึ้นมา ให้คลิกที่ลิงค์ตั้งกระทู้ จะได้ผลลัพธุ์ ดังนี้
3.ไฟล์ viewboard.php สำหรับแสดงเนื้อหากระทู้ และแสดงความคิดเห็น (ตอบกระทู้) ให้ใช้คำสั่งดังนี้
ไฟล์นี้จะได้ผลลัพธุ์ดังนี้
ปล.ถ้าไม่ได้เข้าสู่ระบบ (Log In) ช่องแสดงความคิดเห็นจะถูกซ่อนไว้ ที่แสดงเพราะว่าผมได้Login เข้าไปนั่นเองครับ
บทความหน้าจะสอนเก็บรายละเอียดอีกเล็กน้อย เป็นบทความสุดท้าย ผมจะสอนเรื่องของ การแก้ไขกระทู้ของสมาชิก/Admin , แก้ไขความคิดเห็นของสมาชิก/Admin , ลบกระทู้ของสมาชิก/Admin , ลบความคิดเห็นของสมาชิก/Admin
สำหรับไฟล์ที่ใช้ในบทความนี้ จะมีอยู่ 3 ไฟล์ คือ showboard.php (แสดงกระทู้จากหมวดกระทู้ที่เลือกจากเว็บหลัก (Home Page)) , board_add.php (ตั้งกระทู้) , viewboard.php (แสดงเนื้อหากระทู้ และสามารถแสดงความคิดเห็น(ตอบกระทู้)ได้จากหน้านี้)
1.เริ่มที่ไฟล์ showboard .php (แสดงกระทู้) กันก่อนครับ เราจะใช้คำสั่งดังนี้
<?php
session_start();
require('bin/connectdb.php');
$show_board = '';
$chk_rows_board = 0;
$rs_board = '';
if (!empty($_GET['id'])) {
$rs_cg = mysql_query('SELECT cg_name FROM tbl_category WHERE cg_id=' . $_GET['id']); //นั
$show_board = mysql_fetch_assoc($rs_cg); //นับจำนวนแถวของหมวดกระทู้
if (!empty($show_board['cg_name'])) {//ถ้าชื่อหมวดไม่เป็นค่าว่างแสดงว่ามีหมวดนี้อยู่ในฐานข้อมูลจริงๆ
// Join 2 เทเบิล tbl_board และ tbl_member เพื่อดึงค่าของกระทู้,ข้อมูลของสมาชิกมาแสดง
//โดยเรียงตามข้อมูลของกระทู้ที่อัพเดทล่าสุด (board_time_update)
$rs_board = mysql_query("SELECT b.board_id,b.board_topic,b.board_views,b.board_replies,m.mem_name
FROM tbl_board As b LEFT JOIN tbl_member As m ON b.mem_id=m.mem_id
WHERE b.cg_id='" . $_GET['id'] . "' AND b.board_parent_id=0
ORDER BY b.board_time_update DESC");
$chk_rows_board = mysql_num_rows($rs_board); //นับจำนวนแถวของกระทู้
} else {//ถ้าเป็นค่าว่าง แสดงว่าไม่มีหมวดนี้อยู่ในฐานข้อมูล ให้Redirectไปหน้า index.php
header('Location:index.php');
}
} else {//ไม่พบพารามิเตอร์ $_GET['id'] .ให้กลับไปหน้าแรก
header('Location:index.php');
exit();
}
?>
<html>
<head>
<?php require('head.php'); ?>
<title><?php echo $show_board['cg_name']; ?></title>
</head>
<body>
<?php require('menu.php'); ?>
<div class="container">
<?php require('header.php'); ?>
<div class="row ws-content">
<ol class="breadcrumb">
<li><a href="index.php">Home</a></li>
<li class="active"><?php echo $show_board['cg_name']; ?></li>
</ol>
<h1><?php echo $show_board['cg_name']; ?></h1>
<table class="table table-bordered table-hover">
<thead>
<?php if (!empty($_SESSION['mem_id'])) { ?>
<tr>
<th colspan="3"><span class="btn btn-default" ><a href="board_add.php?id=<?php echo $_GET['id'] ?>">ตั้งกระทู้</a></span></th>
</tr>
<?php } ?>
<tr>
<th>หัวข้อกระทู้</th><th class="hidden-xs">ความคิดเห็น</th><th class="hidden-xs">เข้าชม</th></tr>
</thead>
<tbody>
<?php
if ($chk_rows_board > 0) {//จำนวนแถวมากกว่า 0 แสดงว่ามีข้อมูล
while ($show_board = mysql_fetch_assoc($rs_board)) {
$board_id = $show_board['board_id'];
$mem_name = $show_board['mem_name'];
$board_topic = $show_board['board_topic'];
$board_views = $show_board['board_views'];
$board_replies = $show_board['board_replies'];
?>
<tr>
<td style="width:80%">
<a href="viewboard.php?id=<?php echo $board_id; ?>"><?php echo $board_topic; ?></a>
<br />โพสโดย : <?php echo $mem_name; ?>
</td>
<td style="width:10%" class="hidden-xs"><?php echo $board_replies; ?></td>
<td style="width:10%" class="hidden-xs"><?php echo $board_views; ?></td>
</tr>
<?php
}
} else { //ไม่มีข้อมูลหมวดกระทู้
?>
<tr>
<td colspan="3" align="center"><strong>ไม่พบกระทู้</strong></td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<?php require('footer.php'); ?>
</div>
</body>
</html>
เมื่อรันไฟล์ขึ้นมา โดยจะต้องคลิกเลือกหมวดกระทู้ หมวดใดหมวดหนึ่ง จากหน้าหลักก่อนนะครับ จึงจะได้ผลลัพธุ์ดังนี้
2.ไฟล์ board_add.php (ตั้งกระทู้) เป็นหน้าที่ต่อจากหน้าแสดงกระทู้ showboard.php ครับ สมาชิกเท่านั้นที่สามารถตั้งกระทู้ได้ เราจะใช้คำสั่งดังนี้
<?php
session_start();
if (empty($_SESSION['mem_id'])) {//ไม่พบค่าเซสชั่น mem_id แสดงว่าไม่ใช่สมาชิก จึงไม่สามารถตั้งกระทู้ได้
header('Location:index.php');
}
require('bin/connectdb.php'); //เรียกไฟล์เชื่อมต่อกับฐานข้อมูล
if (!empty($_POST['btSave'])) {//มีการคลิกที่ปุ่มบันทึกตั้งกระทู้
$msgError = '';
if (!empty($_POST['board_topic']) || !empty($_POST['board_detail'])) {
$cg_id = $_GET['id']; //รหัสหมวดกระทู้
$board_topic = trim($_POST['board_topic']); //หัวข้อกระทู้
$board_detail = nl2br($_POST['board_detail']); //รายละเอียดกระทู้
mysql_query("INSERT INTO tbl_board(cg_id,board_topic,board_detail,board_time_add,board_time_update,mem_id)
VALUES($cg_id,'$board_topic','$board_detail',SYSDATE(),SYSDATE()," . $_SESSION['mem_id'] . ")") or die(mysql_error());
mysql_query("UPDATE tbl_category SET cg_topic_totals=cg_topic_totals+1 WHERE cg_id=$cg_id");
header("Location:showboard.php?id=" . $_GET['id'] . '¬view=1');
} else {
$msgError.='กรุณากรอกหัวข้อกระทู้และรายละเอียดของกระทู้ด้วย<br />';
}
if (empty($msgError)) {
//หากสมาชิกพิมพ์ข้อมูลถูกต้อง ให้Redirect หน้าไปที่ไฟล์ category.php
header("Location:showboard.php?id=" . $_GET['id']);
} else {
//หากกรอกข้อมูลไม่ถูกต้อง ให้สร้างตัวแปร session มารับค่าเพื่อแจ้งให้ทราบถึงปัญหาที่เกิดขึ้น
$_SESSION['message_error'] = $msgError;
}
}
$show_board = '';
if (!empty($_GET['id'])) {
$rs_cg = mysql_query('SELECT cg_name,cg_id FROM tbl_category WHERE cg_id=' . $_GET['id']);
$show_board = mysql_fetch_assoc($rs_cg); //นับจำนวนแถวของหมวดกระทู้
if (empty($show_board['cg_name'])) {
header('Location:index.php');
}
} else {//ไม่พบพารามิเตอร์ $_GET['id'] .ให้กลับไปหน้าแรก
header('Location:index.php');
}
?>
<html>
<head>
<?php require('head.php'); ?>
<link rel="stylesheet" type="text/css" href="btvalidate/dist/css/bootstrapValidator.min.css"/>
<script type="text/javascript" src="btvalidate/dist/js/bootstrapValidator.min.js"></script>
<title>ตั้งกระทู้ห้อง <?php echo $show_board['cg_name']; ?></title>
</head>
<body>
<?php require('menu.php'); ?>
<div class="container">
<?php require('header.php'); ?>
<div class="row ws-content">
<ol class="breadcrumb">
<li><a href="index.php">Home</a></li>
<li><a href="showboard.php?id=<?php echo $show_board['cg_id']; ?>"><?php echo $show_board['cg_name']; ?></a></li>
<li class="active">ตั้งกระทู้</li>
</ol>
<div class="col-md-7 col-sm-7 col-md-offset-2 col-sm-offset-2">
<h1>ตั้งกระทู้</h1>
<?php
if (!empty($_SESSION['message_error'])) {
//แสดงปัญที่เกิดขึ้นจากการไม่กรอกชื่อหมวดกระทู้
?>
<div class="alert alert-danger" role="alert">
<?php echo $_SESSION['message_error']; ?>
</div>
<?php
$_SESSION['message_error'] = '';
}
?>
<form method="post" enctype="multipart/form-data" id="boardForm" name="boardForm" action="">
<div class="form-group">
<label for="Category Name">หัวข้อกระทู้</label>
<input type="text" class="form-control" id="board_topic" name="board_topic" placeholder="หัวข้อกระทู้">
</div>
<div class="form-group">
<label for="Category Description">รายละเอียด</label>
<textarea class="form-control" id="board_detail" name="board_detail" placeholder="รายละเอียดของกระทู้" rows="10"></textarea>
</div>
<div class="form-group">
ตั้งกระทู้โดย : <b><?php echo $_SESSION['mem_name']; ?></b>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" name="btSave" value="บันทึกตั้งกระทู้" >
</div>
</form>
</div>
</div>
<?php require('footer.php'); ?>
</div>
<script>
$(document).ready(function() {
$('#boardForm').bootstrapValidator({
feedbackIcons: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
board_topic: {
validators: {
notEmpty: {
message: 'กรุณากรอก หัวข้อกระทู้ ด้วย'
}
}
},
board_detail: {
validators: {
notEmpty: {
message: 'กรุณากรอก รายละเอียดของกระทู้ ด้วย'
}
}
}
}
});
});
</script>
</body>
</html>
ถ้าจะให้ไฟล์นี้ทำงาน จะต้องล็อกอินเข้าสู่ระบบก่อนครับ แล้วไปที่หน้าหลัก (Home Page) คลิกเลือกหมวดกระทู้หมวดใดหมวดหนึ่ง แล้วจะโชว์ลิงค์ชื่อว่า ตั้งกระทู้ ขึ้นมา ให้คลิกที่ลิงค์ตั้งกระทู้ จะได้ผลลัพธุ์ ดังนี้
3.ไฟล์ viewboard.php สำหรับแสดงเนื้อหากระทู้ และแสดงความคิดเห็น (ตอบกระทู้) ให้ใช้คำสั่งดังนี้
<?php
session_start();
require('bin/connectdb.php'); //เรียกไฟล์เชื่อมต่อกับฐานข้อมูล
$show_topic_view = '';
$rs_board = '';
if (isset($_POST['btSaveRep'])) {//มีการคลิกที่ปุ่ม แสดงความคิดเห็น
if (empty($_SESSION['mem_id'])) {//ถ้าไม่ใช่สมาชิก
header('Location:index.php'); //ให้กลับไปหน้าหลัก
exit(); //หยุดทำงานถึงบรรทัดตรงนี้
}
$id = $_GET['id'];
$mem_id = $_SESSION['mem_id'];
if (!empty($_POST['board_detail'])) {
$boardDetail = $_POST['board_detail'];
mysql_query("INSERT tbl_board(board_parent_id,mem_id,board_detail,board_time_add)
VALUES($id,$mem_id,'$boardDetail',SYSDATE()) ");
mysql_query('UPDATE tbl_board As b LEFT JOIN tbl_category As c ON b.cg_id=c.cg_id
SET b.board_replies=b.board_replies+1,c.cg_replie_totals=c.cg_replie_totals+1,b.board_time_update=SYSDATE()
WHERE b.board_id=' . $id); //Update จำนวนความคิดเห็นในกระทู้นั้นๆ
}
header('Location:viewboard.php?id=' . $id);
exit();
}
if (isset($_GET['id'])) {//พบว่ามีส่งเมธอดชื่อ id เข้ามา
$rs_topic_view = mysql_query('SELECT b.board_id,b.board_topic,b.board_detail,b.board_time_add,c.cg_id,c.cg_name
FROM tbl_board As b
LEFT JOIN tbl_category As c ON b.cg_id=c.cg_id
WHERE b.board_id=' . $_GET['id']);
$show_topic_view = mysql_fetch_assoc($rs_topic_view);
if (empty($show_topic_view['board_id'])) {//ฟิลด์ board_id เป็นค่าว่างแสดงว่าไม่มีกระทู้นี้อยู่ในฐานข้อมูล
header('Location:index.php'); //ให้กลับไปหน้าหลัก
} else {
//mysql_query('UPDATE tbl_board SET board_views=board_views+1 WHERE board_id='.$_GET['id']); //Update จำนวนผู้เข้าชมของกระทู้นั้น
}
} else {//ไม่พบค่า id ที่ส่งมา
header('Location:index.php'); //กลับไปหน้าหลัก
}
?>
<html>
<head>
<?php require('head.php'); ?>
<link rel="stylesheet" type="text/css" href="btvalidate/dist/css/bootstrapValidator.min.css"/>
<script type="text/javascript" src="btvalidate/dist/js/bootstrapValidator.min.js"></script>
<title><?php echo $show_topic_view['board_topic']; ?></title>
</head>
<body>
<?php require('menu.php'); ?>
<div class="container">
<?php require('header.php'); ?>
<div class="row ws-content">
<ol class="breadcrumb">
<li><a href="index.php">Home</a></li>
<li><a href="showboard.php?id=<?php echo $show_topic_view['cg_id']; ?>"><?php echo $show_topic_view['cg_name']; ?></a></li>
<li class="active"><?php echo $show_topic_view['board_topic']; ?></li>
</ol>
<div>
<h1><?php echo $show_topic_view['board_topic']; ?></h1>
<?php
$rs_board = mysql_query('SELECT b.board_id,b.board_topic,b.board_detail,b.board_time_add,c.cg_id,c.cg_name,m.mem_name,m.mem_image
FROM tbl_board As b
LEFT JOIN tbl_category As c ON b.cg_id=c.cg_id
LEFT JOIN tbl_member As m ON b.mem_id=m.mem_id
WHERE b.board_id=' . $_GET['id'] . ' OR b.board_parent_id=' . $_GET['id'] . ' ORDER BY b.board_time_add ASC');
while ($show_board = mysql_fetch_assoc($rs_board)) {
?>
<div class="panel panel-default">
<div class="panel-heading">
<div style="display:table-cell;padding-right:5px;" class="hidden-xs">
<?php
$userIcon = 'usericon.jpg';
if (!empty($show_board['mem_image']))
$userIcon = $show_board['mem_image'];
?>
<img src="images/member/<?php echo $userIcon; ?>" width="50" height="50">
</div>
<div style="display:table-cell;vertical-align:top;width:100%;">
<div style="text-align:right;color:#C8C8C8;border-bottom:1px dashed #C8C8C8;padding-bottom:4px;">
By : <span style="color:#060"><?php echo $show_board['mem_name'] ?></span>
Date : <?php echo $show_board['board_time_add']; ?> </div>
<div style="padding-top:4px;">
<?php echo $show_board['board_detail']; ?>
</div>
</div>
</div>
</div>
<?php } ?>
<?php if (!empty($_SESSION['mem_name'])) { ?>
<div class="col-md-7 col-sm-7 col-md-offset-2 col-sm-offset-2">
<h4>แสดงความคิดเห็น</h4>
<form method="post" enctype="multipart/form-data" id="boardReplieForm" name="boardReplieForm" action="">
<div class="form-group">
<label for="Category Description">รายละเอียด</label>
<textarea class="form-control" id="board_detail" name="board_detail" placeholder="ใส่ความคิดเห็นตรงนี้" rows="10"></textarea>
</div>
<div class="form-group">
แสดงความคิดเห็นโดย : <span style="color:#963"><?php echo $_SESSION['mem_name']; ?></span>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" name="btSaveRep" value="แสดงความคิดเห็น" >
</div>
</form>
</div>
<?php } ?>
</div>
</div>
<?php require('footer.php'); ?>
</div>
<script>
$(document).ready(function() {
$('#boardReplieForm').bootstrapValidator({//ตรวจสอบการกรอกแสดงความคิดเห็น
feedbackIcons: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
board_detail: {
validators: {
notEmpty: {
message: 'กรุณากรอกข้อความด้วย'
}
}
}
}
});
});
</script>
</body>
</html>
ไฟล์นี้จะได้ผลลัพธุ์ดังนี้
ปล.ถ้าไม่ได้เข้าสู่ระบบ (Log In) ช่องแสดงความคิดเห็นจะถูกซ่อนไว้ ที่แสดงเพราะว่าผมได้Login เข้าไปนั่นเองครับ
บทความหน้าจะสอนเก็บรายละเอียดอีกเล็กน้อย เป็นบทความสุดท้าย ผมจะสอนเรื่องของ การแก้ไขกระทู้ของสมาชิก/Admin , แก้ไขความคิดเห็นของสมาชิก/Admin , ลบกระทู้ของสมาชิก/Admin , ลบความคิดเห็นของสมาชิก/Admin




เออเรอเยอะมากคับ มีไฟร์ให้ดาวโหลดไหมคับ
ตอบลบตั้งแต่ ตอนที่ 1 เลยคับ
ลบถึงหน้า board_add.php (ตั้งกระทู้) แล้วมันเด้งไปยัง user คนแรกตลอดเลยครับ มันไม่จำ session
ตอบลบ