การดึงรูปมาแสดงที่หน้าเว็บ phpbb จากการตรวจจับแทก [img] ....

ปรับแต่งแก้ไขโค้ด ปัญหาการติดตั้งและการใช้งาน Mod ต่างๆ เพิ่มเพิ่มความสามารถของ บอร์ด ไม่รู้จะใช้ Mod อะไร ดี ถามได้ที่นี่ ติดตั้ง Mod แล้วมีปัญหา มี Mod ดีๆ อย่าง share เพื่อนเชิญบอร์ดนี้

Moderator: phpbb, mindphp, ผู้ดูแลกระดาน

ตอบกลับโพส
sazukia007
phpBBThailand Super Hero Member
phpBBThailand Super Hero Member
โพสต์: 747
ลงทะเบียนเมื่อ: 19 ม.ค. 2009, 21:53

การดึงรูปมาแสดงที่หน้าเว็บ phpbb จากการตรวจจับแทก [img] ....

โพสต์ โดย sazukia007 »

การดึงรูปมาแสดงที่หน้าเว็บ phpbb จากการตรวจจับแทก [img] ....***...[img]


เรื่องนี้ค่อนข้างละเอียดอ่อนดังนั้นขอให้ไปอ่านเนื้อหาที่เกี่ยวข้อง 2 เรื่องด้วยกันคือ
1. การดึงข้อมูลมาแสดงหน้าเว็บ ด้วยการเชื่อมต่อฐานข้อมูล
2. จะดึงภาพจากฐานข้อมูลโดยใช้ tag [img]...[ img] อ่านสองเรื่องนี้แล้วชีวิตคุณจะดีขึ้น

ปัญหาหนักอกตอนที่เราเริ่มทำครั้งแรกและหลาย ๆ ต่อที่ตามมาก็คือมันดึงไม่ได้ จึงได้ลองเปลี่ยนโค้ด เงื่อนไข จิปาถะ ก็ยังไม่ได้ เลยเปลี่ยนเป็นดึงจากระบบอื่นที่ไม่ใช้บอร์ด phpbb ผลที่ได้คือมันใช้ได้ โค้ดที่ใช้ไม่มีปัญหา ดังนั้นปัญหาอยู่ที่ตัวบอร์ดเอง (ที่จริงมันก็ไม่ใช้ปัญหาหรอก แต่เราไม่เข้าใจมันเองนั้นแหละ) เราลองทำหลายอย่างหนึ่งในนั้นก็คือ ดึงฐานข้อมูลออกมาดูโดยตรง แล้วก็พบกับปัญหาบางอย่างเข้าจนได้

โค้ด: เลือกทั้งหมด

[img:3700tckj]http://siamboss.com/images/art/Virgin%20and%20Child%20with%20Angels%20and%20Saint.jpg[/img:3700tckj] 
อืม.....!!? ยาว ๆ ซักครึ่งนาที มันคืออะไรครับพี่น้องไอ้นี้คือโค้ดแท็ก [img] ที่เราใช้กันอยู่นั้นแหละ ทีแรกก็ยังไม่เอะใจอะไร จนได้ไปเทียบกับสคริปชาวบ้าน ซึ่งจะเป็น

โค้ด: เลือกทั้งหมด

[img]ที่อยู่รูป[/img] 
สิ่งที่ต่างกันระหว่างสองบรรทัดนี้มีอยู่สองจุด คือการแปลงสัญลักษณ์ ซึ่งสคริปอื่นก็มีบางเจ้า ส่วนอีกแห่งคือ :3700tckj มันคืออะไรที่ทำให้คนดูงงมากเพราะไม่มีาสคริปอื่นเหมือนเลย จึงลองลากใส้ตารางและฟีลของมันออกมาดูก็พบอีกครั้ง

รูปที่ 1
1.jpg
1.jpg (45.25 KiB) เปิดดู 13047 ครั้ง

