วันอังคารที่ 12 สิงหาคม พ.ศ. 2557

การสร้าง Webboard ด้วย PHP MySQL ตอนที่ 5 แสดงกระทู้,ตั้งกระทู้,ตอบกระทู้

 
     หลังจากที่เราได้หน้าโฮมเพจมาแล้ว จากที่ได้สอนในบทความก่อนหน้า (สอนทำ Webboard ด้วย PHP MySQL ตอนที่ 4 เพิ่ม/แสดง/ลบ/แก้ไข หมวดกระทู้ และแสดงหมวดกระทู้ในหน้าโฮมเพจ  ) ต่อไปจะเป็นส่วนหน้าแสดงกระทู้ต่อจากหน้าหลักที่แสดงหมวดของกระทู้ก่อน ซึ่งหน้าแสดงกระทู้จะแสดงกระทู้ในหมวดนั้นๆที่เราคลิกเลือกจากหน้าหลักครับ จากนั้นในหน้าแสดงกระทู้ สามารถให้สมาชิกเข้าไปตั้งกระทู้หรือตอบกระทู้ได้ สำหรับบุคคลทั่วไป สามารถเข้ามาอ่านเนื้อหาของกระทู้ได้เท่านั้น

     สำหรับไฟล์ที่ใช้ในบทความนี้ จะมีอยู่ 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'] . '&notview=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

3 ความคิดเห็น :

  1. เออเรอเยอะมากคับ มีไฟร์ให้ดาวโหลดไหมคับ

    ตอบลบ
    คำตอบ
    1. ตั้งแต่ ตอนที่ 1 เลยคับ

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

    ตอบลบ