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 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
หน้าจอสำหรับการตั้งกระทู้ใหม่
หน้าจอสำหรับแสดงกระทู้
หน้าจอสำหรับแสดงกระทู้คำถาม และ รายละเอียดความคิดเห็น
Download Code !!
No comments:
Post a Comment