- ชื่อ: Edit Database
- ผู้เขียน: UnclEo
- นำเสนอโดย: DexMoreGroup
- ประเภท: Administrative
- รองรับ: SMF 1.1.xx, 2.0.xx
- ปรับปรุงล่าสุด: 16 มีนาคม 2554
รายละเอียด ปัญหาการติดตั้ง mod ที่ไม่สามารถจัดการติดผ่านศูนย์จัดการเพคเกจได้ ก็ต้องแก้ไขโค้ดด้วยตัวเอง ซึ่งได้ทำบทความแนะนำผู้ใช้ SMF ไปแล้วก็คงจะใช้แก้ปัญหาในส่วนของการแก้ไขโค้ดไปได้แล้ว แต่ยังมีบาง mod ที่จะต้องเพิ่มตาราง หรือฟิลด์ในฐานข้อมูล โดยมาก mod ของ SMF จะมีไฟล์สำหรับการแก้ไขหรือเพิ่มฐานข้อมูลมาให้แล้ว แต่มันก็ติดปัญหาอยู่ว่าบางครั้งไม่สามารถดำเนินการได้ด้วยปัจจัยสภาพแวดล้อมหลายกรณี
การปรับแต่งนี้ค่อนข้างละเอียดอ่อนผู้ที่จะทำการแก้ไขจะต้องมีความรอบคอบเป็นอย่างมาก เพราะฐานข้อมูลคือส่วนที่บันทึกข้อมูลของบอร์ดทั้งหมดไว้ หากผิดพลาดเสียหายก็หมายถึงคุณต้องเสียข้อมูลทั้งหมด ต่างจากการแก้ไขโค้ดหากผิดพลาดเราก็สามารถย้อนคืนหรืออัพโหลดไฟล์ใหม่ไปทับได้ การป้องกันข้อมูลเสียหายก็คือก่อนทำการแก้ไขหากไม่มั่นใจให้สำรองข้อมูลไว้ทุกครั้ง อาจะเป็นสำรองเฉพาะตารางที่ต้องการแก้ไข หรือสำรองไว้ทั้งหมดก็ได้
แก้ไขฐานข้อมูล: อย่างที่กล่าวไว้แล้วครับว่า mod ของ SMF จะมีไฟล์สำหรับแก้ไขหรือเพิ่มฐานข้อมูลมาให้แล้ว ซึ่งไฟล์จะเป็นนามสกุล .php ขอยกตัวอย่าง 2 mod คือ mod visualwarning และ Hack's Park Shoutbox ซี่ง mod visualwarning จะมีไฟล์ชื่อว่า VisualWarningPdb.php และ mod Hack's Park Shoutbox ชื่อว่า smf-1.1.x_install.php สำหรับแก้ไขฐานข้อมูลของ SMF 1.1.xx และ smf-2.0.x_install.php สำหรับแก้ไขฐานข้อมูลของ SMF 2.0.xx ซึ่ง mod อื่นๆ ก็จะมีชื่อแตกต่างกันออกไป แล้วเราจะรู้ได้อย่างไรไฟล์ใหนที่ใช้ในการดำเนินการกับฐานข้อมูล? อันนี้ไม่ยากเลยครับ ทุก ๆ mod จะมีไฟล์ package-info บอกรายละเอียดการกระทำต่างๆ ของ mod นั้นอยู่ครับ ให้มองหาโค้ด
<code>smf-1.1.x_install.php</code> อันนี้เป็นของ mod Hack's Park Shoutbox ครับ มันบอกว่าไฟล์นี้แหละเป็นไฟล์ที่ดำเนินกับฐานข้อมูล
ก่อนที่เพิ่มหรือแก้ไขเราก็ต้องอ่านคำสั่งที่มีอยู่ในไฟล์ให้ออกก่อนครับ ขอยกตัวอย่างไฟล์จาก mod visualwarning ก่อนนะครับ

อธิบายตามรูป หากท่านคิดจะทำก็ขอให้ไปดาวน์โหลด mod นี้มาแล้วลองเปิดไฟล์นี้ดูและทำตามไปเรื่อยๆ นะครับ ตามรูปนั้นผู้ที่โปรแกรม mod นี้ประกาศอาร์เรย์ เพื่อเก็บตัวแปล และค่าต่างๆ หลายๆ ตัวไว้เป็นชุด
การแทรก ต่อมาก็ใช้คำสั่งนี้