bbcode_uid มันคือไรหว่า.......? หนูงง จึงได้ดูกระทู้อื่นก็พบว่าเจ้าตัวนี้จะทำหน้าที่กำกับอยู่หลัง bbcode ทุกตัว ของย้ำทุกตัว ด้านล่างคือโค้ดบางส่วนที่ดึงมาจากเว็บเค้าเอง ซึ่งซับซ่อนนิดหนึ่ง ถ้าใครงงว่ามันคืออะไร เจ้านี้คือโค้ดที่ใช้โพสตารางคะแนนส่วนบน สังเกตดูว่าเห็นอะไรใหม?

โค้ด: เลือกทั้งหมด

[thead:u1a8dmtu][/thead:u1a8dmtu]
[tscore:u1a8dmtu][a1:u1a8dmtu]2[/a1:u1a8dmtu]--[a2:u1a8dmtu]http://siamboss.com/images/club-logo/Arsenal.png[/a2:u1a8dmtu]--[a3:u1a8dmtu]อาร์เซนอล[/a3:u1a8dmtu]--[a4:u1a8dmtu]26 17 5 4 48 26 22 56[/a4:u1a8dmtu][/tscore:u1a8dmtu]
:u1a8dmtu ตัวนี้ก็คือ ไอ้ตัวที่กล่าวไว้ด้านบน โดยจะสุ่มในแต่ละโพสไม่ซ้ำกันเลย ตอนนี้ที่พูดมาทั้งหมดเป็นเพียงการบอกให้เข้าใจว่าทำไมโค้ดทั่วไปจึงใช้ไม่ได้ หรือจะบอกว่านี้ยังแค่แง้มฝาโลงเท่านั้น ความสนุกยังอีกยาวไกล...... ว่าไปนั้นที่จริงมันใกล้จบแล้ว T_T

มาเริ่มกันเลยพี่น้อง
ก่อนอื่นเชื่อมต่อฐานข้อมูล
ไฟล์ connect

โค้ด: เลือกทั้งหมด

<?
$objConnect = mysql_connect("localhost","root","147") or die("Error Connect to Database");
$objDB = mysql_select_db("vrity");
mysql_query("SET character_set_results=utf8");  
mysql_query("SET character_set_client=utf8");  
mysql_query("SET character_set_connection=utf8"); 

?>
<?

$taxe_1 = "2";
$taxe_2 = "3";
$taxe_3 = "4";
$taxe_4 = "5";

?>
$taxe_1-4 คือตัวแปรที่สามารถดึงไปใช้ในงานชิ้นต่อไปได้ ถ้ามีคนถามว่าแล้วมันใช้ยังไง ก็จะตอบง่าย ๆ คุณเอ็งกลับไปอ่านบรรทัดแรกอีกรอบ แล้วชีวิตจะดีขึ้น

1. เริ่มออเดิร์ฟเบา ๆ ด้วยการดึงชื่อหมวดหมู่ที่จริงมันก็ไม่ยากในส่วนนี้
ไฟล์ทดสอบ 1.0

โค้ด: เลือกทั้งหมด

<?
include("connect.php");
?>


<?
$strSQL = "SELECT * FROM phpbb_forums WHERE forum_id = taxe_1";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
?>
<?
$i=0;
while($objResult = mysql_fetch_array($objQuery))
{
 ?>	
โค้ดแสดง

โค้ด: เลือกทั้งหมด

<a href="./viewforum.php?f=<?=$objResult["forum_id"];?>"><?=$objResult["forum_name"];?></a>

<?
}
?>


<?
mysql_close($objConnect);
?> 

2. มาเริ่มมื้อหลักกันเลย
ไฟล์ทดสอบ 2.0

โค้ด: เลือกทั้งหมด

<?
include("connect.php");
?>

<?
$strSQL = "SELECT * FROM phpbb_posts
WHERE post_approved = 1 AND forum_id = taxe_2 ORDER BY topic_id DESC limit 1";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");

$i=0;
while($objResult = mysql_fetch_array($objQuery))
{
	$posttext = $objResult["post_text"];
	$bbcodeid = $objResult["bbcode_uid"];
}
?>

