|  | 
	                
  
    | 
	 
        มี tips technic ดีๆมาฝากครับ เกี่ยวกับการเพิ่มแทกคำสั่งให้เนื้อหา (เหมาะสำหรับคนที่ทำฟอร์มเพื่อกรอกเนื้อหาในเว็บอย่างมาก)     |  
    |  |  
 
	
		|  |  |  |  |  
		|  |  | 
          
            | http://www.okvee.net/2010/11/08/%E0%B9%80%E0%B8%9E%E0%B8%B4%E0%B9%88%E0%B8%A1%E0%B8%84%E0%B8%B3%E0%B8%AA%E0%B8%B1%E0%B9%88%E0%B8%87%E0%B9%83%E0%B8%AB%E0%B9%89%E0%B9%80%E0%B8%99%E0%B8%B7%E0%B9%89%E0%B8%AD%E0%B8%AB%E0%B8%B2/ 
 การเพิ่มคำสั่งให้กับเนื้อหา จะว่าไปแล้วก็คล้ายๆกับ BBcode นั่นแหละ แต่นอกจากจะใช้ประโยชน์ใน forum แล้วยังเอามาทำประโยชน์อย่างอื่นได้ด้วย.
 
 ยกตัวอย่างเช่น มีการทำหน้าอัปโหลดวิดีโอขึ้นมา แต่ทาง Shared hosting ที่เราใช้ไม่มี ffmpeg ที่สามารถแปลงวิดีโอเป็นภาพได้ไว้ให้ใช้ เราก็ต้องสร้างภาพ screenshot เอาเอง.
 ในกรณีนี้การแทรกคำสั่งให้เนื้อหาเป็นวิธีที่ง่ายที่สุด เพราะไม่ต้องสร้างฟิลด์ในฐานข้อมูลเพิ่มเติม ไม่ต้องสร้างฟอร์มเพิ่มเติมอะไรอีก แทรก URL screenshot ลงไปในคำอธิบายนั่นแหละ.
 
 หากนึกไม่ออกขอให้นึกถึง Youtube ที่จะมีคำสั่งให้เราได้แทรกอยู่ เช่นคำสั่งสำหรับวิดีโอ 3 มิติ เป็นต้น.
 
 หากนึกออกแล้ว ก็หวังว่าผู้อ่านจะมีจินตนาการเอาไปใช้งานอย่างอื่นได้อีกมากมาย…
 เรามาดูโค้ดกัน. [Download code ตัวอย่างจาก URL ข้างบน]
 
 Code (PHP)
 
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test tag cmd</title>
</head>
<body>
<h1>test tag cmd</h1>
<p>eg. [cmd screenshot=http://www.xxx.xxx/img.jpg width=500]</p>
<?php $act = ( isset($_GET['act']) ? $_GET['act'] : ""); ?>
<?php if ( $act == null ): ?>
<form method="post" action="testtagcmd.php?act=post">
<textarea name="cmd" rows="7" cols="60"><?php echo @$_POST["cmd"]; ?></textarea>
<input type="submit" value="submit" style="display:block;" />
</form>
<?php else: ?>
<a href="testtagcmd.php">back</a>
<hr />
<?php
$cmd = ( isset($_POST["cmd"]) ? $_POST["cmd"] : "");
echo "<p><b>input cmd: ".htmlentities($cmd, ENT_QUOTES, "UTF-8")."</b></p>";
if ( $cmd != null ) {
	$lkupcmd = lookupcmd($cmd);
	echo "<pre>";
	print_r($lkupcmd);
	echo "</pre>";
	if ( isset($lkupcmd['screenshot']) ) {
		echo "screenshot = ".$lkupcmd['screenshot']['value']."<br />";
		echo "width = ".$lkupcmd['width']['value']."</p>";
	} else {
		echo "<p>\$lkupcmd['screenshot'] is NOT set</p>";
	}
}
?>
<?php endif; ?>
</body>
</html>
<?php
function lookupcmd($string = '', $name = '') {
	if ( $string == null ) {return null;}
	//if ( $name == null ) {return null;}
	if ( preg_match('/\[cmd (?<commands>.*)]/', $string, $out) ) {
		// found as $out['commands']
		$commands = preg_split('/ /', $out['commands']);
		foreach ( $commands as $key => $item ) {// $item is like name=value
			preg_match('/(?<name>\w+)=(?<value>.*)/', $item, $out2);
			$output[$out2['name']]['value'] = $out2['value'];
		}
		return $output;
	} else {
		// not found
		return null;
	}
}// lookupcmd
?>
 ในส่วนของฟังก์ชั่น lookupcmd() จะทำการหาตัวเปิดคำสั่ง [cmd และตัวปิดคำสั่ง ] ให้เจอเสียก่อน preg_match(‘/\[cmd (?<commands>.*)]/’, $string, $out)
 
 จากนั้นจึงเอาชุดคำสั่งที่เลาะออกมาแล้วมาแยกจากกันด้วยพื้นที่ว่าง (space) ซึ่งมันจะรองรับหลายๆคำสั่งในแทกเดียวกัน ไม่ต้องเขียนคำสั่งหลายๆที เขียนบรรทัดเดียวได้หลายคำสั่งเลย
 
 พอแยกแล้วก็ทำการวนไปตามจำนวน เพื่อหาคำสั่ง=ค่าของมัน อีกทีหนึ่ง preg_match(‘/(?<name>\w+)=(?<value>.*)/’, $item, $out2);
 
 แล้วก็จับยัดใส่ array $output[...] เพื่อจะได้ส่งคำสั่งไปได้พร้อมๆกันหมด เสร็จขั้นตอนในฟังก์ชั่น
 
 การเรียกใช้งาน
 
 กำหนดตัวแปรตัวหนึ่งให้เรียกไปยังฟังกชั่นตามนี้ $lkupcmd = lookupcmd($POST_['cmd']);
 
 จากนั้นการเรียกใช้ก็เพียงเรียกตัวแปรนี้ออกมา echo $lkupcmd['screenshot']['value']; ซึ่งตรงคำว่า screenshot ก็คือสิ่งที่ผู้กรอกฟอร์มกำหนดลงไปนั่นเองว่า screenshot URL คืออะไร
 
 สิ่งที่ต้องระวัง
 
 นอกจากการใช้โค้ดนี้อย่างง่ายแล้ว ยังต้องระวังเรื่องของการกรอกฟอร์มเพื่อซุ่มโจมตี ซึ่งแน่นอนแม้ว่าจะมีแค่ echo $_POST['message']; แสดงสิ่งที่ผู้กรอกเขียนมาก็โดนโจมตีได้แล้ว
 
 ยกตัวอย่างเช่น ผู้ใช้กรอกฟอร์มว่า <script>alert(‘ok’);</script> การ echo ไปบนหน้าเว็บเพจโดยไม่ผ่านการตรวจก่อน จะเปิดช่องว่างให้ใช้โจมตีได้ทันที (ตัวอย่างนี้เป็นแค่ alert ทักทายเท่านั้น)
 
 ดังนั้นจึงต้องป้องกันการกรอกฟอร์มที่มีค่า <script> เข้ามา
 ทั้งนี้ทั้งนั้นขอแนะนำให้หาความรู้เรื่องการป้องกันการโจมตีแบบ xss เพิ่มเติม.
 
 
 
 Tag : PHP
 
 
 |  
            | 
 ประวัติการแก้ไข
 2010-11-09 10:00:10
 |  
            | 
              
                |  |  |  |  
                |  | 
                    
                      | Date :
                          2010-11-09 08:23:20 | By :
                          mr.v | View :
                          1117 | Reply :
                          6 |  |  |  
                |  |  |  |  |  
            |  |  
		            |  |  
		|  |  |  |  |  
  
    | 
 
        
          |  |  |  |  |  
          |  |  | 
            
              | link not found (on FF 3.0) 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2010-11-09 08:29:26 | By :
                            pjgunner.com |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | โค้ดคุณ win ผิดครับไม่สามารถ redirect ภาษาไทยได้ ไม่เชื่อลอง copy url text ไปตรงๆ แทนคลิ้กดูครับ 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2010-11-09 09:55:42 | By :
                            :) |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              |  เดี้ยงเลย 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2010-11-09 10:00:48 | By :
                            mr.v |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | http://www.okvee.net/ เท่านี้ก้อดูได้แล้วค่ะ CONTENT ไม่ค่อยจะเคลื่อนไหวเท่าไรนะคะ ละก้อหมั่นเติมน้ามปลากะบีบมะนาวม่างดิคะ
 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2010-11-09 20:13:59 | By :
                            blurEyes |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | จะเคลื่อนไหวอะไรกันมากมายล่ะครับ ก็ไม่มีสาวสวยมาจิ๊จ๊ะในเว็บเหมือนอย่าง thaicreate นี่นา.. 
 55 ล้อเล่นครับ
 
 ผมงานเยอะ นานๆถึงจะหาเทคนิดดีๆมาฝากหน้าเว็บสักที เรื่องต่อไปผมกำลังคิดจะเขียนเกี่ยวกับการสร้าง email marketing เองแบบสวยๆไม่แคร์ใคร (html email)
 
 รอว่างก่อน
  
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2010-11-09 21:04:38 | By :
                            mr.v |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | เดียวจัดการแก้ไขให้น่ะครับ  
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2010-11-09 21:18:19 | By :
                            webmaster |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  |  |