Có lẽ các bạn đã quá quen thuộc với các trang diễn đàn hay forum trong và ngoài nước. Có bao giờ bạn nghĩ bạn sẽ tự tay làm một trang diễn đàn không. Thực ra làm một trang diễn đàn không khó, vì bây giờ có rất nhiều phần mềm hỗ trợ chúng ta làm diễn đàn rất tốt và chuyên nghiệp như vbulletin, myBB, hay phpBB…

Tuy nhiên những phần mềm kể trên thường đã làm xong hết, các bạn chỉ cần cấu hình và chỉnh sửa lại cho phù hợp với nhu cầu là có thể sử dụng được. Nếu vậy thì không thú vị tí tẹo nào cho những bạn đam mê khám phá và nghiên cứu PHP.
Hôm nay Adam Thiên xin chia sẻ với các bạn cách làm một trang diễn đàn đơn giản và bạn có thể tự tay làm ra nó. Bài viết này chỉ nhằm vào những bạn mới làm quen với PHP và các bạn học lập trình web.
Bước 1 : Tạo cơ sở dữ liệu
Các bạn tạo một database tên là ” test ” và tạo 2 bảng (table) là “forum_question“ và “forum_answer“.

Chia sẻ tự tay tạo một diễn đàn
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
CREATE TABLE `forum_question` (`id` int(4) NOT NULL auto_increment,`topic` varchar(255) NOT NULL default '',`detail` longtext NOT NULL,`name` varchar(65) NOT NULL default '',`email` varchar(65) NOT NULL default '',`datetime` varchar(25) NOT NULL default '',`view` int(4) NOT NULL default '0',`reply` int(4) NOT NULL default '0',PRIMARY KEY (`id`)) TYPE=MyISAM AUTO_INCREMENT=1 ;CREATE TABLE `forum_answer` (`question_id` int(4) NOT NULL default '0',`a_id` int(4) NOT NULL default '0',`a_name` varchar(65) NOT NULL default '',`a_email` varchar(65) NOT NULL default '',`a_answer` longtext NOT NULL,`a_datetime` varchar(25) NOT NULL default '',KEY `a_id` (`a_id`)) TYPE=MyISAM; |
Bước 2 : Tạo file create_topic.php
File này chỉ đơn giản là hiển thị form cho phép người dùng đăng tải nội dung cần thảo luận.

Tạo file create_topic
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"><tr><form id="form1" name="form1" method="post" action="add_topic.php"><td><table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"><tr><td colspan="3" bgcolor="#E6E6E6"><strong>Create New Topic</strong> </td></tr><tr><td width="14%"><strong>Topic</strong></td><td width="2%">:</td><td width="84%"><input name="topic" type="text" id="topic" size="50" /></td></tr><tr><td valign="top"><strong>Detail</strong></td><td valign="top">:</td><td><textarea name="detail" cols="50" rows="3" id="detail"></textarea></td></tr><tr><td><strong>Name</strong></td><td>:</td><td><input name="name" type="text" id="name" size="50" /></td></tr><tr><td><strong>Email</strong></td><td>:</td><td><input name="email" type="text" id="email" size="50" /></td></tr><tr><td> </td><td> </td><td><input type="submit" name="Submit" value="Submit" /> <input type="reset" name="Submit2" value="Reset" /></td></tr></table></td></form></tr></table> |
Bước 3 : Tạo file add_topic.php
File này có nhiệm vụ là chèn thông tin đăng tải của người dùng vào cơ sở dữ liệu.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<?php$host="localhost"; // Host name$username=""; // Mysql username$password=""; // Mysql password$db_name="test"; // tên cơ sở dữ liệu$tbl_name="forum_question"; // Tên bảng// kết nối tới severver và chọn databasemysql_connect("$host", "$username", "$password")or die("cannot connect");mysql_select_db("$db_name")or die("cannot select DB");// lấy dữ liệu từ form$topic=$_POST['topic'];$detail=$_POST['detail'];$name=$_POST['name'];$email=$_POST['email'];$datetime=date("d/m/y h:i:s"); //create date time$sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')";$result=mysql_query($sql);if($result){echo "Successful<BR>";echo "<a href=main_forum.php>View your topic</a>";}else {echo "ERROR";}mysql_close();?> |
Bước 4 : Tạo file main_forum.php
File này có nhiệm vụ hiển thị thông tin đăng tải của người dùng.

