|
|
|
มี 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 :
1061 |
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|