[! มากันบอร์ด SMF ไม่ให้ฝรั่งโพสต์spamกันเถอะ] สไตล์ไทยๆป้องกันก่อนโพสต์ข้อความ!
เผื่อเพื่อนๆบางคนยังไม่ได้ลง mod กันการแสปมเพิ่มครับ
ต้องขอบคุณพี่ต่อ tdelphi ที่แนะนำไอเดียให้
จริงๆก็มี mod อยู่หลายตัว แต่บางทีไม่ตรงตามความต้องการในการใช้งาน และส่วนใหญ่เป็น mod ตอนจะ register
ผมก็เลยลองเขียนมันเองดูให้กันตอนกรอกข้อความกระทู้ที่จะโพสต์ด้วย ถ้าใครยังโดนแสปมจากฝรั่งอยู่ก็ลองใช้ mod นี่ดูนะครับ เพิ่งเขียนเสร็จแล้วก็เทสไปแล้ว ok ใช้ได้ดีไม่มีปัญหา
( หมายเหตุลองกับ smf ไม่ได้เวอร์ชั่นใหม่สุด แต่ก็เป็นมาตรฐาน ok โย่วๆ ก่อนแก้ไขกรุณา backup ไฟล์เดิมของท่านที่จะแก้ไขเอาไว้ก่อน กันข้อผิดพลาดที่อาจเกิดขึ้นครับ )
-----------------------------------------------------------------------
มาเริ่มกันเลยครับ เปิดไฟล์ Themes/default/Post.template.php หรือ theme ที่คุณใช้และมีการสร้าง template แยก ก็ให้เลือกไฟล์ Post.template.php
ประมาณบรรทัดที่ 969 จาก default theme จากโค๊ด
// Finally the most important bit - the actual text box to write in!
echo '
<tr>
<td valign="top" align="right"></td>
<td>
<textarea class="editor" name="', $context['post_box_name'], '" rows="', $context['post_box_rows'], '" cols="', $context['post_box_columns'], '" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onchange="storeCaret(this);" tabindex="', $context['tabindex']++, '"', isset($context['post_error']['no_message']) || isset($context['post_error']['long_message']) ? ' style="border: 1px solid red;"' : '', '>', $message, '</textarea>
</td>
</tr>';
ใส่โค๊ดนี้เพิ่มเติมต่อท้ายเข้าไปครับ
// tohm block farang แสดงช่องให้กรอกข้อมูลกันการแสปมแบบภาษาไทย
echo '
<tr>
<td valign="top" align="right">กันการแสปม</td>
<td>
'.$txt['randomblockfarang'].' <input type="text" name="ForThaiPost" size="50" />
</td>
</tr>' ;
-------------------------------------------------------------------------
ทีนี้เปิดไฟล์ Themes/default/languages/Errors.english <- หากใช้ eng lang และ Errors.thai-utf8.php <- หากใช้ภาษาไทยร่วมด้วย
เพิ่มโค๊ดนี้เข้าไปครับ เอาไว้ล่างสุดของบรรทัดก็ได้
$txt['error_answer_wrong'] = 'คำตอบเพื่อกันการแสปมของคุณไม่ถูกต้อง!' ;
หรือใส่โค๊ดนี้เข้ไปสำหรับเวอร์ชั่นภาษาอังกฤษ
$txt['error_answer_wrong'] = 'your answer not match!' ;
----------------------------------------------------------------------
ทีนี้ก็มาที่ไฟล์สุดท้ายครับ เปิดไฟล์ Sources/Post.php
ที่ function Post ประมาณบรรทัดที่ 92 หรือจากโค๊ด
function Post()
{
global $txt, $scripturl, $topic, $db_prefix, $modSettings, $board, $ID_MEMBER;
global $user_info, $sc, $board_info, $context, $settings, $sourcedir;
global $options, $func, $language;
loadLanguage('Post');
เพิ่ม code นี้เข้าไปครับ
/* tohm block farang เพิ่มโค๊ดส่วนของป้องกันการแสปมจากต่างประเทศ powered by Ittiphol Pudgrajang */
$blockfarang = array('A'=>array('คำนำหน้านามของผู้ชายไทยคือ','นาย'),
'B'=>array('คำนำหน้านามของผู้หญิงไทยที่แต่งงานแล้วคือ','นาง'),
'C'=>array('คำว่า "เมีย" ในภาษาไทย เรียกให้สุภาพอีกอย่างหนึ่งคือ','ภรรยา'),
'D'=>array('คำว่า "การท่องเที่ยว" มีตัว "ท" อยู่ทั้งหมดกี่ตัว (ตอบเป็นตัวเลข)','2')
)
;
shuffle($blockfarang) ;
$txt['randomblockfarang'] = $blockfarang[0][0] ;
$_SESSION['blockfarang_answer'] = $blockfarang[0][1] ;
--------------------------------------------------------------------
ขั้นตอนสุดท้ายครับ ไปที่ function Post2 ประมาณบรรทัดที่ 1280 หรือตรงโค๊ด
// Check the subject and message.
if (!isset($_POST['subject']) || $func['htmltrim']($_POST['subject']) === '')
$post_errors[] = 'no_subject';
if (!isset($_POST['message']) || $func['htmltrim']($_POST['message']) === '')
$post_errors[] = 'no_message';
ให้เพิ่มคำสั่งนี้ต่อท้ายเข้าไปครับ
/* tohm block farang powered by Ittiphol Pudgrajang */
if($_SESSION['blockfarang_answer']!=$_POST['ForThaiPost']) // ตรวจสอบข้อความที่กรอกมากันฝรั่งแสปม
$post_errors[] = 'answer_wrong' ;
##########################################
upload script ที่แก้ไข แล้วลองเตรียมโพสต์ดูครับ ก็จะเห็นว่ามีข้อความกันการแสปมจากฝรั่งเพิ่มเข้ามา
ในส่วนของคำถามคำตอบเพื่อนๆสามารถแก้ไขหรือเพิ่มเติมได้เองนะครับ ที่ตัวแปลหลักเลยครับ
$blockfarang = array('A'=>array('คำนำหน้านามของผู้ชายไทยคือ','นาย'),
'B'=>array('คำนำหน้านามของผู้หญิงไทยที่แต่งงานแล้วคือ','นาง'),
'C'=>array('คำว่า "เมีย" ในภาษาไทย เรียกให้สุภาพอีกอย่างหนึ่งคือ','ภรรยา'),
'D'=>array('คำว่า "การท่องเที่ยว" มีตัว "ท" อยู่ทั้งหมดกี่ตัว (ตอบเป็นตัวเลข)','2')
) ;
$blockfarang = array('Aหรืออะไรก็ได้เป็น key เผื่อนำไปประยุกข์ใช้ลักษณะอื่น => array('คำถาม','คำตอบ') ,
'Bคำถามอื่นๆ=>array('คำถามอื่น','คำตอบอื่นๆ)
) ;
###################################################
ลองประยุกข์ใช้งานกันดูนะครับ เผื่อมีประโยชน์สำหรับบางท่านที่ยังไม่ได้ลง mod เพิ่มครับ