<?
$message = "<? echo '$posttext';?>";
preg_match_all("~\[img:$bbcodeid\]([^\[]+)\[\/img:$bbcodeid\]~",$message,$img); 
krsort($img [1]);
foreach($img [1] as $image){
   $path = $image;
}
   $showimg = "$path";  
     
?>
โค้ดแสดง

โค้ด: เลือกทั้งหมด

<img src='<? echo "$showimg";?>' />


<?
mysql_close($objConnect);
?> 

อธิบายเพิ่มเติมครับ
forum_id = taxe_2 คือไอดีของบอร์ดที่ต้องการดึงรูปมาแสดง
limit 1 แสดง 1 กระทู้ล่าสุด
$posttext = $objResult["post_text"]; ดึงข้อมูลจาก post_text
$bbcodeid = $objResult["bbcode_uid"]; ดึงข้อมูลจาก bbcode_uid
$message = "<? echo '$posttext';?>"; นำสิ่งที่ได้มาวิเคราะห์เพื่อหาสิ่งที่ต้องการ

ซึ่งสามารถนำมาประยุกให้เข้ากับระบบสร้างรูปย่อ แต่ในเว็บเราใช้ม็อดสร้างรูปย่อ First_Topic_[pic]_on_Forum_Index เลยดึงมาจากมันอีกที แต่ก็ต้องใช้โค้ดด้านบนนี้ในการหาชื่อไฟล์รูปเพื่อนำมาใช้ที่หน้าหลักอีกทอด เห็นชื่อมันบอกว่า on_Forum_Index มันดึงมาหน้าแรกไม่ได้นะ ต้องเขียนโค้ดที่ให้ไปนี้เพิ่ม หรือมันทำได้ก็ไม่รู้ ??....


3. เสริมให้อีกนิดการดึงรูปแนบในกระทู้ attachment
ไฟล์ทดสอบ 3.0

โค้ด: เลือกทั้งหมด

<?
include("connect.php");
?>

<?
$strSQL = "SELECT * FROM phpbb_topics 
WHERE topic_approved = 1 AND forum_id =$category_1 AND topic_moved_id = 0 AND topic_attachment = 1 ORDER BY topic_id DESC limit 0,1";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
?>

<?
$i=0;
while($objResult = mysql_fetch_array($objQuery))
{
	$topicID = $objResult["topic_id"];
	$topicName = $objResult["topic_title"];
?>

<?
}
?>


 <?
$strSQL = "SELECT * FROM phpbb_attachments
WHERE topic_id ='$topicID' ORDER BY topic_id DESC limit 0,1";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
?>
 
 <?
$i=0;
while($objResult = mysql_fetch_array($objQuery))
{
	$attacID = $objResult["attach_id"];
	
?>	
โค้ดแสดง

โค้ด: เลือกทั้งหมด

<img src='./download/file.php?id=<? echo "$attacID";?>' class='Thumbnail thumbnail featured-cat ' width='300' height='180'>
<?
}
?>

<?
mysql_close($objConnect);
?> 

การดึงแบบนี้จะสามารถดึงได้ทีละภาพเท่าที่ทำได้ตอนนี้แล้วกำหนดให้แสดงกระทู้ที่เท่าไรโดยใช้ limit 0,1 เช่นแสดงกระทู้ที่สองก็จะเปลี่ยนเป็น limit 1,1 และยังมีข้อเสียอีกประการคือมันดึงรูปใหญ่ออกมาจึงทำให้หน้าเว็บโหลดช้าขึ้น ดังนั้นอย่างที่บอกเราเลยจัดการติดตั้งม็อดสร้างรูปย่อ แล้วดึงรูปนั้นมาแทน ถ้าอยากรู้ว่ามันทำอะไรได้บ้างก็ไปดูเว็บเราได้เลยในลายเซ็น
แล้วก็อันนี้ธีมที่เราทำขาย
siamboss.com/DEMO
ขอเนียนหน่อย อิอิ ระบบทุกอย่างออโต
ตอบกลับโพส

ย้อนกลับไปยัง

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: 101 และ บุคคลทั่วไป 0 ท่าน