คำนำ: ปัจจุบันมีฟอรัมอยู่ทุกหนทุกแห่งบนอินเทอร์เน็ต แต่ฉันสงสัยว่าคุณเคยเจอสถานการณ์เช่นนี้หรือไม่: การค้นหาเนื้อหาที่คุณต้องการในข้อมูลการสนทนาที่ยุ่งเหยิงนั้นใช้เวลานานมากและต้องใช้แรงงานมาก ต่อมาคุณ ฉันจะไม่อยากไปที่ฟอรัมใด ๆ อีกต่อไป ดังนั้นเราจึงสามารถเพิ่มฟังก์ชั่นการตรวจสอบให้กับเนื้อหาในฟอรั่มเว็บไซต์ของเราได้หรือไม่? นั่นคือบทความทั้งหมดที่ชาวเน็ตโพสต์ในฟอรั่มจะไม่แสดงทันที โดยเว็บมาสเตอร์หรือโมเดอเรเตอร์จะต้องตรวจสอบบทความเหล่านั้นหากเห็นว่ามีคุณค่าและจำเป็นต้องแนะนำให้ชาวเน็ตคนอื่น ๆ เผยแพร่ มิฉะนั้น ให้ลบออกเพื่อหลีกเลี่ยงการเปลืองพื้นที่และทำให้ดูเหมือนเป็นพื้นที่ไฮไลต์ ด้วยวิธีนี้ ฟอรัมของคุณจะสามารถให้เนื้อหาที่ชัดเจนและเป็นประโยชน์มากกว่าฟอรัมทั่วไป การวางไว้บนเว็บไซต์ของคุณควรดึงดูดให้ชาวเน็ตเข้ามาเยี่ยมชมมากขึ้น แนวคิดนี้สามารถเกิดขึ้นจริงได้อย่างแน่นอน และฉันจะแนะนำวิธีทำคร่าวๆ ด้านล่างนี้
หมายเหตุ: บทความนี้เหมาะสำหรับผู้อ่านที่มีความเข้าใจเกี่ยวกับฐานข้อมูล ACCESS, HTML และ ASP บ้าง
1. การวิเคราะห์โครงสร้างฟอรั่ม
ด้วยการวิเคราะห์ความต้องการด้านการทำงานข้างต้น เราสามารถแบ่งการผลิตฟอรั่มออกเป็นสี่ส่วน:
(1) โมดูลการลงทะเบียนและการจัดการ Netizen: เนื่องจากมีการแนะนำเว็บมาสเตอร์หรือผู้ดูแล จึงจะต้องสามารถควบคุมได้ใน ฟอรัมรับรองความถูกต้อง หน้าที่ของโมดูลนี้คือการจัดการชาวเน็ตที่ลงทะเบียนและตอบคำถามที่เกี่ยวข้อง เช่น ค้นหาบทความที่ตีพิมพ์ทั้งหมดโดยผู้เขียนที่ระบุ ค้นหาชาวเน็ต 10 คนที่ตีพิมพ์บทความมากที่สุด เป็นต้น หากฟอรัมของคุณไม่ใหญ่มาก คุณสามารถละเว้นโมดูลนี้ได้เพื่อให้มีเพียงฟังก์ชันการตรวจสอบสิทธิ์ของผู้ดูแลเท่านั้น และลบส่วนที่เกี่ยวกับการลงทะเบียนและการสอบถามออก
(2) โมดูลแสดงบทความ: แสดงบทความทั้งหมดที่ได้รับการตรวจสอบโดยผู้ดูแลและถือว่าสมควรได้รับการแนะนำ
(3) โมดูลการเผยแพร่บทความ: จัดให้มีสถานที่สำหรับชาวเน็ตที่ลงทะเบียนเพื่อเผยแพร่ความคิดเห็นของพวกเขา และรอการตรวจสอบโดยผู้ดูแลหลังจากการตีพิมพ์
(4) โมดูลการทบทวนบทความ: ผู้ดำเนินรายการจะประมวลผลบทความทั้งหมดที่ได้รับการเผยแพร่บนเว็บไซต์แต่ยังไม่ได้รับการตรวจสอบ และได้ตัดสินใจว่าจะเผยแพร่หรือลบบทความเหล่านั้น
หลังจากทำความเข้าใจข้อกำหนดด้านการทำงานเฉพาะแล้ว คุณสามารถเริ่มการออกแบบฟอรัมตามโมดูลได้ แน่นอนว่าโมดูลเหล่านี้แบ่งโครงสร้างฟอรัมตามหน้าที่เท่านั้น และจริงๆ แล้วโมดูลเหล่านี้ไม่สามารถออกแบบแยกจากกันโดยสิ้นเชิงได้ สำหรับแอปพลิเคชันขนาดเล็กดังกล่าว ไม่จำเป็นต้องมีการออกแบบโมดูลาร์ที่สมบูรณ์ การเขียนโค้ดโปรแกรมโดยตรงด้วยการวางแผนที่ดีอาจง่ายกว่า
โดยทั่วไปมีสองวิธีในการใช้งานฟอรัม: การใช้ไฟล์หรือฐานข้อมูล ในทางกลับกัน การใช้ฐานข้อมูลนั้นง่ายกว่าและมีประสิทธิภาพมากกว่า สามารถควบคุมฟอรัมได้ดีขึ้น และยังสามารถให้การตรวจสอบและการปกป้องข้อมูลได้อีกด้วย ที่นี่ฉันใช้ฐานข้อมูล ACCESS สำหรับแอปพลิเคชันขนาดเล็กและขนาดกลางทั่วไป ACCESS น่าจะสามารถทำงานได้
จากการวิเคราะห์ข้างต้น เราทราบได้ว่าควรมี 4 ตาราง ด้านล่างนี้ผมให้โครงสร้างของแต่ละตาราง
(1) ตารางผู้เขียน (ใช้เพื่อเก็บข้อมูลผู้เขียน):
ID: ประเภทข้อความ, จำเป็น มันเป็นชื่อรหัสของชาวเน็ต
รหัสผ่าน: ต้องระบุประเภทข้อความ
ชื่อเล่น: ต้องระบุประเภทข้อความ
อีเมล: ต้องระบุประเภทข้อความ
ตำแหน่ง: ประเภทตัวเลข, จำเป็น -1 หมายถึง ชาวเน็ตทั่วไป, 0 หมายถึง เว็บมาสเตอร์ ตัวเลขที่มากกว่า 0 หมายถึงผู้ดูแล
จำนวนบทความ: ประเภทตัวเลข, จำเป็น จำนวนบทความทั้งหมดที่ชาวเน็ตเผยแพร่
ชื่อ: ประเภทข้อความ ไม่บังคับ
เพศ: ประเภทข้อความ ไม่บังคับ
โทรศัพท์: ประเภทข้อความ ไม่บังคับ
(2) ตารางเนื้อหา (ใช้เพื่อจัดเก็บเนื้อหาบทความเฉพาะและข้อมูลที่เกี่ยวข้อง):
ID: กำหนดหมายเลขและจัดทำดัชนีโดยอัตโนมัติเพื่อเพิ่มความเร็วในการค้นหา
รหัสคัมบัง: ประเภทตัวเลข จากรายการคัมบัง ระบุบอร์ดคัมบังที่มีบทความอยู่
รหัสหัวข้อ: ประเภทตัวเลขจากตารางหัวข้อ ซึ่งระบุหัวข้อที่มีบทความอยู่
ID ผู้แต่ง: ประเภทข้อความจากตารางผู้เขียน ซึ่งระบุถึงผู้เขียนบทความ
วันที่: ประเภทวันที่/เวลา ค่าเริ่มต้นที่กำหนดไว้ล่วงหน้าคือฟังก์ชัน NOW() ซึ่งใช้เวลาของระบบปัจจุบันเป็นค่าโดยอัตโนมัติ
ชื่อเรื่อง: ประเภทข้อความ ชื่อเรื่องของบทความ
เผยแพร่: ประเภทใช่/ไม่ใช่ "จริง" หมายความว่าบทความได้รับการตรวจสอบแล้วและสามารถเผยแพร่ได้ "ไม่ใช่" หมายความว่าบทความยังไม่ได้รับการตรวจสอบ
คำแนะนำ: ประเภทตัวเลข ระดับการแนะนำของบทความ
เนื้อหา: ประเภทหมายเหตุ เนื้อหาเฉพาะของบทความ
จำนวนคลิก: ประเภทตัวเลข จำนวนคลิกบทความ
(3) รายการคัมบัง (ใช้เพื่อเก็บข้อมูลเกี่ยวกับคัมบัง):
ID: หมายเลขอัตโนมัติ ในทำนองเดียวกัน มีการตั้งค่าดัชนีไว้ด้วย
ชื่อ: ประเภทข้อความ ชื่อของบอร์ด
Moderator: ประเภทข้อความ, ID ของผู้ดูแลบอร์ด
จำนวนหัวข้อ: ประเภทตัวเลข จำนวนหัวข้อที่รวมอยู่ในกระดาน
(4) ตารางหัวข้อ (ใช้เพื่อเก็บข้อมูลเกี่ยวกับหัวข้อ):
ID: กำหนดหมายเลขและกำหนดดัชนีโดยอัตโนมัติ
ชื่อเรื่อง: ประเภทข้อความที่ระบุชื่อหัวข้อ
บอร์ดคัมบัง: ประเภทตัวเลข จากรายการบอร์ดคัมบัง ระบุบอร์ดคัมบังที่มีหัวข้ออยู่
จำนวนบทความ: ประเภทจำนวน, จำนวนบทความที่อยู่ในหัวข้อ
ตารางทั้งหมดได้รับการออกแบบ แต่การออกแบบฐานข้อมูลยังไม่เสร็จสมบูรณ์ ดังนั้นเราจึงยังคงจำเป็นต้องสร้างความสัมพันธ์ระหว่างตาราง เพื่อให้ฐานข้อมูลสามารถตรวจสอบความสัมพันธ์บางอย่างเพื่อหลีกเลี่ยงข้อผิดพลาดของข้อมูล ข้อดีอีกประการหนึ่งของการสร้างความสัมพันธ์ระหว่างตารางก็คือ สามารถสร้างแบบสอบถาม JOIN ที่ซับซ้อนได้อย่างง่ายดาย
โดยปกติแล้วเมื่อเราใช้งานฐานข้อมูลใน ASP เราจะใช้การสืบค้นที่สร้างขึ้นระหว่างการดำเนินการ ซึ่งจากนั้นจะถูกส่งไปยังฐานข้อมูลเพื่อการตีความและดำเนินการ และที่นี่เราจะใช้การสืบค้นที่เก็บไว้ กระบวนงานที่เก็บไว้มีข้อดีมากกว่าแบบสอบถามเวลาดำเนินการ
มันถูกเก็บไว้ในฐานข้อมูลและไม่ขึ้นอยู่กับโค้ดโปรแกรม ASP ทำให้ง่ายต่อการสร้างและแก้ไข และประสิทธิภาพการสืบค้นก็สูงขึ้นและเร็วขึ้น สามารถดีบั๊กแล้วนำไปใช้ในหน้า ASP ซึ่งสามารถหลีกเลี่ยงปัญหามากมาย และโค้ดโปรแกรม ASP ที่ใช้การสืบค้นที่เก็บไว้จะอ่านและแก้ไขได้ง่ายกว่า บางทีทุกคนอาจรู้สึกรำคาญกับการใช้คำสั่ง SQL ใน ASP โดยเฉพาะเครื่องหมายจุลภาค อัฒภาค ฯลฯ ซึ่งอาจทำให้เกิดข้อผิดพลาดได้หากคุณไม่ระวัง หลังจากใช้การสืบค้นที่เก็บไว้ คุณไม่จำเป็นต้องกังวลเกี่ยวกับปัญหาเหล่านี้ แน่นอนว่ามีบางสิ่งที่คุณต้องใส่ใจเมื่อใช้โปรแกรมที่เก็บไว้ล่วงหน้า ฉันจะอธิบายวิธีใช้งานโดยละเอียดในภายหลัง การสร้างโปรแกรมที่เก็บไว้ใน ACCESS ทำได้ง่ายมาก ดังนั้นฉันจะไม่พูดอะไรเพิ่มเติมเกี่ยวกับเรื่องนี้ที่นี่ ที่นี่ฉันให้เฉพาะโค้ดโปรแกรมคำสั่ง SQL สำหรับแต่ละแบบสอบถามเท่านั้น
ฉันได้บันทึกการสืบค้นทั้งหมดเพื่อใช้ในฐานข้อมูลเป็นโปรแกรมที่เก็บไว้ล่วงหน้า รายการหลักมีดังนี้:
(1) การสืบค้นบทความตาม ID:
SELECT topic table. สารบัญ.*
จากตารางหัวข้อ INNER JOIN (ตารางเนื้อหา INNER JOIN รายการ kanban บนเนื้อหา table.kanban ID = kanban list.ID) ON topic table.ID = เนื้อหา table.topic ID
WHERE (((content table.ID)=[รหัสบทความ]));
(2) การสืบค้นรหัสผ่านของผู้ดูแล:
เลือกรายการ Kanban เจ้าของบอร์ด ตารางผู้เขียน รหัสผ่าน
จากตารางผู้เขียน INNER JOIN รายการ kanban บนผู้เขียน table.ID = เจ้าของ kanban list.board
WHERE (((kanban list.ID)=[id];
(3) ค้นหาผู้เขียน:
SELECT author table.*
จาก ตารางผู้เขียน
WHERE (((author table.ID)=[id]));
(4) รายการบทความที่เผยแพร่:
SELECT [ตารางเนื้อหา].[ID], [ตารางเนื้อหา].[หัวข้อ], [ตารางเนื้อหา].[รหัสผู้เขียน ] AS ผู้เขียน, [สารบัญ].[วันที่], [สารบัญ].[คำแนะนำ], [สารบัญ].[จำนวนคลิก] AS จำนวนคลิก
จากสารบัญ
WHERE ((([สารบัญ].[รหัสหัวข้อ])=[ดัชนีหัวข้อ]) และ (([สารบัญ].[เผยแพร่])=True));
รายการบทความที่ยังไม่ได้เผยแพร่:
SELECT สารบัญ ID AS บทความ id, หัวข้อ table.ID AS หัวข้อ id, หัวข้อ table.title AS หัวข้อ, เนื้อหา table.title AS title, เนื้อหา table.author ID AS ผู้เขียน, เนื้อหา table.date AS date
จากตารางหัวข้อ ตารางเนื้อหา INNER JOIN บนหัวข้อ table.ID = content table.topic ID
WHERE (((ตารางเนื้อหา เผยแพร่)=False) และ ((ตารางเนื้อหา Kanban ID)=[boardid]));
(5) รายการหัวข้อ:
เลือกตารางหัวข้อ*, รายการ Kanban
จากรายการคัมบัง ตารางหัวข้อ INNER JOIN บนรายการคัมบัง ID = ตารางหัวข้อ.kanban
WHERE (((topic table.kanban)=[boardIndex]));
นอกจากนี้ยังมีคำถามบางส่วน เนื่องจากส่วนใหญ่คล้ายกัน ฉันจะไม่แสดงรายการทีละรายการ
ในคำสั่งการสืบค้นข้างต้น คุณสามารถเห็นบางสิ่งที่ล้อมรอบด้วย "[" และ "]" ซึ่งเป็นพารามิเตอร์การสืบค้น ต้องระบุค่าพารามิเตอร์ระหว่างการดำเนินการ และจากนั้นค่าพารามิเตอร์จะถูกนำเข้าสู่คำสั่งแบบสอบถามก่อนจึงจะสามารถดำเนินการได้ สิ่งที่ควรทราบอีกประการหนึ่งก็คือ เมื่อสร้างแบบสอบถาม INNER JOIN คุณต้องเพิ่มความสัมพันธ์ระหว่างตารางลงในมุมมองการออกแบบ ไม่เช่นนั้นจะไม่สามารถสร้างคำสั่งแบบสอบถาม INNER JOIN ได้โดยอัตโนมัติ
ณ จุดนี้ การออกแบบฐานข้อมูลเสร็จสิ้น และงานถัดไปคือ ASP
2. โครงสร้าง
1. ในการสร้างแบบฟอร์มหลัก
คุณต้องจัดเตรียมแบบฟอร์มที่อนุญาตให้ชาวเน็ตป้อนข้อมูลการลงทะเบียน นี่คือเนื้อหา HTML และพักไว้ มาดูสคริปต์ ASP ที่ใช้การลงทะเบียนกันก่อน
(1) เปลี่ยนเครื่องหมายคำพูดเดี่ยวในข้อมูลเป็นสองเครื่องหมายคำพูดเดี่ยว และเพิ่มเครื่องหมายคำพูดเดี่ยวก่อนและหลัง
ฟังก์ชั่น SqlStr (ข้อมูล)
SqlStr = "'" & แทนที่ (ข้อมูล"'", "''" ) & "'"
ฟังก์ชันสิ้นสุด
: นี่คือฟังก์ชันแบบกำหนดเองที่ใช้ในการแปลงเครื่องหมายคำพูดเดี่ยว (') ในการป้อนข้อมูลของผู้ใช้ให้เป็นเครื่องหมายคำพูดเดี่ยว 2 ใบ ('') ใน ASP สตริงจะถูกล้อมรอบด้วยเครื่องหมายคำพูดคู่ ดังนั้น "'" ด้านบนจึงแสดงถึงสตริงที่มีเครื่องหมายคำพูดเดียวเท่านั้น เหตุผลที่คุณต้องแทนที่เครื่องหมายคำพูดเดี่ยวหนึ่งอันด้วยเครื่องหมายคำพูดเดี่ยวสองอัน เนื่องจากในคำสั่ง SQL เครื่องหมายคำพูดเดี่ยวถูกใช้เพื่อแสดงตัวแปร เพื่อหลีกเลี่ยงความสับสน เครื่องหมายคำพูดเดี่ยวในสตริงจะต้องแสดงด้วยเครื่องหมายคำพูดเดี่ยวสองเครื่องหมาย อินพุตของผู้ใช้ทั้งหมดจะต้องฝังอยู่ในคำสั่ง SQL เป็นตัวแปร ดังนั้นฟังก์ชันนี้จึงมีความจำเป็น
(2) การเตรียมการเก็บรักษา
id=คำขอ("id")
รหัสผ่าน=คำขอ("รหัสผ่าน")
ชื่อเล่น=คำขอ("ชื่อเล่น")
อีเมล=คำขอ("อีเมล")
เพศ = คำขอ ("เพศ")
หมายเหตุ: ไม่จำเป็นต้องบันทึกเนื้อหาจากแบบฟอร์มอินพุตของผู้ใช้ในตัวแปร แต่จะทำให้อ่านและเขียนได้ง่ายขึ้น
if Request("name")=""then name=" " else name=request("name")
if Request("phone")=""then phone=" " else phone=request("phone")
เนื่องจากเนื้อหาเหล่านี้ไม่จำเป็นต้องกรอก เพื่อป้องกันไม่ให้ผู้ใช้ป้อนข้อมูลใดๆ และทำให้เกิดข้อผิดพลาดในการดำเนินการฐานข้อมูล จะต้องแทนที่ช่องที่ยังไม่ได้กรอกข้อมูลด้วยช่องว่าง
(3) สร้างการเชื่อมต่อ
ตั้งค่า conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
หมายเหตุ: ส่วนนี้มีไว้เพื่อสร้างการเชื่อมต่อฐานข้อมูล ชื่อของฐานข้อมูลคือ bbssystem.mdb ในส่วนนี้สิ่งเดียวที่ควรทราบคือแอปพลิเคชันของฟังก์ชัน Server.MapPath โดยทั่วไป เมื่อใดก็ตามที่เกี่ยวข้องกับไดเร็กทอรีเฉพาะ ห้ามใช้ชื่อไดเร็กทอรีโดยตรง แต่ใช้ฟังก์ชัน Server.MapPath แทน การใช้ฟังก์ชันต่างๆ เช่น Server.MapPath และ Request.ServerVariables() อย่างเหมาะสม จะทำให้แอปพลิเคชันเว็บของคุณพกพาสะดวกยิ่งขึ้น
Set cmd = Server.CreateObject("ADODB.Command")
(4) สอบถามว่ามีผู้เขียนอยู่แล้วหรือไม่
ตั้งค่า cmd.ActiveConnection = conn
cmd.CommandText = "ผู้เขียนแบบสอบถาม"
ReDim param(0) 'ประกาศอาร์เรย์พารามิเตอร์
param(0) = CStr(id) ' ไม่สามารถละเลย Cint ได้
Set rs = cmd.Execute(,param)
หมายเหตุ: ส่วนนี้ใช้เพื่อรันโปรแกรมที่เก็บไว้ มีหลายวิธีในการดำเนินการแบบสอบถามใน ADO แต่สำหรับกระบวนงานที่เก็บไว้ คุณสามารถใช้ได้เฉพาะวัตถุ Command เท่านั้น ขั้นแรก สร้างอ็อบเจ็กต์ Command ชื่อ cmd จากนั้นตั้งค่าอ็อบเจ็กต์การเชื่อมต่อ conn เป็นคุณสมบัติ ActiveConnection ของอ็อบเจ็กต์ cmd ตั้งชื่อของการสืบค้นที่จะดำเนินการ "Query Author" เป็นคุณสมบัติ CommandText จากนั้นกำหนดค่าให้กับ พารามิเตอร์แบบสอบถาม เราประกาศพารามิเตอร์อาร์เรย์ param(0) เนื่องจากมีเพียงพารามิเตอร์เดียวในแบบสอบถาม "ผู้เขียนแบบสอบถาม" ดังนั้นอาร์เรย์จึงมีองค์ประกอบเดียวเท่านั้น โดยทั่วไป หากมีพารามิเตอร์หลายตัวในการสืบค้น จะต้องประกาศอาร์เรย์พารามิเตอร์ที่มีจำนวนส่วนประกอบที่สอดคล้องกัน และลำดับที่พารามิเตอร์ปรากฏนั้นสอดคล้องกับลำดับของส่วนประกอบในอาร์เรย์ ในกระบวนการใช้แบบสอบถามพารามิเตอร์ ควรให้ความสนใจเป็นพิเศษกับข้อเท็จจริงที่ว่าประเภทของพารามิเตอร์จะต้องตรงกันอย่างเคร่งครัด มิฉะนั้นจะเกิดข้อผิดพลาด ดังนั้นฟังก์ชันการแปลงประเภท CStr() ข้างต้นจึงเป็นสิ่งที่ขาดไม่ได้
ถ้าไม่ใช่ (rs.eof หรือ rs.bof) แล้ว
response.write "เกิดข้อผิดพลาด หมายเลข ID ที่คุณป้อนถูกใช้ไปแล้ว โปรดลองหมายเลขอื่น!"
อื่น
sql = "แทรกลงในตารางผู้เขียน (id, ชื่อเล่น, อีเมล, รหัสผ่าน, ชื่อ, โรงเรียน, แผนก, เพศ, หมายเลขโทรศัพท์) ค่า ("
sql = sql & SqlStr(id) & ","
sql = sql & SqlStr (ชื่อเล่น) & ","
sql = sql & SqlStr (อีเมล) & ","
sql = sql & SqlStr (รหัสผ่าน) & ","
sql = sql & SqlStr (ชื่อ) & ”,&”, "
sql = sql & SqlStr (เพศ) & ","
sql = sql & SqlStr (โทรศัพท์) & ")"
conn.Execute sql
ใช้คำสั่ง SQL Insert เพื่อแทรกข้อมูลลงในฐานข้อมูล ที่จริงแล้วแบบสอบถามนี้สามารถทำเป็นโปรแกรมที่เก็บไว้ล่วงหน้าและวางไว้ในฐานข้อมูลได้ ฉันขี้เกียจนิดหน่อย :-) อย่างไรก็ตาม เมื่อเปรียบเทียบแล้ว คุณยังสามารถเห็นประโยชน์ของโปรแกรมที่เก็บไว้ล่วงหน้าได้เช่นกัน ยุ่งยากในการเขียนแบบสอบถามระหว่างการดำเนินการ
2. สร้างโมดูลแสดงบทความ
ตามที่กล่าวไว้ข้างต้น บทความเฉพาะเจาะจงเป็นของกระดานข่าวและเนื้อหาหลัก ดังนั้นเมื่อแสดงบทความ คุณจะต้องอ่านสองหน้าของรายการกระดานข่าวและรายการหัวเรื่องก่อนจึงจะสามารถรับรายการบทความภายใต้หัวข้อเฉพาะได้
(1) หน้าแสดงรายการบอร์ด:
<html>
<หัว>
<หัวข้อ>รายการคัมบัง</หัวข้อ>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</head>
(2) เปิดการเชื่อมต่อและแสดงรายการคัมบัง
< %ตั้งค่า conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
sql = "เลือก * จากรายการคัมบัง"
ตั้งค่า rs=conn.execute(sql)
%>
หมายเหตุ: การสืบค้น SQL แบบธรรมดาจะส่งคืนข้อมูลทั้งหมดเกี่ยวกับบอร์ดคัมบังไปยังชุดระเบียน RS ภารกิจต่อไปนี้คือการแสดงเนื้อหาที่บันทึกไว้และสร้างลิงค์เพื่อแสดงหัวข้อของบอร์ดตามชื่อบอร์ดที่เกี่ยวข้อง
<ตัว bgcolor="#FFFFFF">
< h2 align="center"><รายการคัมบัง</h2>
<ความกว้างของตาราง="60%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#FFFFCC">
< td height="35" width="25%"><ชื่อสแกนบอร์ด</td>
<td height="35" width="21%"><ผู้ดำเนินรายการ</td>
<td height="35" width="23%">จำนวนหัวข้อ</td>
<td height="35" width="31%">เข้าสู่ระบบผู้ดูแล</td>
</tr><
หมายเหตุ: ส่วนนี้มีไว้เพื่อแสดงชื่อของแต่ละคอลัมน์ในตาราง ในที่นี้ ฉันไม่ได้ใช้ฟังก์ชันแบบรวมเพื่อแสดงเนื้อหาของบันทึก RS เนื่องจากจะทำให้สามารถควบคุมรูปลักษณ์และรูปแบบของตารางได้มากขึ้น การใช้ แม้ว่าจะยุ่งยากเล็กน้อยในการลุกขึ้นแต่ก็มีความยืดหยุ่นมากกว่า
-
ทำ
boardid=rs("id")
ชื่อบอร์ด=rs("ชื่อ")
boardmanager=rs("เจ้าของบอร์ด")
response.write "<tr><<td><<a href=qBoard.asp?boardid="& boardid& "&boardname=" & boardname& ">" & boardname &"< /a>< /td>"
หมายเหตุ: บรรทัดนี้คือ ที่สำคัญเมื่อคลิกที่ชื่อบอร์ดแต่ละบอร์ดก็สามารถเชื่อมต่อกับหน้าที่แสดงธีมของบอร์ดได้ รหัสโปรแกรมดูยุ่งยากนิดหน่อย ฉันจะอธิบายให้ฟัง แล้วคุณจะเข้าใจ หลังจากคลิก เบราว์เซอร์จะขอเพจ qBoard.asp พร้อมด้วยรหัสบอร์ดพารามิเตอร์ ซึ่งแสดงถึงหมายเลข ID ของบอร์ดที่จะแสดง เครื่องหมายคำถาม (?) ใช้เพื่อแยกหน้าคำขอและพารามิเตอร์ Boardid คือตัวแปรที่ตั้งไว้ก่อนหน้านี้ ซึ่งมีหมายเลข ID ของบอร์ดที่เกี่ยวข้อง การเชื่อมต่อนี้ยังมีชื่อบอร์ดพารามิเตอร์อื่น ซึ่งใช้ในการส่งชื่อบอร์ดไปยังเพจ qBoard.asp ใช้ "&" เพื่อแยกพารามิเตอร์หลายรายการ พารามิเตอร์นี้ไม่จำเป็น จะถูกส่งผ่านเพื่อหลีกเลี่ยงการใช้ boardid อีกครั้งเพื่อสอบถามชื่อบอร์ดใน qBorad.asp โดยทั่วไปแล้ว การดำเนินการฐานข้อมูลควรใช้ให้น้อยที่สุดเท่าที่จะเป็นไปได้ ซึ่งสามารถปรับปรุงประสิทธิภาพของเพจ ASP ได้ เนื่องจากคำสั่ง Response.Write ใช้สตริงเป็นพารามิเตอร์ อักขระการเชื่อมต่อ "&" จึงถูกใช้ระหว่างสตริงและตัวแปรด้านบน ผลลัพธ์สุดท้ายของคำอธิบายหน้า ASP ควรเป็นเช่นนี้
<td><< a href=qBoard.asp?boardid=1&boardname=System Board>บอร์ดระบบ</a><td>
response.write "< td><a href=qAuthor.asp?author="&boardmanager & ">" &boardmanager & "< /a></td">"
response.write "< td>" &rs("จำนวนหัวข้อ") & "< /td>"
response.write "< td><< a href=managerlogin.asp?boardid="&boardid & ">การประมวลผลบอร์ด< /a></td><< /tr>"
หมายเหตุ: ในตารางนี้ นอกเหนือจากการเชื่อมต่อที่แสดง เนื้อหาของธีมคัมบังยังมีส่วนการสืบค้นแบบโมเสคและส่วนการประมวลผลบริการของบอร์ดซึ่งสามารถนำไปใช้งานผ่าน qAuthor.asp ได้ เพียงดึงข้อมูลผู้เขียนจากฐานข้อมูลและแสดงข้อมูลดังกล่าว พูดว่า. การประมวลผลบอร์ดได้รับการจัดการโดยหน้า managerlogin.asp นี่เป็นของโมดูลการทบทวนบทความ ซึ่งฉันจะอธิบายรายละเอียดในภายหลัง
rs.movenext
วนซ้ำจนถึง rs.eof
%>
หมายเหตุ: ข้อความทั้งหมดในชุดบันทึกจะปรากฏขึ้นผ่าน do... loop
</โต๊ะ><
<div align="center"><br><
คลิกที่ชื่อบอร์ดเพื่อดูรายการหัวข้อ คลิกที่ชื่อเจ้าของบอร์ดเพื่อดูข้อความของเจ้าของบอร์ด
</div><
</ตัว>
</html>
-
ตั้งค่า rs=nothing
เชื่อมต่อปิด
ตั้งค่า conn=ไม่มีอะไร
%>
(3) สร้างเพจ qBaord.asp:
-
boardid=request("boardid") 'รับหมายเลข ID บอร์ดที่ส่งมาจากหน้าที่แล้ว
ตั้งค่า conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
ตั้งค่า cmd = Server.CreateObject("ADODB.Command")
ตั้งค่า cmd.ActiveConnection = conn
cmd.CommandText = "รายการหัวข้อ"
ReDim param(0) //หมายเหตุ: ประกาศอาร์เรย์พารามิเตอร์
param(0) = CLng(boardid)//หมายเหตุ: ไม่สามารถละเลย CLng ได้
ตั้งค่า rs = cmd.Execute( ,param)
-
<html>
<หัว>
<หัวข้อ>รายการหัวข้อ</หัวข้อ>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</หัว><
<ตัว bgcolor="#FFFFFF">
< h1 align="center"><%=rs("ชื่อคัมบัง")%>รายการธีมของบอร์ด</h1>
<ความกว้างของตาราง="80%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#FFFFCC">
<td width="89%" height="21"">ธีม</td>
<td width="11%" height="21"><จำนวนบทความ</td>
</tr>
-
ทำ
topicid=rs("id")
topicname=rs("หัวข้อ")
sum=rs("จำนวนบทความ")
response.write "< tr>< td><a href=qtopic.asp?topicid=" & topicid& "&boardname=" & boardname& ">" & topicname &"< /a>< /td><"
response.write "< td>" &sum & "< /td>< /tr>"
rs.movenext
วนซ้ำจนถึง rs.eof
-
</โต๊ะ><
</ตัว>
</html>
หมายเหตุ: qBoard.asp แสดงรายการหัวข้อทั้งหมดภายใต้ฟอรัมหนึ่งๆ หลังจากคลิกชื่อหัวข้อ คุณจะเข้าสู่รายการบทความหัวข้อที่เกี่ยวข้อง รายการนี้ถูกนำมาใช้โดยสคริปต์ ASP qTopic.asp รหัสโปรแกรมของ Qtopic.asp เกือบจะเหมือนกับ qBoard.asp โดยพื้นฐานแล้ว แต่มีความแตกต่างในรายละเอียดที่เกี่ยวข้อง และฉันจะไม่ลงรายละเอียดเพิ่มเติมที่นี่
(4) หลังจากคลิกชื่อบทความในรายการบทความ คุณจะเข้าสู่หน้าเรียกดูเนื้อหาบทความ article.asp:
-
articleid=request("รหัสบทความ")
ตั้งค่า conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver(*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
ตั้งค่า cmd = Server.CreateObject("ADODB.Command")
ตั้งค่า cmd.ActiveConnection = conn
cmd.CommandText = "ค้นหาบทความด้วยรหัส"
พารามิเตอร์ ReDim (0) 'การประกาศ
param(0) = CLng(articleid) ' ไม่สามารถละเลย Cint ได้
ตั้งค่า rs = cmd.Execute( ,param)
ผู้แต่ง=rs("ผู้มีอำนาจ")
หัวเรื่อง=rs("หัวเรื่อง")
ข้อมูล=rs("วันที่")
อัตรา = rs ("ระดับที่แนะนำ")
boardid=rs("kanbanid")
topicid=rs("หัวข้อรหัส")
boardname=rs("ชื่อบอร์ด")
topicname=rs("ชื่อหัวข้อ")
เนื้อหา=rs("เนื้อหา")
content=replace(content,vbCrlf,"</p><p>")
content="< p>" & content& "< /p>"
หมายเหตุ: นี่เป็นสิ่งที่ควรทราบ ช่องเนื้อหาประกอบด้วยข้อความประเภทบันทึกช่วยจำ ซึ่งสามารถประกอบด้วยอักขระขึ้นบรรทัดใหม่ได้ ในการแสดง HTML อักขระขึ้นบรรทัดใหม่ (นั่นคือ ค่าคงที่ vbCrlf) จะต้องถูกแทนที่ด้วยสัญลักษณ์ย่อหน้า HTML ด้วยวิธีนี้ การเชื่อมต่อระหว่างย่อหน้าจะไม่รบกวนรูปแบบอินพุตดั้งเดิม หากคุณต้องการออกแบบให้ดีขึ้น คุณสามารถใช้ CSS เพื่อรีเซ็ตแท็ก <P> และตั้งค่าแอตทริบิวต์ test-indent เพื่อให้มีช่องว่างที่ตอนต้นของแต่ละย่อหน้า
(5) เพิ่มหนึ่งรายการตามจำนวนคลิก
sql="อัปเดตตารางเนื้อหา กำหนดจำนวนคลิก=จำนวนคลิก+1โดยที่ ID=" & articleid
conn.execute sql
หมายเหตุ: มีคำสั่ง SQL ที่นี่ เมื่อเพจแสดงขึ้น ฟิลด์จำนวนการคลิกในตารางที่เกี่ยวข้องจะเพิ่มขึ้นหนึ่งรายการ เพื่อให้สามารถนับและจัดอันดับจำนวนการดูบทความตามลำดับได้ เมื่อดำเนินการคำสั่งบทความ ฉันพบว่า: เดิมทีในคำสั่ง SQL ชื่อตัวแปรที่ฝังไว้ควรแยกความแตกต่างด้วยเครื่องหมายคำพูดเดี่ยว แต่ฉันไม่ได้เพิ่มเครื่องหมายคำพูดเดี่ยวให้กับตัวแปร articleid ที่นี่ และจริง ๆ แล้วมันก็ผ่านไป และฉันเขียนแบบนี้ ที่ผ่านมาเกิดข้อผิดพลาดมาตลอด สงสัยว่าเป็นเพราะ ADO เวอร์ชันใหม่หรือเปล่า
ตั้งค่า cmd=ไม่มีอะไร
-
<html>
<หัว>
<หัวข้อ><เอกสารที่ไม่มีชื่อ</หัวข้อ>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</หัว><
<ตัว bgcolor="#E9E9E4">
<ความกว้างของตาราง="89%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#CCCCCC">
<td><Author:<font color="#FF3366"><a href="qauthor.asp?author=< %=author%><">< %=author%> < /a>< /font>วันที่เผยแพร่: < สีฟอนต์="#FF3333"><%=data%><< /font>
กระดาน Kanban:< font color="#FF3333"><a href="qboard.asp?boardid=< %=boardid%><">< %=boardname%><< /a>< /font> คำแนะนำจากเจ้าของบอร์ด:< สีตัวอักษร="#FF3333">#rate#</font>< /td>
</tr>
<tr bgcolor="#CCCCCC">
<td>หัวข้อ:<font color="#FF3333"><%=title%>
หัวข้อ: < a href="qtopic.asp?topicid=<%=topicid%></b>>> < %=topicname%>< /a> < /font>< /td>
</tr>
<tr valign="top">
<ทีดี>
<ชม.>
< font color="#FF3366"">เนื้อหาบทความ: < /font>< br>
<br>
< สีตัวอักษร=สีน้ำเงิน>< %response.writecontent%>< /font>
<br>
<br>
</td>
</tr>
<tr valign="top">
<ความสูง td="18">
<ความกว้างของตาราง="50%" border="0"cellspacing="0" cellpadding="0"align="right" bgcolor="#CCCCCC">
<tr>
< ความกว้างของความกว้าง = "0%" > < /td >
<td width="65%">เกี่ยวกับหัวข้อนี้<a href="submit.asp?topicid=< %=topicid%><&boardid=<%=boardid%">">แสดงความคิดเห็น< /a></td>
การเชื่อมต่อนี้ทำให้ชาวเน็ตสามารถแสดงความคิดเห็นของตนเองในหัวข้อความคิดเห็นนี้ได้ นี่คือสิ่งที่โมดูลถัดไปจะพูดถึง ดังนั้นฉันจะไม่พูดถึงมันที่นี่
</tr>
</โต๊ะ><
</td>
</tr>
</โต๊ะ><
</ตัว>
</html>
-
ตั้งค่า rs=nothing
เชื่อมต่อปิด
ตั้งค่า conn=ไม่มีอะไร
%>
ณ จุดนี้ ส่วนการแสดงบทความก็เสร็จสมบูรณ์เช่นกัน มาดูกันว่าส่วนการเผยแพร่บทความมีการใช้งานอย่างไร
3. สร้างส่วนการเผยแพร่บทความ
โมดูลการเผยแพร่บทความมีเพียงสองหน้าเท่านั้น หน้าหนึ่งคือ send.asp ที่กล่าวถึงก่อนหน้านี้ ซึ่งใช้สำหรับจัดเตรียมแบบฟอร์มอินพุต และอีกหน้าคือ subresult.asp ซึ่งใช้ในการประมวลผลแบบฟอร์ม ป้อนข้อมูล. หน้าก่อนหน้านั้นเรียบง่ายมาก โดยพื้นฐานแล้ว มันเป็นรูปแบบ HTML ไม่มีอะไรจะพูดถึงมากนัก
<html>
<หัว>
<หัวข้อ><เผยแพร่บทความ</หัวข้อ>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</หัว><
<ตัว bgcolor="#FFFFFF">
-
ผู้เขียน = คำขอ ("ผู้เขียน")
รหัสผ่าน=คำขอ("รหัสผ่าน")
topicid=request("topicid")
boardid=request("boardid")
เนื้อหา=คำขอ("เนื้อหา")
title=request("title")
หมายเหตุ: ส่วนนี้จะนำเนื้อหาตารางที่ส่งใน send.asp ออกและวางไว้ในตัวแปรที่เกี่ยวข้อง
<html>
<หัว>
<หัวข้อ><เผยแพร่บทความ</หัวข้อ>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</หัว><
<ตัว bgcolor="#FFFFFF">
-
ผู้เขียน = คำขอ ("ผู้เขียน")
รหัสผ่าน=คำขอ("รหัสผ่าน")
topicid=request("topicid")
boardid=request("boardid")
เนื้อหา=คำขอ("เนื้อหา")
title=request("title")
(1) สอบถามว่ามีผู้เขียนอยู่หรือไม่
cmd.CommandText = "select * จากตารางผู้เขียนโดยที่ id='" & author &"'"
ตั้งค่า rs = cmd.Execute()
(2) ตรวจสอบสิทธิ์
cmd.CommandText = "select * จากตารางผู้เขียนโดยที่ id='" & author &"'"
ตั้งค่า rs = cmd.Execute()
หมายเหตุ: ส่วนนี้จะตรวจสอบสิทธิ์ของผู้เขียนและจัดการข้อผิดพลาดตามนั้น หากไม่มีบัญชีหรือรหัสผ่านไม่ถูกต้อง ที่นี่ คุณสามารถดูการใช้ response.end ซึ่งใช้เพื่อสิ้นสุดสคริปต์ ASP ปัจจุบัน เมื่อรวมกับคำสั่ง if ก็สามารถจัดการข้อผิดพลาดที่คาดหวังในโปรแกรมได้ ในแอปพลิเคชันเว็บที่ดี การจัดการข้อผิดพลาดถือเป็นสิ่งสำคัญ
(3) เปลี่ยนเครื่องหมายคำพูดเดี่ยวในข้อมูลเป็นสองเครื่องหมายคำพูดเดี่ยว และเพิ่มเครื่องหมายคำพูดเดี่ยวก่อนและหลัง
ฟังก์ชั่น SqlStr (ข้อมูล)
SqlStr = "'" & แทนที่ (ข้อมูล"'", "''" ) & "'"
ฟังก์ชันสิ้นสุด
'เขียนลงฐานข้อมูล
sql = "แทรกลงในตารางเนื้อหา (รหัสบอร์ด, รหัสหัวข้อ, รหัสผู้เขียน, ชื่อ, เนื้อหา) ค่า ( "
sql = sql & SqlStr (รหัสหัวข้อ) & ","
sql = sql & SqlStr (บอร์ด) & ","
sql = sql & SqlStr (ผู้เขียน) & ","
sql = sql & SqlStr (ชื่อ) & ","
sql = sql & SqlStr (เนื้อหา) & ")"
con.ดำเนินการ sql
-
<h2><บทความได้ถูกส่งไปยังฐานข้อมูลแล้ว และสามารถดูได้หลังจากที่ผู้ดูแลตรวจสอบแล้ว <h2>
</ตัว>
</html>
ณ จุดนี้ บทความได้ถูกบันทึกลงในฐานข้อมูลแล้ว อย่างไรก็ตาม ไม่สามารถแสดงได้ทันทีและต้องได้รับอนุมัติจากผู้ดูแล ต่อไป มาดูส่วนการจัดการของฟอรั่มกัน
4. ส่วนการจัดการของฟอรัม
คือส่วนหลักของฟอรัมของเรา แต่ไม่มีอะไรพิเศษเกี่ยวกับการนำไปปฏิบัติ ยังคงเป็นสิ่งเก่าๆ เดิม นั่นคือ การประมวลผลแบบฟอร์ม การสืบค้นฐานข้อมูล และการใช้ ASP เพื่อรวมเข้าด้วยกันแบบออร์แกนิก เมื่อเข้าสู่โหมดการทบทวนบทความ (การประมวลผลของบอร์ดที่กล่าวถึงก่อนหน้านี้) สิ่งสำคัญที่สุดคือการตรวจสอบตัวตนของผู้ดูแล มาดูหน้าเข้าสู่ระบบของผู้ดูแลกัน:
-
boardid=request("boardid")
(หมายเหตุ: รหัสบอร์ดถูกส่งผ่านโดยการเชื่อมต่อไปยังหน้านี้ และเป็น ID ของบอร์ดที่จะประมวลผล เพียงเท่านี้เราก็สามารถรู้ได้ว่าบอร์ดใดกำลังถูกประมวลผล)
ตั้งค่า conn = erver.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
ตั้งค่า cmd = Server.CreateObject("ADODB.Command")
ตั้งค่า cmd.ActiveConnection = conn
cmd.CommandText = "สอบถามรหัสผ่านผู้ดูแล"
พารามิเตอร์ ReDim(0)
param(0) = CLng(boardid) //หมายเหตุ: ไม่สามารถละเลย CLng ได้
ตั้งค่า rs = cmd.Execute( ,param)
boardmanager=rs("เจ้าของบอร์ด")
ตั้งค่า cmd=ไม่มีอะไร
-
<html>
<หัว>
<หัวข้อ><เอกสารที่ไม่มีชื่อ</หัวข้อ>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</หัว><
<ตัว bgcolor="#FFFFFF">
< p> เฉพาะเจ้าของบอร์ดเท่านั้น < %=boardmanager%> สามารถเข้ามาที่นี่ได้ </p>
<p>โปรดป้อนรหัสผ่านการยืนยัน และเพื่อรักษาการตรวจสอบสิทธิ์ โปรดเปิดคุกกี้ของเบราว์เซอร์ของคุณ </พี><
<form method="post" action="managerloginrest.asp">>
<input type="password" name="password">
< input type="hidden" name="boardid"value=< %=boardid%><>>
<input type="submit" name="Submit"value="OK">
</แบบฟอร์ม>
หมายเหตุ: หน้านี้มีไว้สำหรับเข้าสู่ระบบเท่านั้น หลังจากได้รับรหัสผ่านที่ Mozhu ป้อนแล้ว จะไม่สามารถดำเนินการตรวจสอบได้ แต่จะดำเนินการตรวจสอบในหน้าถัดไป ในความเป็นจริง การป้อนรหัสผ่านและงานการตรวจสอบความถูกต้องสามารถทำได้ในหน้าเดียว แต่การจัดเรียงโครงสร้างของโค้ดโปรแกรมนั้นค่อนข้างลำบากเล็กน้อย
</ตัว>
</html>
-
ตั้งค่า rs=nothing
เชื่อมต่อปิด
ตั้งค่า conn=ไม่มีอะไร
%>
เมื่อได้รับ ID ผู้ดูแลและรหัสผ่านที่ป้อนแล้ว สิ่งต่อไปนี้คือตัวจัดการงานการตรวจสอบloginrest.asp ซึ่งจะยอมรับเนื้อหาของแบบฟอร์มในไฟล์ด้านบนและดำเนินการประมวลผลที่เกี่ยวข้อง:
-
response.buffer=true
หมายเหตุ: ตั้งค่าบัฟเฟอร์เพื่ออนุญาตการใช้งาน โดยทั่วไป ควรเพิ่มรายการนี้ในส่วนหัวของเพจ ASP แต่ละหน้า ซึ่งสามารถปรับปรุงประสิทธิภาพของเพจ ASP ได้ หลังจากเปิดบัฟเฟอร์แล้ว จะมีการใช้งานพิเศษบางอย่างที่สอดคล้องกันใน ASP ซึ่งจะกล่าวถึงในภายหลัง
boardid=request("boardid")
รหัสผ่าน=คำขอ("รหัสผ่าน")
ตั้งค่า conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
ตั้งค่า cmd = Server.CreateObject("ADODB.Command")
ตั้งค่า cmd.ActiveConnection = conn
cmd.CommandText = "สอบถามรหัสผ่านผู้ดูแล"
พารามิเตอร์ ReDim (0) 'การประกาศ
param(0) = CLng(boardid)//หมายเหตุ: ไม่สามารถละเลย CLng ได้
ตั้งค่า rs = cmd.Execute( ,param)
boardmanager=rs("เจ้าของบอร์ด")
ถ้ารหัสผ่าน <rs("รหัสผ่าน") แล้วก็ %>
<html>
<หัว>
<หัวข้อ">การรับรองความถูกต้อง </หัวข้อ>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</หัว><
<ตัว bgcolor="#FFFFFF">
รหัสผ่านไม่ถูกต้อง </body>
</html>
-
อื่น
session("beenthere")=boarded
หมายเหตุ: การใช้เซสชันเพื่อรักษาเอกลักษณ์ของผู้ดูแล จำเป็นต้องเปิดคุกกี้ของเบราว์เซอร์ไคลเอ็นต์ เนื่องจากเซสชันถูกใช้งานผ่านคุกกี้ ที่นี่ กำหนด ID บอร์ดให้กับตัวแปรเซสชันซึ่งระบุว่าผู้ดูแลได้ผ่านการตรวจสอบตัวตนแล้ว ในแต่ละหน้าการประมวลผลเวอร์ชันถัดไป ให้ตรวจสอบว่าเคยตรงกับรหัสเวอร์ชันที่เกี่ยวข้องหรือไม่
url = "boardmanager.asp?boardid = "& บอร์ด
Response.redirect url
: เมื่อฉันเรียนรู้ ASP ครั้งแรก ฉันมักจะสับสนกับวิธีการ response.redirect และฉันไม่พอใจกับมัน ตอนนี้ให้ฉันบอกเทคนิคบางอย่างให้คุณฟัง ก่อนที่จะใช้งาน คุณต้องส่ง response.buffer=true เพื่อให้เพจ ASP ใช้บัฟเฟอร์ ในขณะนี้ ก่อนที่ ASP จะถูกแปลเป็นโค้ดโปรแกรม HTML นั้น ASP จะถูกวางไว้ในบัฟเฟอร์ และจะไม่ถูกส่งไปยังเบราว์เซอร์ไคลเอ็นต์โดยตรง อีกสิ่งหนึ่งที่ต้องทราบคือ: ก่อนที่จะใช้ response.redirect จะไม่สามารถส่งโค้ดโปรแกรม HTML จริงไปยังเบราว์เซอร์ไคลเอ็นต์ได้ มิฉะนั้นจะเกิดข้อผิดพลาด แน่นอนว่ายังมีวิธีแก้ปัญหาอยู่ หากโค้ดโปรแกรม HTML ได้รับการตีความก่อนการตอบกลับ คุณสามารถใช้เมธอด response.clear เพื่อล้างบัฟเฟอร์ จากนั้นใช้เพื่อรีเซ็ต
สิ้นสุดถ้า
%>
หมายเหตุ: ต่อไปนี้คือเป้าหมายการรีเซ็ตหลังจากผ่านการรับรองความถูกต้องข้างต้น: boardmanager.asp มันจะแสดงรายการบทความทั้งหมดที่ได้รับการประมวลผล
-
boardid=request("boardid")
if session("beenthere")<>boardidthen response.redirect "forums.asp"
หมายเหตุ: นี่คือที่ซึ่งข้อมูลประจำตัวของผู้ดูแลได้รับการตรวจสอบ เนื่องจากมันถูกทำเครื่องหมายในเบราว์เซอร์ของ Bamboo ผ่านคุกกี้ และตอนนี้เราสามารถส่งผ่าน seesion มาระบุกัน ผู้ดำเนินรายการ หากแท็กไม่ตรงกัน แท็กจะกลับสู่หน้าเข้าสู่ระบบเดิมผ่าน response.redirect หากไม่ได้เปิดคุกกี้เบราว์เซอร์ของผู้ดูแล ค่าของ seesion ("เคยไปที่นั่น") จะว่างเปล่า และหน้านี้จะไม่สามารถเข้าถึงได้เช่นกัน
ตั้งค่า conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
ตั้งค่า cmd = Server.CreateObject("ADODB.Command")
ตั้งค่า cmd.ActiveConnection = conn
sql="เลือกชื่อจากรายชื่อบอร์ด Whereid=" & boardid
ตั้งค่า rs=conn.execute(sql)
ชื่อบอร์ด=rs("ชื่อ")
cmd.commandtext="รายการบทความที่ไม่ได้เผยแพร่"
พารามิเตอร์ ReDim(0)
param(0) = CLng(boardid)//หมายเหตุ: Clng ไม่สามารถละเลยได้
ตั้งค่า rs = cmd.Execute( ,param)
ตั้งค่า cmd=ไม่มีอะไร
-
<html>
<หัว>
<หัวข้อ>การประมวลผลการตีพิมพ์</หัวข้อ>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</หัว><
<body bgcolor = "#ffffff">
<H1 Align = "Center" ><%= BoardName%> การจัดการสาธารณะ < /H1>>
<ชม.>
-
ถ้า RS.EOF หรือ RS.BOF ตอบกลับการเขียน "<H2> ไม่มีบทความที่จะประมวลผล </H2>"
การตอบสนองสิ้นสุด
-
หมายเหตุ: หากไม่มีบทความใหม่ที่โพสต์โดยชาวเน็ตสิ่งนี้จะให้พรอมต์ที่สอดคล้องกันและใช้การตอบกลับ end เพื่อสิ้นสุดการแสดงหน้านี้
<ความกว้างของตาราง = "90%" border = "0" cellspacing = "0" cellpadding = "0" align = "center">>
<tr bgcolor = "#ffffcc">
<td width = "40%" ความสูง = "20"> ธีม </td>
<td width = "40%" ความสูง = "20"> ชื่อบทความ </td>
<td width = "8%" ความสูง = "20"> ผู้แต่ง </td>
<td width = "12%" ความสูง = "20"> วันที่ </td>
</tr>
-
ทำ
topicid = rs ("topicid")
articleid = rs ("articleid")
data = rs ("วันที่")
DataStr = CSTR (ปี (ข้อมูล)) & "-" & CSTR (เดือน (ข้อมูล)) & "-" & CSTR (วัน (ข้อมูล))
ผู้แต่ง = RS ("ผู้แต่ง")
articlename = rs ("ชื่อ")
topicName = RS ("หัวข้อ")
Response.write "<tr >< td >< a href = qtopic.asp? topicid =" & topicid & ">" & topicname & "< /a >< /td>"
Response.write "<td >< a href = manageArticle.asp? articleid =" & articleid & "& boardid =" & boardid & ">" & articlename & "< /a >< /td>"
Response.write "<td >< a href = qauthor.asp? uther =" & ผู้แต่ง & ">" & ผู้แต่ง & "< /a >< /td>"
Response.write "<td>" & dataSt & "< /td >< /tr>"
rs.movenext
วนรอบจนกระทั่ง RS.EOF
-
</โต๊ะ><
</html>
-
ตั้งค่า rs=nothing
conn.close
ตั้งค่า conn = ไม่มีอะไร
-
</body>
เมื่อคุณคลิกที่ลิงค์ของบทความที่เกี่ยวข้องคุณจะป้อนหน้าการประมวลผลบทความ managearticle.asp:
-
articleid = คำขอ ("articleid")
BoardId = คำขอ ("BoardID")
ถ้าเซสชั่น ("Beenthere") <> Boardidthen Response.redirect "Forums.asp"
ตั้งค่า conn = server.createObject ("adodb.connection"))
conn.open "driver = {Microsoft AccessDriver (*.mdb)}; dbq =" & server.mappath ("bbssystem.mdb"))
ตั้งค่า cmd = server.createObject ("adodb.command"))
ตั้งค่า cmd.activeConnection = conn
cmd.CommandText = "บทความสอบถามโดย ID"
Redim Param (0)
param (0) = clng (articleid) // note: clng ไม่สามารถละเว้นได้
ตั้งค่า rs = cmd.execute (, param)
ผู้แต่ง = RS ("ผู้เขียน")
title = rs ("title")
data = rs ("วันที่")
อัตรา = RS ("ระดับที่แนะนำ")
BoardID = RS ("Kanbanid")
topicid = rs ("topicid")
BoardName = RS ("ชื่อบอร์ด")
topicName = rs ("ชื่อหัวข้อ")
content = rs ("เนื้อหา")
เนื้อหา = แทนที่ (เนื้อหา, vbcrlf, "</p >< p>")
content = "<p>" & เนื้อหา & "< /p>"
ตั้งค่า cmd = ไม่มีอะไร
-
<html>
<หัว>
<ชื่อเรื่อง> เอกสารที่ไม่มีชื่อ </title>
<meta http-equiv = "content-type" content = "text/html; charset = gb2312">>
</หัว><
<body bgcolor = "#e9e9e4">
<ความกว้างของตาราง = "89%" border = "0" cellspacing = "0" cellpadding = "0" align = "center">>
<tr bgcolor = "#cccccc">
<td> ผู้แต่ง: <font color = "#ff3366" >< a href = "qauthor.asp? ผู้เขียน = < %= ผู้แต่ง %>" <ตัวอักษรสี = "#ff3333" ><%= ข้อมูล%>< /ตัวอักษร>
Kanban Board: <font color = "#ff3333" >< a href = "qboard.asp? boardid = < %= beardid %>" >< %= boardname %>< /a >< /font> เจ้าของคณะกรรมการคำแนะนำ: < FONT COLOR = "#FF3333">#RATE#< /FONT >< /TD>
</tr>
<tr bgcolor = "#cccccc">
<td> ชื่อเรื่อง: <ตัวอักษรสี = "#ff3333" ><%= ชื่อเรื่อง%>
หัวข้อ: <a href = "qtopic.asp? topicid = <%= topicid%>">%= topicname%>< /a> /font >< /td>>
</tr>
<tr valign = "top">
<td>
<ชม.>
<สีตัวอักษร = "#ff3366"> บทความบทความ: < /ตัวอักษร >< Br>
<br>
<สีตัวอักษร = สีน้ำเงิน >< %การตอบสนอง
<br>
<ชม.>
</td>
</tr>
<tr valign = "top">
<วิธีการฟอร์ม = "โพสต์" การกระทำ = "manageesult.asp">
<ความสูง td = "18">
<ความกว้างของตาราง = "100%" border = "1" cellspacing = "1" cellpadding = "1">>
<tr>
<td width = "29%">
<div align = "ขวา">
<ประเภทอินพุต = "ซ่อน" name = "beardId" value = "< %= beardId %>">>>
<ประเภทอินพุต = "ซ่อน" name = "topicid" value = "< %= topicid %>">>>
<ประเภทอินพุต = "ซ่อน" name = "articleid" value = "< %= articleid %>">>>
การประมวลผลบทความ: < /div>
</td>
<td width = "12%" borderColor = "#006666"> ลบ:
<อินพุตประเภท = "วิทยุ" name = "จัดการ" ค่า = 1>
</td>
<td width = "30%" BorderColor = "#006666"> โพสต์โดย:
<อินพุตประเภท = "วิทยุ" name = "จัดการ" value = 2>
ระดับคำแนะนำ <เลือกชื่อ = "เลือก">
<ค่าตัวเลือก = "1"> 1 </ตัวเลือก>
<ค่าตัวเลือก = "2"> 2 </ตัวเลือก>
<ค่าตัวเลือก = "3" ที่เลือก> 3 </ตัวเลือก>
<ค่าตัวเลือก = "4"> 4 </ตัวเลือก>
<ค่าตัวเลือก = "5"> 5 </ตัวเลือก>
</เลือก>
</td>
<td width = "20%" borderColor = "#006666"> กระบวนการในภายหลัง:
<ประเภทอินพุต = "วิทยุ" name = "จัดการ" ค่า = 3>
</td>
<td width = "9%">
<ประเภทอินพุต = "ส่ง" name = "submit" value = "ตกลง">
</td>
</tr>
</โต๊ะ><
</td>
</แบบฟอร์ม>
</tr>
</โต๊ะ><
</ตัว>
</html>
-
ตั้งค่า rs=nothing
conn.close
ตั้งค่า conn = ไม่มีอะไร
-
หมายเหตุ: หน้านี้โดยทั่วไปเหมือนกับบทความ. asp ในโมดูลการแสดงผลบทความ
ต่อไปเราจำเป็นต้องปรับเปลี่ยนส่วนที่สอดคล้องกันของฐานข้อมูลตามกระบวนการประมวลผลของผู้ดูแล
<%การตอบสนอง buffer = true%>
<html>
<หัว>
<ชื่อเรื่อง> การประมวลผลบทความ </title>
<meta http-equiv = "content-type" content = "text/html; charset = gb2312">>
</หัว><
<body bgcolor = "#e9e9e4">
-
articleid = คำขอ ("articleid")
BoardId = คำขอ ("BoardID")
หัวข้อ = คำขอ ("หัวข้อ")
จัดการ = คำขอ ("จัดการ")
'ยอมรับเนื้อหาแบบฟอร์ม
Response.write จัดการ 'แสดง buzhu id
ถ้าเซสชั่น ("Beenthere") <> Boardidthen Response.redirect "Forums.asp"
ตั้งค่า conn = server.createObject ("adodb.connection"))
conn.open "driver = {Microsoft AccessDriver (*.mdb)}; dbq =" & server.mappath ("bbssystem.mdb"))
ตามการดำเนินการของผู้ดูแลในหน้าก่อนหน้าการประมวลผลที่เกี่ยวข้องจะดำเนินการด้านล่าง
ถ้า clng (คำขอ ("จัดการ")) = 1 แล้ว
sql = "ลบจากตารางเนื้อหาโดยที่ id =" & articleid
conn.execute SQL
Response.write "<h1> บทความถูกลบ </h1>"
Response.write "<a href => back </a>"
elseif clng (คำขอ ("จัดการ")) = 2 จากนั้น
sql = "อัปเดตชุดเนื้อหาตาราง publish = true whereid =" & articleid
conn.execute SQL
sql = "อัปเดตหัวข้อตารางที่กำหนดจำนวนบทความ = จำนวนบทความ+1where id =" & topicid
conn.execute SQL
Response.write "<H1> บทความได้รับการเผยแพร่ </H1>"
Response.write "<a href => back </a>"
อื่น
Response.Clear
Response.redirect "BoardManager.asp? BoardID =" & Boarded
สิ้นสุดถ้า
-
</ตัว>
</html>
-
conn.close
ตั้งค่า conn = ไม่มีอะไร
%>
หลังจากขั้นตอนข้างต้นชิ้นส่วนทั้งหมดจะเสร็จสมบูรณ์โดยทั่วไป หากคุณต้องการใช้งานคุณต้องใช้ความพยายามมากขึ้นในการออกแบบเค้าโครงการตรวจสอบข้อมูลลูกค้า ฯลฯ แต่นั่นคือเนื้อหา HTML ทั้งหมดและมีส่วนเกี่ยวข้องกับ ASP เพียงเล็กน้อยดังนั้นฉันจะไม่เข้าไปดูรายละเอียดที่นี่