Tạo file main_forum
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
<?php$host="localhost"; // Host name$username=""; // Mysql username$password=""; // Mysql password$db_name="test"; // Database name$tbl_name="forum_question"; // Table name// kết nối tới server và chọn databasemysql_connect("$host", "$username", "$password")or die("cannot connect");mysql_select_db("$db_name")or die("cannot select DB");$sql="SELECT * FROM $tbl_name ORDER BY id DESC";$result=mysql_query($sql);?><table width="90%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC"><tr><td width="6%" align="center" bgcolor="#E6E6E6"><strong>#</strong></td><td width="53%" align="center" bgcolor="#E6E6E6"><strong>Topic</strong></td><td width="15%" align="center" bgcolor="#E6E6E6"><strong>Views</strong></td><td width="13%" align="center" bgcolor="#E6E6E6"><strong>Replies</strong></td><td width="13%" align="center" bgcolor="#E6E6E6"><strong>Date/Time</strong></td></tr><?phpwhile($rows=mysql_fetch_array($result)){?><tr><td bgcolor="#FFFFFF"><? echo $rows['id']; ?></td><td bgcolor="#FFFFFF"><a href="view_topic.php?id=<? echo $rows['id']; ?>"><? echo $rows['topic']; ?></a><BR></td><td align="center" bgcolor="#FFFFFF"><? echo $rows['view']; ?></td><td align="center" bgcolor="#FFFFFF"><? echo $rows['reply']; ?></td><td align="center" bgcolor="#FFFFFF"><? echo $rows['datetime']; ?></td></tr><?php// thoát khỏi vòng lặp và đóng kết nối}mysql_close();?><tr><td colspan="5" align="right" bgcolor="#E6E6E6"><a href="create_topic.php"><strong>Create New Topic</strong> </a></td></tr></table> |
Bước 5 : Tạo file view_topic.php
File này có nhiệm vụ hiển thị chi tiết thông tin đăng tải của người dùng, đồng thời cũng cho phép nhiều người trả lời hay phản hồi lại.




