PHP

PHP - เรื่อง bbs

posted on 09 Apr 2006 10:37 by rije  in PHP

ยินดีต้อนรับครับ วันนี้เป็นเรื่อง php แล้วนะครับ ^^

สามารถดูเรื่องเก่าๆ ได้ที่ recommended นะครับ

ว่ากันตามตรงแล้วผมก็ไม่ค่อยเก่ง php เท่าไหร่นะครับ

เท่าที่ผมพอได้ก็มีเรื่องพวกสร้าง board พวก bbs phpbb พวกนี้น่ะครับ

เพราะงั้นขอหยิบเรื่องนี้มาเสนอแล้วกัน ถ้ามีส่วนไหนผิดพลาดก็ช่วยแนะนำด้วยนะครับ ^^

หากต้องการข้อมูลเพิ่มเติมผมขอแนะนำเว็บ http://www.thaimisc.com ครับ

....................................................................

ผมเอาตัว bbs ที่มีอยู่มาให้ดูก่อนนะครับ bbs ที่นำมาเป็นของคนญี่ปุ่นเขียนไว้ครับ

ขออธบายพอสังเขปควบคู่กับตัวโค้ดด้านล่างละกันนะครับ มันเยอะมากเลย

ดูวิธีนำโค้ดไปใช้ด้านล่างสุดนะครับ

....................................................................

<?php

extract($_SERVER);
extract($_REQUEST);

$ip = $_SERVER['REMOTE_ADDR'];
$host = @gethostbyaddr($ip);

#===================================#
# STUDIO ZERO PHP*BBS #
# (c) kazuki owada #
#
http://rkp.s24.xrea.com/ #
#===================================#

//ตัวไฟล์ php ที่เราเซฟ bbs.php ถ้าเซฟเป็นชื่ออื่นต้องมาเปลี่ยนตรงนี้

$self = './bbs.php';

//ไฟล์ .log ครับ
$logfile = './bbs.log';

//จัดเก็บข้อมูลสูงสุด

$max = 100;

//ใน 1 เพจที่จะแสดง

$max_view = 10;

//ชื่อ title bbs ของคุณครับ
$title = "ใส่ชื่อ title ตรงนี้ครับ";


//ตัวลิงค์กลับไปหน้า home ครับ
$home = '../ใส่urlครับ';

//จะเก็บพลาสเข้าระบบของคุณ
$pass = "ใส่รหัสตัวเลข";

//ตั้งค่า
// yes=1 no=0
$tag = 0;

//ตัวอักษรแบบ array (จัดเก็บทีละตัว)
$ng_word = array("ใส่ข้อความ");

//ภาพที่คุณจะใช้ใน bbs นี้

$img = 'http://rije.4-dezign.com/geustb.gif';

#===========================================#

