Sunday, September 30, 2012

PHP สร้าง WebBoard


PHP สร้าง WebBoard กระดานถาม-ตอบ และเว็บบอร์ดสำหรับเว็บด้วย PHP และ MySQL บทความนี้เป็นตัวอย่างการใช้ php สร้าง webboad หรือกระดานถามตอบเพื่อติดในเว็บไซต์ต่าง ๆ จัดเก็บข้อมูลลงในฐานข้อมูล mysql ซึ่งประกอบด้วย 2 ตารางด้วยกัน คือ webboard และ reply ในตัวอย่างจะมีการเก็บคำถาม จำนวนคนอ่าน และ จำนวนคนตอบในแต่ล่ะกระทู้ เมื่อคลิกเข้าไปในแต่ล่ะกระทู้จะ แสดงรายละเอียดพร้อมทั้งสามารถแสดงความคิดเห็นในกระทู้นั้น ๆ ได้ ในตัวอย่างนี้ใช้การเขียนแบบง่าย ๆ สามารถนำไปศึกษาหรือดัดแปลงแก้ไข ฝึกทักษะการเขียนโปรแกรมด้วย php กับ mysql ได้เป็นอย่างดี หากต้องการดาวน์โหลด Code ก็สามารถดาวน์โหลดได้จากข้างล่างสุดของบทความ

Screenshot

Create Webboard PHP MySQL

ตัวอย่างหน้าจอ Webboard ของ PHP กับ MySQL


คุณสมบัติและความสามารถของตัวอย่างนี้
- จัดเก็บกระทู้คำถามโดยใช้ mySQL Database
- แสดงกระทู้คำถาม จำนวนคนอ่าน จำนวนคนตอบ
- แสดงรายละเอียดความคิดเห็นของแต่ล่ะกระทู้
- แสดงหน้าจอสำหรับตั้งกระทู้ถาม

ตารางประกอบด้วย 2 ตารางคือ
- webboard (เก็บคำถามหรือกระทู้)
- reply (เก็บรายละเอียดของการแสดงความคิดเห็น)



