ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingอยากเขียนสคริป PHP ไว้กรองข้อความต่างๆ ที่ไม่ต้องการครับ ช่วยที
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: อยากเขียนสคริป PHP ไว้กรองข้อความต่างๆ ที่ไม่ต้องการครับ ช่วยที  (อ่าน 1730 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
หูกาง
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 113
ออฟไลน์ ออฟไลน์

กระทู้: 1,325



ดูรายละเอียด เว็บไซต์
« เมื่อ: 26 กันยายน 2008, 00:51:57 »

คือว่าจะรับค่ามาจากอีกหน้าหนึ่ง ( รับข้อมูลแบบ $_GET[] ) ที่ไม่แน่ใจว่ามันจะส่งอะไรบ้าๆ บอๆ มาบ้าง เลยอยากจะกรองเอาเฉพาะคำที่อยากจะได้ครับ โดยเราจะกรองแบบมีเงื่อนไขดังนี้ครับ

- ไม่เอาข้อมูลที่มีอักขระต่างๆ บนมา เช่น /,\,[,],@,#,!,{,},&,฿ เป็นต้น
- ไม่เอาข้อมูลที่มีข้อความขึ้นต้นด้วย http
 
ซึ่งถ้าเป็นข้อมูลพวกนี้ส่งมาจะไม่สนใจเลยครับ (ไม่เก็บลงฐานข้อมูล) แต่ถ้านอกเหนือนี้เก็บหมดครับ...ผมลองเขียน (ตามที่พอรู้) แล้วแต่มันไม่ยอมกรองทั้งหมดที่บอกไปด้านบนนั้นครับมีหลุดๆ มาเยอะมากต้องตามไปลบทุกวัน เหนื่อย...อิอิ

ขอบคุณครับ
 Embarrassed
บันทึกการเข้า

tommy009
ก๊วนเสียว
*

พลังน้ำใจ: 17
ออฟไลน์ ออฟไลน์

กระทู้: 211



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 26 กันยายน 2008, 06:08:37 »

ลองหาเกี่ยวกับ regular expression ใน Google หรือ php.net ครับ
บันทึกการเข้า

ThaNaButS
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 67
ออฟไลน์ ออฟไลน์

กระทู้: 1,197



ดูรายละเอียด
« ตอบ #2 เมื่อ: 26 กันยายน 2008, 09:58:45 »

โค๊ด:
<?
$input = "/,\,[,],@,#,!,{,},&,฿,http";
$output = str_replace('http', '', $input);
$output = str_replace('@', '', $output);
$output = str_replace('#', '', $output);
$output = str_replace('/', '', $output);
$output = str_replace('\\', '', $output);
$output = str_replace('[', '', $output);
$output = str_replace(']', '', $output);
$output = str_replace('!', '', $output);
$output = str_replace('{', '', $output);
$output = str_replace('}', '', $output);
$output = str_replace('&', '', $output);
$output = str_replace('฿', '', $output);
echo $output; //,,,,,,,,,,,
?>

ประมาณนี้ได้ไหมคับ  Grin Grin Grin วิธีดิบๆเลยยยย

ลองดู
โค๊ด:
http://php.deeserver.net/download/get/21/banword.zip
อาจช่วยได้คับ

ขออภัยมือใหม่หัดเขียน
« แก้ไขครั้งสุดท้าย: 26 กันยายน 2008, 10:12:18 โดย ThaNaButS » บันทึกการเข้า
หูกาง
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 113
ออฟไลน์ ออฟไลน์

กระทู้: 1,325



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 26 กันยายน 2008, 11:11:56 »

โค๊ด:
<?
$input = "/,\,[,],@,#,!,{,},&,฿,http";
$output = str_replace('http', '', $input);
$output = str_replace('@', '', $output);
$output = str_replace('#', '', $output);
$output = str_replace('/', '', $output);
$output = str_replace('\\', '', $output);
$output = str_replace('[', '', $output);
$output = str_replace(']', '', $output);
$output = str_replace('!', '', $output);
$output = str_replace('{', '', $output);
$output = str_replace('}', '', $output);
$output = str_replace('&', '', $output);
$output = str_replace('฿', '', $output);
echo $output; //,,,,,,,,,,,
?>

ประมาณนี้ได้ไหมคับ  Grin Grin Grin วิธีดิบๆเลยยยย

ลองดู
โค๊ด:
http://php.deeserver.net/download/get/21/banword.zip
อาจช่วยได้คับ

ขออภัยมือใหม่หัดเขียน


พอไหวๆ อิอิ ขอบคุณครับ
บันทึกการเข้า

ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #4 เมื่อ: 26 กันยายน 2008, 11:57:04 »

โค๊ด:
<?php

function sanitized_data($text){
   if(
preg_match('/^http/' $text)) return false;
   return 
preg_replace('/[^0-9a-z\.\_\-]/i','',$text);
}


////////////////////////////////////////

// USAGE EXAMPLE
if($_GET['xxx'] = sanitized_data($_GET['xxx'])) {
    
// INSERT TO DATABASE
}

?>

การทำงานของฟังก์ชั่นคือ ขั้นแรกเช็คข้อความก่อนว่าขึ้นต้นด้วย http หรือไม่ ถ้าใช่ return false
ต่อมาทำการตัดอักขระที่ไม่ใช่ตัวที่ต้องการออกให้หมด แล้ว return ผลลัพธ์กลับไป


เพิ่มเติม

preg_replace($pattern,$replace,$original);

preg_replace() เอาไว้แทนคำหรือตัดคำด้วย regular expression
$pattern คือ regular expression

'/[^0-9a-z\.\_\-]/i' หมายความว่า ทุกอักขระที่ไม่ใช่ เลข 0-9 ไม่ใช่ a-z ไม่ใช่ . ไม่ใช่ _ ไม่ใช่ -
ตัว i ท้าย pattern หมายถึง ตรวจสอบ pattern ในโหมด case insensitive

$replace คือ ตัวที่จะเอามาแทน ในกรณีนี้จะตัดออกเลยใช้ ''
$original คือ ข้อความที่เอามาดำเนินการ

ฟังก์ชั่นที่เกี่ยวข้อง

preg_match
preg_replace
และก็วิธีใช้ regex pattern เบื้องต้นน้องโจ้เอามาสอนแล้วใน webdev หาเอานะครับ


ปล. คงไม่เห็นว่าผมประเคนมากเกินไปนะ ขอให้รวยๆคับ
บันทึกการเข้า

ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #5 เมื่อ: 26 กันยายน 2008, 12:06:57 »

ไหนๆแล้วขออีก 1

เกี่ยวกับการใช้ฟังก์ชั่น str_replace()

อากิวเม้นท์ที่เอามาใช้ใน str_replace สามารถเป็น array ได้ เพราะงั้นเราก็ไม่จำเป็นต้องใช้ str_replace หลายๆครั้ง

แบบนี้

โค๊ด:
<?php

function remove_bad_chars($text){
    
$bad_chars = array('/' '\\' '[' ']' '@' '#' '!' '{' '}' '&' '฿' 'http');
    return 
str_replace($bad_chars '' $text);
}

?>

ทำงานได้เหมือนด้านบนแต่สั้นขึ้นเป็นกอง

เทคนิคนี้ได้มาจากคุณ payu ขอขอบคุณอีกทีคับ
บันทึกการเข้า

หูกาง
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 113
ออฟไลน์ ออฟไลน์

กระทู้: 1,325



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 26 กันยายน 2008, 12:39:32 »

ขอบคุณครับ ได้ความรูอีกแล้ว
บันทึกการเข้า

หูกาง
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 113
ออฟไลน์ ออฟไลน์

กระทู้: 1,325



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 27 กันยายน 2008, 10:17:39 »

สคริปท่าน ball6847 ใช้ได้ดีเลยครับ Cry

แต่ตอนนี้มีปัญหาใหม่คือมันไม่ยอมกรองช่องว่างครับ เช่น เวลา user ป้อนช่องว่างปล่าวมา แล้วกด  submit มันก็ยังบันทึกลงฐานข้อมูลทั้งๆ ที่ผมก็กรองในระดับหนึ่งแล้วนะครับด้วยสคริปนี้

โค๊ด:
$a=$_GET[xxx];

if ($a=="")

{ echo "no data";}

else

{ add to database}

งง ครับว่าหลุดมาได้อย่างใด?
« แก้ไขครั้งสุดท้าย: 27 กันยายน 2008, 10:20:40 โดย หูกาง » บันทึกการเข้า

ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #8 เมื่อ: 27 กันยายน 2008, 11:45:22 »

โค๊ด:
<?php

function sanitized_data($text){
   if(empty(
$text) || preg_match('/^http/' $text)) return false;
   return 
preg_replace('/[^0-9a-z\.\_\-]/i','',$text);
}


////////////////////////////////////////

// USAGE EXAMPLE
if(!empty($_GET['xxx']) && $_GET['xxx'] = sanitized_data($_GET['xxx'])) {
    
// INSERT TO DATABASE
}

?>


มะได้บอกนี่นา เอิ้กๆ  Cheesy
กรอง 2 ชั้นดูซิว่ามันจะผ่านมาได้มั้ย อิอิ   Grin
บันทึกการเข้า

หูกาง
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 113
ออฟไลน์ ออฟไลน์

กระทู้: 1,325



ดูรายละเอียด เว็บไซต์
« ตอบ #9 เมื่อ: 27 กันยายน 2008, 18:01:35 »

ขอบคุณอีกครั้งครับ
ไว้ผมจะลองไปประยุคใช้งานดู แหมะ...ถ้าไม่ได้ท่านเข้าช่วยนี่ผมงมโข่งเป็นเดือนๆ แน่เลยกว่าจะหาวิธีได้.

 Cry
บันทึกการเข้า

awat
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 46
ออฟไลน์ ออฟไลน์

กระทู้: 1,214



ดูรายละเอียด
« ตอบ #10 เมื่อ: 27 กันยายน 2008, 18:58:26 »

คุณ ball ตอบได้ใจจริง ๆ
  Smiley Smiley
บันทึกการเข้า

.NET Developer, Cloud computing Developer
รับทำ component joomla, wordpress, drupal
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #11 เมื่อ: 27 กันยายน 2008, 21:13:28 »

สคริปท่าน ball6847 ใช้ได้ดีเลยครับ Cry

แต่ตอนนี้มีปัญหาใหม่คือมันไม่ยอมกรองช่องว่างครับ เช่น เวลา user ป้อนช่องว่างปล่าวมา แล้วกด  submit มันก็ยังบันทึกลงฐานข้อมูลทั้งๆ ที่ผมก็กรองในระดับหนึ่งแล้วนะครับด้วยสคริปนี้

โค๊ด:
$a=$_GET[xxx];

if ($a=="")

{ echo "no data";}

else

{ add to database}

งง ครับว่าหลุดมาได้อย่างใด?

ใช้ trim กรองค่าที่รับมาก่อนนำมาใช้ครับ
ถ้ามีแต่ช่องว่าง มันจะกรองทิ้งจนไม่มี
พอเราไปใช้กับที่คุณบอลเขียน มันก็จะ false ไม่ผ่านให้ครับ
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์