function head(){
global $title,$img;
print <<<HTML
<html>
<head>
<meta http-equiv="Content-Stytle-Type" content="text/css">
<style>
<!--
body{
font-size:13px;
background-image: url($img);
background-repeat:no-repeat;
background-attachment:fixed;
background-position:10% 50%;
scrollbar-track-color: #ffffff;
scrollbar-face-color: #ffffff;
scrollbar-shadow-color: #ffffff;
scrollbar-darkshadow-color: #ffffff;
scrollbar-highlight-color: #ffffff;
scrollbar-3dlight-color: #ffffff;
scrollbar-arrow-color: #000000;
}
table{
font-size:13px;
}
.input {
border-left: 0px;
border-right: 0px;
border-top: 0px;
border-bottom: 1px solid #000000;
background-color:#FFFFFF;
font-size: 13px; color: #000000;
scrollbar-track-color: #ffffff;
scrollbar-face-color: #ffffff;
scrollbar-shadow-color: #ffffff;
scrollbar-darkshadow-color: #ffffff;
scrollbar-highlight-color: #ffffff;
scrollbar-3dlight-color: #ffffff;
scrollbar-arrow-color: #000000;
}
.button {
font-size:12px;
color:000000;
background-color:#FFFFFF;
border-style:solid;
border-color:000000;
border-width:1;
}
small{
font-size:12px;
color:#b1b1b1;
-->
</style>
<title>$title</title>
</head>
<body>
HTML;
}

function foot(){
print "</body></html>\n";
}

function err($msg){
global $self;
head();
print "<center><font color=red>ERROR!</font><br><br>$msg<br><br><a href='$self'>BACK</a></center>\n";
exit();
}

if($m == "save"){
if(!$name){err("หากไม่ใส่ชื่อจะขึ้นข้อความเตือนอันนี้");}
if(!$com){err("หากไม่ได้ใส่คอมเม้นท์จะขึ้นข้อความเตือนอันนี้");}

//เช็คชื่อและคอมเม้นท์

if(get_magic_quotes_gpc()){
$name = stripslashes($name);
$sub = stripslashes($sub);
$com = stripslashes($com);
}
//ส่วนทำการจัดเก็บ
$name = htmlspecialchars($name);
$sub = htmlspecialchars($sub);
$url = htmlspecialchars($url);

//เช็ค error
foreach($ng_word as $value){
if(preg_match("/$value/",$name)){err("ใส่ข้อความ error ของ name ตรงนี้");}
if(preg_match("/$value/",$sub)){err("ใส่ข้อความ error ของ sub ตรงนี้");}
if(preg_match("/$value/",$com)){err("ใส่ข้อความ error ของ comment ตรงนี้");}
}
//จัดเก็บข้อความ url
if($tag){
$com = str_replace("<>","&lt;&gt;",$com);
}else{$com = htmlspecialchars($com);}
$url = str_replace("
http://","",$url);
//จัดเก็บข้อความ comment
$com = str_replace(array("\r\n","\r","\n"),"<br>",$com);
//จัดเก็บชื่อ sub mail url
list($name,$sub,$mail,$url) = str_replace(array("\r","\n"),"",array($name,$sub,$mail,$url));
//วันเดือนปีที่โพส
$date = date("Y/m/d(D) H:i");

$logs = @file($logfile);
list($no,$n,$s,$m,$c,$d,$p,$i,$h) = explode("<>",$logs[0]);
if($n == $name || $c == $com){err("name || comment");}
//
$no++;
if(!$sub){$sub = "–ณ‘่";}
$new = "$no<>$name<>$sub<>$mail<>$url<>$com<>$pw<>$date<>$ip<>$host\n";
//ตัวนี้จะเช็คการเรียกไฟล์แล้ว error
@flock($fp,LOCK_EX);
$fp = fopen($logfile,"w") or err("OPEN ERROR! file");
fputs($fp,$new);
//ส่วนที่จะแสดงผล error เป็นข้อความ
for($i = 0; $i < $max-1; $i++){
fputs($fp,$logs[$i]);
}
fclose($fp);

}

if($m == "delete"){
if(!$id || !$pwd){err("โปรดใส่ id หรือ pass ที่ถูกต้อง");}
$lines = file($logfile);
$flag = 0;

foreach($lines as $delfile){
list($no2,$name2,$sub2,$mail2,$url2,$com2,$pw2,$date2,$ip2,$host2) = explode("<>",$delfile);
if($id == $no2){
if(!$pw2){
err("pass ไม่ถูกกรุณาใส่ใหม่");
}
if($pwd != $pw2){
err("โปรดตรวจสอบความถูกต้องอีกครั้ง");
}
$flag = 1;
}
else{$new .= $delfile;}
}
if($flag == 0){err("ตรวจสอบข้อมูลดีๆ ด้วยครับ");}

//เปิดไฟล์ขึ้นมาลบ
$fp = fopen($logfile,"w") or err("open file");
fputs($fp,$new);
fclose($fp);
head();
print "<center>ข้อความถูกลบเรียบร้อยแล้ว<br><br><a href=$self>BACK</a>\n";
foot();
unset($value);
exit();
}

if($m == "admin"){
head();
if(!$master){
print "<form action=$self method=POST>\n";
print "<input type=hidden name=m value='admin'>\n";
print "<center><hr width=200>admin system<br>\n";
print "<input type=password name=master size=8 class=input>\n";
print "<input type=submit value='LOGIN' class=button>\n";
print "<hr width=200></center></form>\n";
exit();
}
if($master != $pass){err("เกิดปัญหากับ pass");}

if($action == "del"){
$delfile = @file($logfile);
$flag=0;
foreach($delfile as $value){
list($no1,$name1,$sub1,$mail1,$ur1l,$com1,$ext1,$w1,$h1,$pw1,$date1,$ip1,$host1) = explode("<>",$value);
//เช็ค error
if($num == $no1){
$flag=1;
}
else{$new_dat .= $value;}
}
if($flag == 0){err("ใส่ข้อความ error ตรงนี้");}
//เปิดไฟล์แล้ว error

$fp = fopen($logfile,"w") or err("ใส่ข้อความ error ตรงนี้");
#@flock($fp,2);
fputs($fp,$new_dat);
fclose($fp);
}

print <<<HTML
<form action=$self method=POST>
<input type=hidden name=m value=admin>
<input type=hidden name=action value=del>
<input type=hidden name=master value=$pass>
<input type=hidden name=p value=$p>
[<a href=$self>back to bbs</a>]<br>
<center>
<hr>
edit system<br>
edit system and data : comment<br><br>
<table border=1 width=700 style='border-collapse:collapse;' bordercolor=#000000>
<tr align=center>
<td>no</td><td>name</td><td>url</td><td>com</td><td>date</td><td>ip</td><td>host</td></tr>
HTML;

$dat = @file($logfile);
$s = $p + 1;
$e = $p + $max_view;
$j=0;
foreach($dat as $line){
list($no2,$name2,$mail2,$url2,$com2,$pw2,$date2,$ip2,$host2) = explode("<>",$line);
$k++;
if($k < $s){continue;}
if($k > $e){continue;}
if($mail2){$name2 = "<a href=mailto:$mail2>$name2</a>";}
if($url2){$url2 = "<a href=http://$url taeget=_blank>HOME</a>";}
$com2 = mb_substr($com2,0,15);
$com2 .= "...";
print "<tr><td>\n";
print "<input type=checkbox name=num value=$no2>\n";
print "$no2</td><td>$name2</td><td>$sub2</td><td>$url2</td><td>\n";
print "$com2</td><td>$date2</td><td>$ip2</td><td>$host2</td></tr>\n";
}
print "</td></tr></table><br><br>\n";
print "<input type=submit value='DELETE' class=button></form><br><br>\n";
$n = $p + $max_view;
$e = $p - $max_view;
if($n < $k){
print "[<a href=$self?m=admin&master=$pass>N E X T</a>]\n";
}

exit();
}

head();
print <<<HTML
<div align="right">
<form action="$self" method="POST">
<input type="hidden" name="m" value="save">
<table border="0" width="400"><tr><td>
$title <a href="
HOMEhttp://rije.4-dezign.com/main.htm">HOME</a> || <a href="$self?m=admin">admin</a>
<hr color="#000000" size="1">
<br>
<div align="right">
<table border=0>
<tr>
<td align="right">name</td><td><input type="text" name="name" size="33" class="input">
</td>
</tr>
<tr>
<td align="right">title</td><td><input type="text" name="sub" size="33" class="input" value="> ">
</td>
</tr>
<tr>
<td align="right">mail</td><td><input type="text" name="mail" size="33" class="input">
</td>
</tr>
<tr>
<td align="right">url</td><td><input type="text" name="url" size="33" value="http://" class="input">
</td>
</tr>
<tr>
<td align="right" valign="top">message</td><td><textarea rows="5" cols="25" name="com" class="input"></textarea>
<td>
</tr>
<tr>
<td colspan="2" align="right">pass<input type="password" name="pw" size="8" class="input">
&nbsp;&nbsp;<input type="submit" value="Send" class="button">&nbsp;<input type="reset" value="reset" class="button">
</td>
</tr>
</table>
</form>
</div>
<hr size="1">
HTML;

$start = $page + 1;
$end = $page + $max_view;
$data = @file($logfile);
$i=0;

//ส่วนนี้จะโชว์ข้อมูลที่ comment ไปว่ามีอะไรบ้าง ในโค้ดมีส่วนที่ต้องใส่ภาพด้วยนะครับ แก้ไขได้ครับ

foreach($data as $lines){
list($no,$name,$sub,$mail,$url,$com,$pw,$date,$ip,$host) = explode("<>",$lines);
$i++;
if($i < $start){continue;}
if($i > $end){continue;}
if($mail){$mail = "<a href=mailto:$mail><img src=ใส่ภาพเมล์ border=0></a>";}
if($url){$url = "<a href=http://$url target=_blank><img src=ใส่ภาพhome border=0></a>";}
print "<table border=0 width=100% style='border-style:solid;border-width:1px;border-color:#000000;'>\n";
print "<tr><td colspan=2>\n";
print "<table width=100% cellpadding=0 cellspacing=0><tr><td>\n";
print "[$no]&nbsp;$sub</td><td align=right>$mail&nbsp;$url</td></tr></table>\n";
print "<small>from></small>$name<br><small>date></small>$date\n";
print "</td></tr><tr><td></td><td>$com\n";
print "</td></tr></table><br><br>\n";

}
$next = $page + $max_view;
$back = $page - $max_view;
print "<center><table><br>\n";
//เช็คหน้าเพจว่ามีหน้าต่อไปหรือหน้าก่อนหน้าหรือไม่
if($back >= 0){
print "<td><form action=$self method=POST>\n";
print "<input type=hidden name=page value='$back'>\n";
print "<input type=submit value='back' class='button'></form></td>\n";
}
if($next < $i){
print "<td><form action=$self method=POST>\n";
print "<input type=hidden name=page value='$next'>\n";
print "<input type=submit value='next' class='button'></form>\n";
}
print "</td></tr></table></center>\n";

//พิมพ์ form ออกมา (code html)

print "<div align=right>\n";
print "<form action=$self method=POST>\n";
print "<input type=hidden name=m value='delete'>\n";
print "No<input type=text name=id size=4 class=input>\n";
print "Pass<input type=password name=pwd size=8 class=input>\n";
print "<input type=submit value='del' class=button></form><br><br>\n";

//แสดงข้อความใน "" ออกมาเป็นลิงค์ ZERO BBS

print "<a href=http://rkp.s24.xrea.com/ target=_blank>\n";
print "<font style='text-decoration:none;color:orange;'>ZERO BBS</font></a>\n";
print "</td></tr></table>\n";
?>

....................................................................

โค้ดนี้นำไปใช้ได้ทักทีเลยครับ แค่ก๊อบใส่ notepad แล้วเป็นเซฟชื่อ bbs.php

และสร้างไฟล์ log ด้วย notepad โดยการเปิด notepad ขึ้นมาแล้วเซฟเลยครับ

เป็นชื่อ bbs.log นะครับ สามารถเปลี่ยนชื่อไฟล์เซฟได้แต่ต้องมาเปลี่ยนชื่อไฟล์ที่โค้ดด้านบนด้วยครับ

ผมฝากโค้ด bbs อีกตัวเอาไว้ลองเอาไปใช้กันดูได้นะครับ ลองโหลดไปดูนะครับ

http://www.savefile.com/files.php?fid=8793552

....................................................................

 
Tags: bbs, php

SMF บอร์ดสายพันธุ์ PHP

posted on 10 Apr 2006 23:12 by rije  in PHP

หลายๆ คนที่ทำเว็บ และเคยใช้งานเว็บบอร์ดของ smf กัน
คงจะรู้จักกันดีกับบอร์ดตัวนี้ ที่มีผู้นิยมใช้กันอย่างมาก
smf เป็นบอร์ดสายพันธุ์ใหม่ที่มาแรงในช่วง 3 ปีเลยทีเดียว
ด้วยทั้งประสิทธิภาพของตัวมันเองที่ผู้ใช้หลายคนบอกต่อๆ กัน
นอกจาก smf แล้วก็ยังมีตัวอื่นที่นิยมกันอย่าง phpBB , nvision
และคงมีหลายคนที่อยากจะใช้งานบอร์ดแบบนี้ แต่ไม่รู้วิธี

http://www.simplemachines.org เว็บที่ให้โหลดตัวซอร์ฟแวร์ smf ฟรีครับ


พอคุณได้ตัวไฟล์ .zip มาหลังจากทำการแตกไฟล์ซิบแล้ว
จะพบกับไฟล์เอกสาร .php มากมายและ folders
แรกสุดคุณต้องมี hosting ที่สามารถใช้งาน php ได้
หาก host ที่คุณใช้อยู่ไม่รองรับ php ก็จะใช้งานไม่ได้ครับ
จากนั้นให้ upload ทุก folder ที่มีและไฟล์ .php ทั้งหมดขึ้นไป
สำหรับการ upload แบบ ftp ผมขอแนะนำ WS FTP Pro ครับ


แรกสุดรันเพจ instrall.php ขึ้นตาม url ที่อยู่ หรือไฟล์ index.php ก็ได้ครับ
จะทำการให้เราลง database ของเรา แล้วเริ่มการ instrall ใส่ข้อมูลของคุณไป
ถ้ามันสมบูรณ์จะขึ้นขอความแสดงความยินดีขึ้นมา หากมีปัญหา
จะขึ้นข้อความเตือน error ครับ ให้ลองเช็คข้อมูลและญานข้อมูลดีๆ ครับ
แค่นี้คุณก็ได้บอร์ดสมใจแล้วล่ะครับ ต่อไปคุณต้องทำการปรับเปลี่ยน
ไม่ว่าจะเป็น themes หรือว่า icon ต่างๆ ตามใจคุณครับ ^_^


หากมีข้อสงสัยปัญหาก็เข้าไปที่บอร์ดของผมดูได้ครับ
http://www.izdea.com/bbs/index.php
ที่นี่นอกจากผมก็จะมีเพื่อนอีกคนที่เค้ารู้เรื่องนี้เป็นอย่างดีให้คำตอบครับ
ปกติผมใช้ phpBB แต่เค้าบอกว่ามันไม่ค่อยดีมีปัญหาเยอะ
เลยเปลี่ยนมาใช้ smf ครับ เคยเป็น admin ให้บอร์ด ommamm
อยู่พักนึงครับ เลยได้ลองทดสอบระบบ ซึ่งมันก็เหมือนกันครับ ^_^
บอร์ดผมตอนนี้ยังไม่มีอะไรครับ เพราะยังไม่ได้ปรับแก้อะไรมากมาย
รอตัวเว็บที่ต้องทำใหม่หมดครับ เลยยังอีกนานกว่าเว็บจะเปิดแน่ๆ T_T

ถ้าสนใจลองเข้าไปโหลดมาใช้ดูนะครับ ^_^
ENJOY!