ตาราง webboard และ reply
CREATE TABLE `webboard` (
`QuestionID` int(5) unsigned zerofill NOT NULL auto_increment,
`CreateDate` datetime NOT NULL,
`Question` varchar(255) NOT NULL,
`Details` text NOT NULL,
`Name` varchar(50) NOT NULL,
`View` int(5) NOT NULL,
`Reply` int(5) NOT NULL,
PRIMARY KEY (`QuestionID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


CREATE TABLE `reply` (
`ReplyID` int(5) unsigned zerofill NOT NULL auto_increment,
`QuestionID` int(5) unsigned zerofill NOT NULL,
`CreateDate` datetime NOT NULL,
`Details` text NOT NULL,
`Name` varchar(50) NOT NULL,
PRIMARY KEY (`ReplyID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


นำ Query นี้ไปรันเพื่อสร้างตารางบน phpMyAdmin หรืออื่น ๆ


Create Webboard PHP MySQL

โครงสร้างตาราง question จัดเก็บกระทู้คำถาม


Create Webboard PHP MySQL

โครงสร้างตาราง reply เก็บรายละเอียดของการแสดงความคิดเห็นแต่ล่ะกระทู้

ไฟล์ทั้งหมด
- Webboard.php (แสดงกระทู้คำถาม)
- NewQuestion.php (หน้าจอตั้งกระทู้คำถาม)
- ViewWebboard.php (หน่าจอแสดงรายละเอียดกระทู้และหน้าจอสำหรับแสดงความคิดเห็น)

Webboard.php
01.<html>
02.<head>
03.<title>ThaiCreate.Com</title>
04.</head>
05.<body>
06.<a href="NewQuestion.php">New Topic</a>
07.<?
08.$objConnect = mysql_connect("localhost","root","root") or die("Error Connect to Database");
09.$objDB = mysql_select_db("mydatabase");
10.$strSQL = "SELECT * FROM webboard ";
11.$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
12.$Num_Rows = mysql_num_rows($objQuery);
13. 
14.$Per_Page = 10;   // Per Page
15. 
16.$Page = $_GET["Page"];
17.if(!$_GET["Page"])
18.{
19.$Page=1;
20.}
21. 
22.$Prev_Page = $Page-1;
23.$Next_Page = $Page+1;
24. 
25.$Page_Start = (($Per_Page*$Page)-$Per_Page);
26.if($Num_Rows<=$Per_Page)
27.{
28.$Num_Pages =1;
29.}
30.else if(($Num_Rows % $Per_Page)==0)
31.{
32.$Num_Pages =($Num_Rows/$Per_Page) ;
33.}
34.else
35.{
36.$Num_Pages =($Num_Rows/$Per_Page)+1;
37.$Num_Pages = (int)$Num_Pages;
38.}
39. 
40.$strSQL .=" order  by QuestionID DESC LIMIT $Page_Start , $Per_Page";
41.$objQuery  = mysql_query($strSQL);
42.?>
43.<table width="909" border="1">
44.<tr>
45.<th width="99"> <div align="center">QuestionID</div></th>
46.<th width="458"> <div align="center">Question</div></th>
47.<th width="90"> <div align="center">Name</div></th>
48.<th width="130"> <div align="center">CreateDate</div></th>
49.<th width="45"> <div align="center">View</div></th>
50.<th width="47"> <div align="center">Reply</div></th>
51.</tr>
52.<?
53.while($objResult = mysql_fetch_array($objQuery))
54.{
55.?>
56.<tr>
57.<td><div align="center"><?=$objResult["QuestionID"];?></div></td>
58.<td><a href="ViewWebboard.php?QuestionID=<?=$objResult["QuestionID"];?>"><?=$objResult["Question"];?></a></td>
59.<td><?=$objResult["Name"];?></td>
60.<td><div align="center"><?=$objResult["CreateDate"];?></div></td>
61.<td align="right"><?=$objResult["View"];?></td>
62.<td align="right"><?=$objResult["Reply"];?></td>
63.</tr>
64.<?
65.}
66.?>
67.</table>
68. 
69.<br>
70.Total <?= $Num_Rows;?> Record : <?=$Num_Pages;?> Page :
71.<?
72.if($Prev_Page)
73.{
74.echo " <a href='$_SERVER[SCRIPT_NAME]?Page=$Prev_Page'><< Back</a> ";
75.}
76. 
77.for($i=1; $i<=$Num_Pages; $i++){
78.if($i != $Page)
79.{
80.echo "[ <a href='$_SERVER[SCRIPT_NAME]?Page=$i'>$i</a> ]";
81.}
82.else
83.{
84.echo "<b> $i </b>";
85.}
86.}
87.if($Page!=$Num_Pages)
88.{
89.echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=$Next_Page'>Next>></a> ";
90.}
91.mysql_close($objConnect);
92.?>
93.</body>
94.</html>



ViewWebboard.php
01.<?
02.$objConnect = mysql_connect("localhost","root","root") or die("Error Connect to Database");
03.$objDB = mysql_select_db("mydatabase");
04. 
05.if($_GET["Action"] == "Save")
06.{
07.//*** Insert Reply ***//
08.$strSQL = "INSERT INTO reply ";
09.$strSQL .="(QuestionID,CreateDate,Details,Name) ";
10.$strSQL .="VALUES ";
11.$strSQL .="('".$_GET["QuestionID"]."','".date("Y-m-d H:i:s")."','".$_POST["txtDetails"]."','".$_POST["txtName"]."') ";
12.$objQuery = mysql_query($strSQL);
13. 
14.//*** Update Reply ***//
15.$strSQL = "UPDATE webboard ";
16.$strSQL .="SET Reply = Reply + 1 WHERE QuestionID = '".$_GET["QuestionID"]."' ";
17.$objQuery = mysql_query($strSQL);  
18.}
19.?>
20.<html>
21.<head>
22.<title>ThaiCreate.Com</title>
23.</head>
24.<body>
25.<?
26.//*** Select Question ***//
27.$strSQL = "SELECT * FROM webboard  WHERE QuestionID = '".$_GET["QuestionID"]."' ";
28.$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
29.$objResult = mysql_fetch_array($objQuery);
30. 
31.//*** Update View ***//
32.$strSQL = "UPDATE webboard ";
33.$strSQL .="SET View = View + 1 WHERE QuestionID = '".$_GET["QuestionID"]."' ";
34.$objQuery = mysql_query($strSQL);  
35.?>
36.<table width="738" border="1" cellpadding="1" cellspacing="1">
37.<tr>
38.<td colspan="2"><center><h1><?=$objResult["Question"];?></h1></center></td>
39.</tr>
40.<tr>
41.<td height="53" colspan="2"><?=nl2br($objResult["Details"]);?></td>
42.</tr>
43.<tr>
44.<td width="397">Name : <?=$objResult["Name"];?> Create Date : <?=$objResult["CreateDate"];?></td>
45.<td width="253">View : <?=$objResult["View"];?> Reply : <?=$objResult["Reply"];?></td>
46.</tr>
47.</table>
48.<br>
49.<br>
50.<?
51.$intRows = 0;
52.$strSQL2 = "SELECT * FROM reply  WHERE QuestionID = '".$_GET["QuestionID"]."' ";
53.$objQuery2 = mysql_query($strSQL2) or die ("Error Query [".$strSQL."]");
54.while($objResult2 = mysql_fetch_array($objQuery2))
55.{
56.$intRows++;
57.?> No : <?=$intRows;?>
58.<table width="738" border="1" cellpadding="1" cellspacing="1">
59.<tr>
60.<td height="53" colspan="2"><?=nl2br($objResult2["Details"]);?></td>
61.</tr>
62.<tr>
63.<td width="397">Name :
64.<?=$objResult2["Name"];?>      </td>
65.<td width="253">Create Date :
66.<?=$objResult2["CreateDate"];?></td>
67.</tr>
68.</table><br>
69.<?
70.}
71.?>
72.<br>
73.<a href="Webboard.php">Back to Webboard</a> <br>
74.<br>
75.<form action="ViewWebboard.php?QuestionID=<?=$_GET["QuestionID"];?>&Action=Save" method="post" name="frmMain" id="frmMain">
76.<table width="738" border="1" cellpadding="1" cellspacing="1">
77.<tr>
78.<td width="78">Details</td>
79.<td><textarea name="txtDetails" cols="50" rows="5" id="txtDetails"></textarea></td>
80.</tr>
81.<tr>
82.<td width="78">Name</td>
83.<td width="647"><input name="txtName" type="text" id="txtName" value="" size="50"></td>
84.</tr>
85.</table>
86. 
87.<input name="btnSave" type="submit" id="btnSave" value="Submit">
88.</form>
89.</body>
90.</html>
91.<?
92.mysql_close($objConnect);
93.?>



NewQuestion.php
01.<?
02.$objConnect = mysql_connect("localhost","root","root") or die("Error Connect to Database");
03.$objDB = mysql_select_db("mydatabase");
04. 
05.if($_GET["Action"] == "Save")
06.{
07.//*** Insert Question ***//
08.$strSQL = "INSERT INTO webboard ";
09.$strSQL .="(CreateDate,Question,Details,Name) ";
10.$strSQL .="VALUES ";
11.$strSQL .="('".date("Y-m-d H:i:s")."','".$_POST["txtQuestion"]."','".$_POST["txtDetails"]."','".$_POST["txtName"]."') ";
12.$objQuery = mysql_query($strSQL);
13. 
14.header("location:Webboard.php");
15.}
16.?>
17.<html>
18.<head>
19.<title>ThaiCreate.Com</title>
20.</head>
21.<body>
22. 
23.<form action="NewQuestion.php?Action=Save" method="post" name="frmMain" id="frmMain">
24.<table width="621" border="1" cellpadding="1" cellspacing="1">
25.<tr>
26.<td>Question</td>
27.<td><input name="txtQuestion" type="text" id="txtQuestion" value="" size="70"></td>
28.</tr>
29.<tr>
30.<td width="78">Details</td>
31.<td><textarea name="txtDetails" cols="50" rows="5" id="txtDetails"></textarea></td>
32.</tr>
33.<tr>
34.<td width="78">Name</td>
35.<td width="647"><input name="txtName" type="text" id="txtName" value="" size="50"></td>
36.</tr>
37.</table>
38. 
39.<input name="btnSave" type="submit" id="btnSave" value="Submit">
40.</form>
41.</body>
42.</html>
43.<?
44.mysql_close($objConnect);
45.?>




Screenshot

Create Webboard PHP MySQL

หน้าจอสำหรับการตั้งกระทู้ใหม่


Create Webboard PHP MySQL

หน้าจอสำหรับแสดงกระทู้


Create Webboard PHP MySQL

หน้าจอสำหรับแสดงกระทู้คำถาม และ รายละเอียดความคิดเห็น



Download Code !!

No comments:

Post a Comment