|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
<?php$host="localhost"; // Host name$username=""; // Mysql username$password=""; // Mysql password$db_name="test"; // Database name$tbl_name="forum_question"; // Table name// Connect to server and select databse.mysql_connect("$host", "$username", "$password")or die("cannot connect");mysql_select_db("$db_name")or die("cannot select DB");// lấy giá trị id được gửi$id=$_GET['id'];$sql="SELECT * FROM $tbl_name WHERE id='$id'";$result=mysql_query($sql);$rows=mysql_fetch_array($result);?><table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"><tr><td><table width="100%" border="0" cellpadding="3" cellspacing="1" bordercolor="1" bgcolor="#FFFFFF"><tr><td bgcolor="#F8F7F1"><strong><? echo $rows['topic']; ?></strong></td></tr><tr><td bgcolor="#F8F7F1"><? echo $rows['detail']; ?></td></tr><tr><td bgcolor="#F8F7F1"><strong>By :</strong> <? echo $rows['name']; ?> <strong>Email : </strong><? echo $rows['email'];?></td></tr><tr><td bgcolor="#F8F7F1"><strong>Date/time : </strong><? echo $rows['datetime']; ?></td></tr></table></td></tr></table><BR><?php$tbl_name2="forum_answer"; // Switch to table "forum_answer"$sql2="SELECT * FROM $tbl_name2 WHERE question_id='$id'";$result2=mysql_query($sql2);while($rows=mysql_fetch_array($result2)){?><table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"><tr><td><table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"><tr><td bgcolor="#F8F7F1"><strong>ID</strong></td><td bgcolor="#F8F7F1">:</td><td bgcolor="#F8F7F1"><? echo $rows['a_id']; ?></td></tr><tr><td width="18%" bgcolor="#F8F7F1"><strong>Name</strong></td><td width="5%" bgcolor="#F8F7F1">:</td><td width="77%" bgcolor="#F8F7F1"><? echo $rows['a_name']; ?></td></tr><tr><td bgcolor="#F8F7F1"><strong>Email</strong></td><td bgcolor="#F8F7F1">:</td><td bgcolor="#F8F7F1"><? echo $rows['a_email']; ?></td></tr><tr><td bgcolor="#F8F7F1"><strong>Answer</strong></td><td bgcolor="#F8F7F1">:</td><td bgcolor="#F8F7F1"><? echo $rows['a_answer']; ?></td></tr><tr><td bgcolor="#F8F7F1"><strong>Date/Time</strong></td><td bgcolor="#F8F7F1">:</td><td bgcolor="#F8F7F1"><? echo $rows['a_datetime']; ?></td></tr></table></td></tr></table><br><?php}$sql3="SELECT view FROM $tbl_name WHERE id='$id'";$result3=mysql_query($sql3);$rows=mysql_fetch_array($result3);$view=$rows['view'];// Mặc định số người đọc sẽ là 1if(empty($view)){$view=1;$sql4="INSERT INTO $tbl_name(view) VALUES('$view') WHERE id='$id'";$result4=mysql_query($sql4);}// Đếm giá trị$addview=$view+1;$sql5="update $tbl_name set view='$addview' WHERE id='$id'";$result5=mysql_query($sql5);mysql_close();?><BR><table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"><tr><form name="form1" method="post" action="add_answer.php"><td><table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"><tr><td width="18%"><strong>Name</strong></td><td width="3%">:</td><td width="79%"><input name="a_name" type="text" id="a_name" size="45"></td></tr><tr><td><strong>Email</strong></td><td>:</td><td><input name="a_email" type="text" id="a_email" size="45"></td></tr><tr><td valign="top"><strong>Answer</strong></td><td valign="top">:</td><td><textarea name="a_answer" cols="45" rows="3" id="a_answer"></textarea></td></tr><tr><td> </td><td><input name="id" type="hidden" value="<? echo $id; ?>"></td><td><input type="submit" name="Submit" value="Submit"> <input type="reset" name="Submit2" value="Reset"></td></tr></table></td></form></tr></table> |
Bước 6 : Tạo file add_answer.php
File này được dùng để chèn những câu trả lời hay phản hồi vào cơ sở dữ liệu.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<?php$host="localhost"; // Host name$username=""; // Mysql username$password=""; // Mysql password$db_name="test"; // Database name$tbl_name="forum_answer"; // Table namemysql_connect("$host", "$username", "$password")or die("cannot connect");mysql_select_db("$db_name")or die("cannot select DB");// lấy giá trị id từ hidden field$id=$_POST['id'];// Tìm số lượng phản hồi nhiều nhất$sql="SELECT MAX(a_id) AS Maxa_id FROM $tbl_name WHERE question_id='$id'";$result=mysql_query($sql);$rows=mysql_fetch_array($result);if ($rows) {$Max_id = $rows['Maxa_id']+1;}else {$Max_id = 1;}$a_name=$_POST['a_name'];$a_email=$_POST['a_email'];$a_answer=$_POST['a_answer'];$datetime=date("d/m/y H:i:s"); // create date and time// Insert answer$sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')";$result2=mysql_query($sql2);if($result2){echo "Successful<BR>";echo "<a href='view_topic.php?id=".$id."'>View your answer</a>";// Nếu có thêm phản hồi, thì giá trị sẽ tự động + thêm 1$tbl_name2="forum_question";$sql3="UPDATE $tbl_name2 SET reply='$Max_id' WHERE id='$id'";$result3=mysql_query($sql3);}else {echo "ERROR";}// Đóng kết nốimysql_close();?> |
Vậy là vừa rồi Adam Thiên đã chia sẻ cho mọi người. mình hy vọng là với bài viết này , các bạn sẽ gặt hái được điều gì đó và áp dụng vào công việc kinh doanh của bạn
Chúc các bạn thành công !