นี่แหละครับเป็นการเรียกใช้อาร์เรย์ ที่ประกาศไว้มาใช้งานด้วยคำสั่ง
INSERT IGNORE INTO {$db_prefix}settingsINSERT INTO = แทรกเข้าไป (ความหมายมันก็ชัดเจนอยู่แล้วนะครับ)
IGNORE = ไม่ต้องสนใจ หากตัวแปรหรือค่าเหล่านั้นมีอยู่แล้ว
{$db_prefix} = คำนำหน้าตารางในปัจจุบัน คำนำหน้าตารางนี้เราได้กำหนดไว้แล้วในไฟล์ Settings.php
settings = ตาราง settings ซึ่งเมื่อรวมกับคำนำหน้าตารางแล้วจะได้เป็น smf_settings (ค่าเดิมของ SMF)
พอจะเข้าใจโดยคร่าวๆ แล้วใช่ไหมครับว่า คำสั่งนั้นมันให้แทรกตัวแปร (variable) และค่า (value) ในตาราง settings คราวนี้ก็มาดูภาคปฏิบัติครับ เปิด phpMyadmin ของท่านขึ้นมาเลย

จัดการแทรกตามในรูปแล้วครับ

สมมุติว่าเราแก้ไขตาม mod นี้นะครับ ก็จัดการนับเลยว่าจะต้องเพิ่มกี่แถว ใน mod นี้มันต้องเพิ่ม 18 แถวตามจำนวนตัวแปลใน array ในรูปที่ 1 ในที่นี้เราสามารถเลือกเป็น 20 แถว และไม่สนใจซะ 2 แถว แล้วก็ทำการเพิ่มค่าโดยคัดลอกไปจากไฟล์เลยดีกว่าครับไม่ต้องมานั่งพิมพ์อยู่ เดียวพิมพ์ผิดพิมพ์ถูกใช้งานไม่ได้ไล่แก้กันยาวอีก

จากรูปนี้ผมเอาตัวแปรและค่าจากอาร์เรย์ ตัวแรกเลยครับคือตัวแปร visualw_pmod_edit และมีค่าเป็น 0 มันมีทั้งหมด 18 แถวก็จัดการไล่ใส่มาให้หมดเลยเสร็จก็กด
ลงมือจบขั้นตอนการแทรกแต่พอคร่าวๆ
การสร้างตาราง ยังอยู่ที่ mod visualwarning นะครับ ถัดลงมาจากรูปที่ 2

จากโค้ดนี้เราจะเห็นคำสั่ง
CREATE TABLE IF NOT EXISTS {$db_prefix}postmoderationCREATE TABLE = สร้างตาราง (ความหมายตรงตัวเลยครับ)
IF NOT EXISTS = หากตารางนี้หากยังไม่มี
{$db_prefix} = คำนำหน้าตารางปัจจุบัน
postmoderation = ชื่อตาราง (สำเร็จเป็น smf_postmoderation)
มาถึงภาคปฏิบัติอีกครั้งครับ เข้าไปใน phpMyAdmin ของคุณเช่นเคย

