PHP สร้าง WebBoard กระดานถาม-ตอบ และเว็บบอร์ดสำหรับเว็บด้วย PHP และ MySQL บทความนี้เป็นตัวอย่างการใช้ php สร้าง webboad หรือกระดานถามตอบเพื่อติดในเว็บไซต์ต่าง ๆ จัดเก็บข้อมูลลงในฐานข้อมูล mysql ซึ่งประกอบด้วย 2 ตารางด้วยกัน คือ webboard และ reply ในตัวอย่างจะมีการเก็บคำถาม จำนวนคนอ่าน และ จำนวนคนตอบในแต่ล่ะกระทู้ เมื่อคลิกเข้าไปในแต่ล่ะกระทู้จะ แสดงรายละเอียดพร้อมทั้งสามารถแสดงความคิดเห็นในกระทู้นั้น ๆ ได้ ในตัวอย่างนี้ใช้การเขียนแบบง่าย ๆ สามารถนำไปศึกษาหรือดัดแปลงแก้ไข ฝึกทักษะการเขียนโปรแกรมด้วย php กับ mysql ได้เป็นอย่างดี หากต้องการดาวน์โหลด Code ก็สามารถดาวน์โหลดได้จากข้างล่างสุดของบทความ
Screenshot
ตัวอย่างหน้าจอ Webboard ของ PHP กับ MySQL
คุณสมบัติและความสามารถของตัวอย่างนี้
- จัดเก็บกระทู้คำถามโดยใช้ mySQL Database
- แสดงกระทู้คำถาม จำนวนคนอ่าน จำนวนคนตอบ
- แสดงรายละเอียดความคิดเห็นของแต่ล่ะกระทู้
- แสดงหน้าจอสำหรับตั้งกระทู้ถาม
ตารางประกอบด้วย 2 ตารางคือ
- webboard (เก็บคำถามหรือกระทู้)
- reply (เก็บรายละเอียดของการแสดงความคิดเห็น)
- 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 ;
`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 หรืออื่น ๆ
โครงสร้างตาราง question จัดเก็บกระทู้คำถาม
โครงสร้างตาราง 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 Page15. 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.else35.{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.else83.{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
หน้าจอสำหรับการตั้งกระทู้ใหม่
หน้าจอสำหรับแสดงกระทู้
หน้าจอสำหรับแสดงกระทู้คำถาม และ รายละเอียดความคิดเห็น
Download Code !!
No comments:
Post a Comment