จัดการเพิ่มตารางครับ โดยในที่นี้ mod นี้มันให้สร้างตารางชื่อ postmoderation เราหลีกเลี่ยงไม่ได้ครับต้องตามนั้น แต่คำนำ้หน้าตารางในตัวอย่างนี้ผมใช้เป็น s13_ ซึ่งท่านไม่ต้องตามผมหรอกคำนำหน้าตารางของท่านเป็นอย่างไรก็ใส่ไปอย่างนั้น เมื่อสร้างตารางแล้วภายในตารางต้องมีฟิลด์ครับ เราก็นับจำนวนฟิลด์อีกครับ จากในโค้ดตัวอย่างตั้งแต่ ID จนถึง ID_POLL ทั้งหมดก็ 13 ฟิลด์ครับ ให้สังเกตุเลข 13 ในรูป เมื่อเรียบร้อยแล้วก็คลิก
ลงมือ
เห็นภาพแล้วเทียบกับโค้ดพอจะนึกอะไรออกไหมครับ เปรียบเทียบระหว่างโค้ดกับรูปเอานะครับแล้วจะเข้าใจอะไรๆ ขึ้นมาอีกมากมาย
ชื่อของฟิลด์ = ID
ชนิดของข้อมูล = INT
ความยาวของข้อมูล = 11 (INT คือตัวเลขจำนวนเต็ม 11 = จำนวนตัวเลข ของ ID ในที่นี้คือ ID มีความยาว 11 ตัวเลขจำนวนเต็ม)
ค่าปริยาย = ในฟิล์ด์นี้ไม่มีค่าปริยาย
การเรียงลำดับ = ในฟิลด์นี้ไม่มีการเรียงลำดับเพราะไม่ใช้ตัวอักษร
แอตทริบิวต์ = ในฟิลด์นี้ไม่มีแอตทริบิวต์
ว่างเปล่า = NOT NULL
A_I = AUTO_INCREMENT
ความหมายของค่าเหล่านี้ท่านจำเป็นต้องค้นคว้าเรียนรู้ด้วยตัวเองนะครับ จะให้ผมอธิบายในนี้ทั้งหมดคงเป็นไปได้ยาก แนะนำไว้แค่พอเป็นพืื้นฐานเท่านั้นเอง เมื่อเสร็จแล้วก็คลิก
บันทึก จะได้หน้าตาแบบนี้ครับ

ยังมีอีกหนึ่งคำสั่งคือ
PRIMARY KEY (ID) คือกำหนดให้ฟิลด์เป็น PRIMARY KEY โดยการคลิกที่รูปกุญแจ (ตามรูป) ในฟิลด์ของ ID เพื่อกำหนดให้ฟิลด์ ID เป็น PRIMARY KEY
นี่คือการแทรก เพิ่มตาราง และฟิลด์ใน phpMyadmin ของ mod SMF ครับโดยที่ผ่านมานั้นแกะเอาจาก mod visualwarning ซึ่งโดยทั่วๆ ไปก็เห็นได้ใน mod ต่างๆ ที่มีการเพิ่มฐานข้อมูล
ต่อไปก็จะแกะจาก mod Hack's Park Shoutbox เพื่อที่จะให้ท่านได้เห็นโค้ดอีกรูปแบบหนึ่งซึ่งมีความแตกต่างกันนิดหน่ิอย แต่หากท่านทำความเข้าใจกับมันสักนิด และเรียนรู้เพิ่มเดิมเกี่ยวกับ SQL อีกสักหน่อยก็เข้าใจได้ไม่ยากครับ
โค้ดจาก mod Hack's Park Shoutbox

ขึ้นต้นก็เป็นแบบนี้เลยครับ
DROP TABLE = ลบตาราง
IF EXISTS = หากมีอยู่แล้ว
{$db_prefix} = คำนำหน้าตารางปัจจุบัน
hp_settings = ชื่อตาราง
ความหมายโดยรวมก็คือ หากตารางชื่อนี้และคำหน้าตารางเป็นคำหน้าปัจจุบันมีอยู่แล้วให้ลบทิ้งไปเลย
ลบทิ้งแล้วคราวนี้ก็มาถึงการสร้างตาราง

สังเกตุดูให้ดีนะครับ คำสั่งสร้างตารางยังเหมือนเดิม แต่คราวนี้ตัวแปรและค่าไม่ได้เป็นอาร์เรย์ แล้ว ส่วนวิธีที่เราจะทำมือก็ยังเหมือนเดิมครับโค้ดด้านหน้าที่เน้นด้วยสีเขียวคือตัวแปร และที่เน้นด้วยสีเหลืองเป็นค่า(ของตัวแปร) เราก็จัดการแทรกเข้าไปเหมือนกับวิธีที่ทำกับ mod visualwarning เลย
ข้อควรระวัง! หากท่านคัดลอกตัวแปร และค่าจากไฟล์ไประวังอย่าให้ติดเครื่องหมาย single quotes (') ไปนะครับ คงจบแค่นี้แหละครับ กว่าจะถ่ายทอดพอให้ท่านได้เข้าใจได้เล่นเอาแทบขาดใจ หากมีปัญหาตรงใหนก็สอบถามเพิ่มเติมได้ครับ ยินดีให้คำแนะอย่างเต็มที่เท่าที่ความรู้ที่พอมีอยู่ในรอยหยักของสมองนะครับ โชคดี..
ลิงค์หัวข้อ:
http://dexmore.com/topic/5434