مقدمة: في الوقت الحاضر، توجد منتديات في كل مكان على الإنترنت، لكنني أتساءل عما إذا كنت قد واجهت مثل هذا الموقف من قبل: إن البحث عن المحتوى الذي تريده في معلومات المناقشة الفوضوية هو أمر يستغرق وقتًا طويلاً للغاية ويتطلب جهدًا كبيرًا لن أرغب في الذهاب إلى أي منتدى بعد الآن. فهل يمكننا إضافة وظيفة تدقيق إلى محتوى منتدى موقعنا الإلكتروني؟ أي أن جميع المقالات التي ينشرها مستخدمو الإنترنت في المنتدى لن يتم عرضها على الفور، ويجب مراجعتها من قبل مشرف الموقع أو المشرف، وإذا اعتبرت ذات قيمة وضرورية للتوصية بها لمستخدمي الإنترنت الآخرين، فسيتم نشرها. بخلاف ذلك، قم بحذفه لتجنب إضاعة المساحة وجعله يبدو وكأنه منطقة مميزة بهذه الطريقة، يمكن لمنتداك أن يوفر محتوى أكثر وضوحًا وإفادة من المنتديات العادية. إن وضعه على موقع الويب الخاص بك يجب أن يجذب المزيد من مستخدمي الإنترنت لزيارته. من المؤكد أن هذه الفكرة يمكن أن تتحقق، وسأقدم بإيجاز كيفية تحقيق ذلك أدناه.
ملاحظة: هذه المقالة مناسبة للقراء الذين لديهم فهم معين لقاعدة بيانات ACCESS وHTML وASP.
1. تحليل هيكل المنتدى
من خلال تحليل المتطلبات الوظيفية المذكورة أعلاه، يمكننا تقسيم إنتاج المنتدى إلى أربعة أجزاء:
(1) وحدة تسجيل وإدارة مستخدمي الإنترنت: نظرًا لأنه تم تقديم مشرف الموقع أو المشرف، يجب أن يكون قادرًا على التحكم فيه في المنتدى. توثيق المنتدى . تتمثل وظيفة هذه الوحدة في إدارة مستخدمي الإنترنت المسجلين وتقديم الاستفسارات ذات الصلة. على سبيل المثال، الاستعلام عن جميع المقالات المنشورة بواسطة مؤلف محدد، أو الاستعلام عن مستخدمي الإنترنت العشرة الذين نشروا أكبر عدد من المقالات، وما إلى ذلك. إذا لم يكن المنتدى الخاص بك كبيرًا جدًا، فيمكن حذف هذه الوحدة لتكون لها وظيفة مصادقة المشرف فقط، وإزالة الأجزاء المتعلقة بالتسجيل والاستعلام.
(2) وحدة عرض المقالات: تعرض جميع المقالات التي تمت مراجعتها من قبل المشرفين وتعتبر جديرة بالتوصية.
(3) وحدة نشر المقالات: توفر مكانًا لمستخدمي الإنترنت المسجلين لنشر آرائهم، وانتظار المراجعة من قبل المشرفين بعد النشر.
(4) وحدة مراجعة المقالات: يقوم المشرفون بمعالجة جميع المقالات التي تم نشرها على الموقع ولكن لم تتم مراجعتها، ويقررون ما إذا كانوا يريدون نشرها أو حذفها.
بعد فهم المتطلبات الوظيفية المحددة، يمكنك البدء في تصميم المنتدى وفقًا للوحدة. بالطبع، هذه الوحدات تقسم بنية المنتدى وظيفيًا فقط، ولا يمكن تصميمها بشكل مستقل تمامًا. بالنسبة لمثل هذه التطبيقات الصغيرة، ليست هناك حاجة لتصميم وحدات كامل. قد يكون من الأسهل كتابة كود البرنامج مباشرة مع التخطيط الجيد.
هناك عمومًا طريقتان لتنفيذ المنتدى: استخدام الملفات أو قواعد البيانات. نسبيًا، يعد استخدام قاعدة البيانات أبسط وأكثر كفاءة، ويمكن أن يوفر تحكمًا أفضل في المنتدى، ويمكنه أيضًا توفير بعض التحقق والحماية للبيانات. أنا هنا أستخدم قاعدة بيانات ACCESS بالنسبة للتطبيقات العامة الصغيرة والمتوسطة الحجم، يجب أن يكون ACCESS قادرًا على القيام بهذه المهمة.
من التحليل أعلاه، يمكننا أن نعرف أنه يجب أن يكون هناك أربعة جداول أدناه أقدم هيكل كل جدول.
(1) جدول المؤلف (يستخدم لتخزين معلومات المؤلف):
المعرف: نوع النص، مطلوب. إنه الاسم الرمزي لمستخدمي الإنترنت.
كلمة المرور: نوع النص، مطلوب.
اللقب: نوع النص، مطلوب.
البريد الإلكتروني: نوع النص، مطلوب.
المنصب: نوع رقمي، مطلوب. -1 يمثل مستخدمي الإنترنت العاديين، 0 يمثل مشرفي المواقع. الأرقام الأكبر من 0 تمثل المشرفين.
عدد المقالات: نوع رقمي، مطلوب. إجمالي عدد المقالات التي نشرها مستخدمو الإنترنت.
الاسم: نوع النص، اختياري.
الجنس: نوع النص، اختياري.
الهاتف: نوع النص، اختياري.
(2) جدول المحتوى (يستخدم لتخزين محتوى مقالة معينة والمعلومات ذات الصلة):
المعرف: يتم ترقيمه وفهرسته تلقائيًا لتسريع البحث.
معرف كانبان: نوع رقمي، من قائمة كانبان، يشير إلى لوحة كانبان التي تنتمي إليها المقالة.
معرف الموضوع: نوع رقمي، من جدول المواضيع، يشير إلى الموضوع الذي تنتمي إليه المقالة.
معرف المؤلف: نوع النص، من جدول المؤلفين، يشير إلى مؤلف المقال.
التاريخ: نوع التاريخ/الوقت، القيمة الأولية المحددة مسبقًا هي الدالة NOW()، والتي تأخذ تلقائيًا وقت النظام الحالي كقيمة لها.
العنوان: نوع النص. عنوان المقال.
نشر: نوع نعم/لا، "صحيح" يعني أن المقالة قد تمت مراجعتها ويمكن نشرها؛ "لا" تعني أن المقالة لم تتم مراجعتها بعد.
التوصية: النوع الرقمي، درجة التوصية للمقالة.
المحتوى: نوع الملاحظة، محتوى محدد للمقالة.
عدد النقرات: نوع الرقم، عدد النقرات على المقالة.
(3) قائمة كانبان (تستخدم لتخزين المعلومات حول كانبان):
المعرف: رقم تلقائي، وبالمثل، يتم تعيين فهرس لها أيضًا.
الاسم: نوع النص، اسم اللوحة.
المشرف: نوع النص، معرف مشرف المنتدى.
عدد المواضيع: نوع رقمي، عدد المواضيع المدرجة في اللوحة.
(4) جدول المواضيع (يستخدم لتخزين المعلومات حول المواضيع):
المعرف: يتم ترقيمه تلقائيًا وتعيين فهرس له.
العنوان: نوع النص، مع الإشارة إلى اسم الموضوع.
لوحة كانبان: نوع الرقم، من قائمة لوحة كانبان، مع الإشارة إلى لوحة كانبان التي ينتمي إليها الموضوع.
عدد المقالات: نوع الرقم، عدد المقالات التي يحتوي عليها الموضوع.
تم تصميم جميع الجداول، لكن تصميم قاعدة البيانات لم يكتمل بعد، لذلك ما زلنا بحاجة إلى إنشاء علاقات بين الجداول، حتى تتمكن قاعدة البيانات من إجراء بعض عمليات التحقق من الارتباط لتجنب أخطاء البيانات. فائدة أخرى لإنشاء علاقات بين الجداول هي أنه يمكن إنشاء استعلامات JOIN المعقدة بسهولة من خلالها.
عادة عندما نقوم بتشغيل قاعدة بيانات في ASP، نستخدم الاستعلامات التي تم إنشاؤها أثناء التنفيذ، والتي يتم تمريرها بعد ذلك إلى قاعدة البيانات للتفسير والتنفيذ. وهنا سوف نستخدم الاستعلامات المخزنة. تتمتع الإجراءات المخزنة بمزايا أكثر من استعلامات وقت التنفيذ.
يتم تخزينه في قاعدة البيانات وهو مستقل عن كود برنامج ASP، مما يسهل الإنشاء والتعديل، كما أن كفاءة الاستعلام أعلى وأسرع ويمكن تصحيحه ثم استخدامه في صفحة ASP، مما يمكن أن يتجنب العديد من المشكلات. ومن السهل قراءة وتعديل كود برنامج ASP الذي يستخدم الاستعلامات المخزنة. ربما ينزعج الجميع من استخدام استعلامات SQL في ASP، وخاصة تلك الفواصل والفواصل المنقوطة وما إلى ذلك، والتي يمكن أن تسبب أخطاء إذا لم تكن حذرًا. بعد استخدام الاستعلامات المخزنة، لا داعي للقلق بشأن هذه المشكلات. بالطبع هناك بعض الأمور التي يجب عليك الانتباه إليها عند استخدام البرامج المخزنة مسبقاً وسوف أشرح كيفية استخدامها بالتفصيل لاحقاً. من السهل جدًا إنشاء برنامج مخزن في ACCESS، لذا لن أقول المزيد عنه هنا. هنا أعطي فقط رمز برنامج بيان SQL لكل استعلام.
لقد قمت بحفظ جميع الاستعلامات لاستخدامها في قاعدة البيانات كبرامج مخزنة مسبقًا، وأهمها كما يلي:
(1) مقالات الاستعلام حسب المعرف:
حدد جدول الموضوع، اسم الموضوع، قائمة كانبان. جدول المحتويات.*
من جدول المواضيع INNER JOIN (جدول المحتوى INNER JOIN قائمة كانبان على جدول المحتوى. معرف كانبان = قائمة كانبان. معرف) على جدول الموضوع. معرف = محتوى جدول. معرف الموضوع
أين (((content table.ID)=[articleid]));
(2) استعلام كلمة مرور المشرف:
SELECT Kanban list.Board Owner، Author table.Password
من جدول المؤلف، انضم داخليًا إلى قائمة كانبان على جدول المؤلف. معرف = مالك قائمة كانبان
أين (((kanban list.ID)=[id];
(3) استعلم عن المؤلف:
حدد جدول المؤلف.*
من جدول المؤلف
أين (((جدول المؤلف.ID)=[id]));
(4) قائمة المقالات المنشورة:
حدد [جدول المحتوى].[المعرف]، [جدول المحتوى].[العنوان]، [جدول المحتوى].[معرف المؤلف ] كمؤلف، [جدول المحتويات].[التاريخ]، [جدول المحتويات].[توصية]، [جدول المحتويات].[عدد النقرات] عدد النقرات.
من جدول المحتويات
أين ((([جدول المحتويات].[معرف الموضوع])=[TopicIndex]) و (([جدول المحتويات].[منشور])=صحيح));
قائمة المقالات غير المنشورة:
SELECT Table of Contents.ID AS Article معرف، جدول الموضوع.معرف كموضوع، جدول الموضوع.العنوان كموضوع، جدول المحتوى.العنوان كعنوان، جدول المحتوى.معرف المؤلف كمؤلف، جدول المحتوى.التاريخ كتاريخ
من جدول الموضوع INNER JOIN جدول المحتوى على جدول الموضوع.ID = محتوى table.topic ID
WHERE (((جدول المحتوى. نشر)=False) AND ((جدول المحتوى. معرف كانبان)=[boardid]));
(5) قائمة المواضيع:
حدد جدول الموضوع.*، اسم قائمة كانبان
من قائمة كانبان INNER JOIN جدول المواضيع على قائمة كانبان.ID = جدول الموضوع.kanban
WHERE (((topic table.kanban)=[boardIndex]));
هناك أيضًا بعض الاستعلامات، نظرًا لأن معظمها متشابه، فلن أدرجها واحدة تلو الأخرى.
في بيان الاستعلام أعلاه، يمكنك رؤية بعض الأشياء محاطة بـ "[" و"]"، وهي معلمات استعلام. يجب إعطاء قيمة المعلمة أثناء التنفيذ، ثم يتم إحضار قيمة المعلمة في بيان الاستعلام قبل أن يتم تنفيذها. شيء آخر يجب ملاحظته هو أنه عند إنشاء استعلامات INNER JOIN، تحتاج إلى إضافة العلاقة بين الجداول إلى طريقة عرض التصميم، وإلا فلن يمكن إنشاء بيان استعلام INNER JOIN تلقائيًا.
عند هذه النقطة، تم الانتهاء من تصميم قاعدة البيانات، والعمل التالي هو ASP.
2. البناء
1. لبناء النموذج الرئيسي
، يجب عليك أولاً تقديم نموذج يسمح لمستخدمي الإنترنت بإدخال معلومات التسجيل، وهذه هي محتويات HTML، دعنا نلقي نظرة فاحصة على البرنامج النصي ASP الذي ينفذ التسجيل.
(1) قم بتغيير علامة الاقتباس المفردة في المعلومات إلى علامتي اقتباس مفردتين، وأضف علامتي الاقتباس المفردتين قبل وبعد
الدالة SqlStr(البيانات)
SqlStr = "'" & استبدال( البيانات،"'"، "''" ) & "'"
وظيفة النهاية
: هذه وظيفة مخصصة تستخدم لتحويل علامات الاقتباس المفردة (') في إدخال المستخدم إلى علامتي اقتباس مفردتين (''). في ASP، تكون السلسلة محاطة بعلامات اقتباس مزدوجة، لذا يمثل "'" أعلاه سلسلة ذات علامة اقتباس واحدة فقط. السبب وراء حاجتك إلى استبدال علامة اقتباس واحدة بعلامتي اقتباس مفردتين هو أنه في عبارات SQL، يتم استخدام علامات الاقتباس المفردة لتمثيل المتغيرات. لتجنب الالتباس، يجب تمثيل علامات الاقتباس المفردة في السلسلة بواسطة علامتي اقتباس مفردتين. يجب تضمين جميع مدخلات المستخدم في عبارة SQL كمتغيرات، لذا فإن هذه الوظيفة ضرورية.
(2) إعداد التخزين
معرف = طلب ("معرف")
كلمة المرور=طلب("كلمة المرور")
اللقب=طلب("اللقب")
البريد الإلكتروني=طلب("البريد الإلكتروني")
الجنس = طلب ("الجنس")
ملاحظة: ليس من الضروري حفظ المحتوى من نموذج إدخال المستخدم في متغير، ولكنه يسهل القراءة والكتابة.
إذا كان الطلب ("الاسم") = "" ثم الاسم = " " اسم آخر = الطلب ("الاسم")
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، لكن بالنسبة للإجراءات المخزنة، يمكنك فقط استخدام كائن الأوامر. أولاً، قم بإنشاء كائن أمر يسمى cmd، ثم قم بتعيين كائن اتصال conn إلى خاصية ActiveConnection الخاصة بكائن cmd، وقم بتعيين اسم الاستعلام المراد تنفيذه "Query Author" إلى خاصية CommandText، ثم قم بتعيين قيم إلى معلمات الاستعلام. لقد أعلنا عن مصفوفة معلمات param(0)، نظرًا لوجود معلمة واحدة فقط في الاستعلام "مؤلف الاستعلام"، لذا فإن المصفوفة تحتوي على مكون واحد فقط. بشكل عام، إذا كان هناك عدة معلمات في الاستعلام، فيجب الإعلان عن صفيف معلمات يحتوي على عدد مطابق من المكونات. والترتيب الذي تظهر به المعلمات يتوافق مع ترتيب المكونات في المصفوفة. في عملية استخدام استعلام المعلمات، يجب إيلاء اهتمام خاص لحقيقة أن أنواع المعلمات يجب أن تتطابق تمامًا، وإلا سيحدث خطأ، لذلك لا غنى عن وظيفة تحويل النوع CStr () أعلاه.
إذا لم يكن (rs.eof أو rs.bof) ثم
Response.write "خطأ، رقم الهوية الذي أدخلته مشغول، يرجى تجربة رقم آخر!"
آخر
sql = "أدخل في جدول المؤلف (المعرف، اللقب، البريد الإلكتروني، كلمة المرور، الاسم، المدرسة، القسم، الجنس، رقم الهاتف) القيم("
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) صفحة عرض قائمة اللوحة:
<أتش تي أم أل>
<الرأس>
<العنوان>قائمة كانبان</العنوان>
<meta http-equiv="Content-Type"content="text/html; مجموعة الأحرف=GB2312">
</head>
(2) افتح الاتصال واعرض قائمة كانبان
< %Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
sql = "اختر * من قائمة كانبان"
تعيين rs=conn.execute(sql)
%>
ملاحظة: يقوم استعلام SQL البسيط بإرجاع كافة المعلومات حول لوحة كانبان إلى مجموعة السجلات RS. المهمة التالية هي عرض المحتوى المسجل وإنشاء رابط لعرض موضوع اللوحة على اسم اللوحة المقابل.
<body bgcolor="#FFFFFF">
< h2 محاذاة = "مركز" > قائمة كانبان </h2 >
< عرض الجدول = "60%" حدود = "0"تباعد الخلايا = "0" حشو الخلايا = "0"محاذاة = "المركز">
<tr bgcolor="#FFFFCC">
< ارتفاع td = "35" عرض = 25%"> اسم لوحة المسح </td>
<ارتفاع td='35' عرض='21%'>المشرف</td>
<td height="35" width="23%">عدد المواضيع</td>
<td height="35" width="31%">تسجيل دخول المشرف</td>
</tr>
ملاحظة: هذا الجزء مخصص لعرض عنوان كل عمود في الجدول. هنا لا أستخدم وظيفة موحدة لعرض محتويات سجل RS، لأن هذا يسمح بمزيد من التحكم في مظهر ونمط الجدول. الاستخدام على الرغم من أن الاستيقاظ مرهق بعض الشيء، إلا أنه أكثر مرونة.
<%
يفعل
boardid=rs("id")
اسم اللوحة = آر إس ("الاسم")
boardmanager=rs("مالك مجلس الإدارة")
Response.write "<tr><td><a href=qBoard.asp?boardid="& boardid& "&boardname=" & boardname& ">" & boardname &"< /a>< /td>"
ملاحظة: هذا السطر هو والأهم من ذلك، عند النقر على اسم كل لوحة، يمكنك الاتصال بالصفحة التي تعرض موضوع اللوحة. يبدو رمز البرنامج مرهقًا بعض الشيء، سأقوم بتفصيله وشرحه لك، وسوف تفهمه. بعد النقر، يطلب المتصفح صفحة qBoard.asp باستخدام معرف اللوحة الذي يمثل رقم معرف اللوحة المراد عرضها. يتم استخدام علامة الاستفهام (؟) للفصل بين صفحة الطلب والمعلمة. Boardid هو المتغير الذي تم تعيينه مسبقًا، والذي يحتوي على رقم معرف اللوحة المقابلة. يحتوي هذا الاتصال أيضًا على معلمة boardname أخرى، والتي يتم استخدامها لتمرير اسم اللوحة إلى صفحة qBoard.asp. استخدم "&" للفصل بين المعلمات المتعددة. هذه المعلمة غير ضرورية، حيث يتم تمريرها لتجنب استخدام معرف اللوحة مرة أخرى للاستعلام عن اسم اللوحة في qBorad.asp. بشكل عام، يجب استخدام عمليات قاعدة البيانات بأقل قدر ممكن، مما قد يؤدي إلى تحسين أداء صفحات ASP. لأن عبارة Response.Write تستخدم السلاسل كمعلمات، يتم استخدام حرف الاتصال "&" بين السلاسل والمتغيرات المذكورة أعلاه. يجب أن تكون النتيجة النهائية لشرح صفحة ASP هكذا
<td>< a href=qBoard.asp?boardid=1&boardname=System Board>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...، يتم عرض كافة الرسائل الموجودة في مجموعة السجلات.
</الجدول>
<div align="center"><br>
اضغط على اسم المنتدى للحصول على قائمة المواضيع، اضغط على اسم مالك المنتدى لعرض رسائل صاحب المنتدى
</شعبة>
</ الجسم>
</أتش تي أم أل>
<%
تعيين RS=لا شيء
conn. Close
تعيين كون = لا شيء
%>
(3) قم بإنشاء صفحة qBaord.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 param(0) //ملاحظة: قم بإعلان صفيف المعلمات
param(0) = CLng(boardid)//ملاحظة: لا يمكن تجاهل CLng
تعيين rs = cmd.Execute(،param)
%>
<أتش تي أم أل>
<الرأس>
<العنوان>قائمة المواضيع</العنوان>
<meta http-equiv="Content-Type"content="text/html; مجموعة الأحرف=GB2312">
</الرأس>
<body bgcolor="#FFFFFF">
< h1 align="center"><%=rs("اسم kanban")%>قائمة سمات اللوحة</h1>
< عرض الجدول = "80%" حد = "0" تباعد الخلايا = "0" حشو الخلية = "0" محاذاة = "المركز" >
<tr bgcolor="#FFFFCC">
<td width="89%" height="21">الموضوع</td>
<td width="11%" height="21">عدد المقالات</td>
</tr>
<%
يفعل
themeid=rs("id")
اسم الموضوع = آر إس ("العنوان")
sum=rs("عدد المقالات")
response.write "< tr>< td><a href=qtopic.asp?topicid=" & themeid& "&boardname=" & boardname& ">" & اسم الموضوع &"< /a>< /td>"
استجابة.اكتب "< td>" &مجموع & "< /td>< /tr>"
rs.movenext
حلقة حتى rs.eof
%>
</الجدول>
</ الجسم>
</أتش تي أم أل>
ملاحظة: يسرد qBoard.asp كافة المواضيع الموجودة ضمن منتدى معين، وبعد النقر فوق اسم الموضوع، ستدخل إلى قائمة المقالات الخاصة بالموضوع. يتم تطبيق هذه القائمة بواسطة البرنامج النصي ASP qTopic.asp. رمز برنامج Qtopic.asp هو تقريبًا نفس رمز qBoard.asp في جوهره، ولكن هناك اختلافات في التفاصيل الخاصة بكل منهما، ولن أخوض في مزيد من التفاصيل هنا.
(4) بعد الضغط على عنوان المقالة في قائمة المقالات، ستدخل إلى صفحة تصفح محتوى المقالة Article.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 = "الاستعلام عن المقالات حسب المعرف"
ReDim المعلمة (0) 'الإعلان
param(0) = CLng(articleid) ' لا يمكن تجاهل Cint
تعيين rs = cmd.Execute(،param)
المؤلف = رس ("المؤلف")
العنوان = آر إس ("العنوان")
البيانات = آر إس ("التاريخ")
معدل = rs ("الدرجة الموصى بها")
boardid=rs("kanbanid")
themeid=rs("topicid")
اسم اللوحة = rs ("اسم اللوحة")
اسم الموضوع = rs ("اسم الموضوع")
المحتوى = آر إس ("المحتوى")
content=replace(content,vbCrlf,"</p><p>")
content="< p>" & content& "< /p>"
ملاحظة: هذا شيء يجب ملاحظته. يحتوي حقل المحتوى على نص من نوع المذكرة، والذي يمكن أن يحتوي على أحرف سطر جديد. في عرض HTML، يجب استبدال حرف السطر الجديد (أي ثابت vbCrlf) برمز فقرة HTML. بهذه الطريقة، لن يؤدي الاتصال بين الفقرات إلى تعطيل تنسيق الإدخال الأصلي. إذا كنت تريد تصميمًا أفضل، فيمكنك استخدام CSS لإعادة تعيين علامة <P> وتعيين سمة المسافة البادئة للاختبار الخاصة بها لتحقيق مسافة في بداية كل فقرة.
(5) أضف واحدة إلى عدد النقرات
sql = "تحديث جدول المحتوى، تعيين عدد النقرات = عدد النقرات + 1 معرّف المكان =" & معرف المقالة
conn.execute sql
ملاحظة: يوجد هنا عبارة SQL عند عرض الصفحة، سيتم زيادة حقل عدد النقرات في الجدول المقابل بمقدار واحد، بحيث يمكن حساب عدد مرات مشاهدة المقالة وترتيبها بالترتيب. عند تنفيذ عبارة المقالة، وجدت ما يلي: في الأصل في عبارة SQL، يجب تمييز اسم المتغير المضمن بعلامات اقتباس مفردة، لكنني لم أضف علامات اقتباس مفردة إلى متغير Articleid هنا، وقد مرت بالفعل، وأنا أكتب هكذا لقد تسبب دائمًا في حدوث أخطاء في الماضي وأتساءل عما إذا كان ذلك بسبب الإصدار الجديد من ADO.
تعيين كمد = لا شيء
%>
<أتش تي أم أل>
<الرأس>
<عنوان>مستند بدون عنوان</عنوان>
<meta http-equiv="Content-Type"content="text/html; مجموعة الأحرف=GB2312">
</الرأس>
<body bgcolor="#E9E9E4">
< عرض الجدول = "89%" حد = "0" تباعد الخلايا = "0" حشو الخلية = "0" محاذاة = "المركز" >
<tr bgcolor="#CCCCCC">
<td>المؤلف:<font color="#FF3366"><a href="qauthor.asp?author=<%=author%>">< %=author%> < /a>< /font>تاريخ النشر: < لون الخط = "#FF3333"><%=بيانات%>< /font>
لوحة كانبان:< Font color="#FF3333"><a href="qboard.asp?boardid=< %=boardid%>">< %=boardname%>< /a>< /font> توصية مالك اللوحة:< لون الخط = "#FF3333">#معدل#</font>< /td>
</tr>
<tr bgcolor="#CCCCCC">
<td>العنوان:<font color="#FF3333"><%=title%>
الموضوع: < a href="qtopic.asp?topicid=<%=topicid%>"> < %=topicname%>< /a> < /font>< /td>
</tr>
<tr فالين = "أعلى">
<تد>
<ساعة>
< لون الخط = "#FF3366"> محتوى المقال: < /font>< br>
<br>
< لون الخط=أزرق>< %response.writecontent%>< /font>
<br>
<br>
</تد>
</tr>
<tr فالين = "أعلى">
<ارتفاع td = "18">
< عرض الجدول = "50%" حد = "0" تباعد الخلايا = "0" بطانة الخلية = "0" محاذاة = "يمين" bgcolor = "#CCCCCC">
<tr>
< عرض td="0%"> < /td>
<td width="65%">حول هذا الموضوع<a href="submit.asp?topicid=< %=topicid%>&boardid=<%=boardid%>">اترك تعليق< /a></td>
يتيح هذا الاتصال لمستخدمي الإنترنت التعبير عن آرائهم حول موضوع هذا التعليق، وهذا ما ستتحدث عنه الوحدة التالية، لذلك لن أذكره هنا.
</tr>
</الجدول>
</تد>
</tr>
</الجدول>
</ الجسم>
</أتش تي أم أل>
<%
تعيين RS=لا شيء
conn. Close
تعيين كون = لا شيء
%>
في هذه المرحلة، اكتمل أيضًا جزء عرض المقالة. دعونا نلقي نظرة على كيفية تنفيذ جزء نشر المقالة.
3. قم بإنشاء جزء نشر المقالة.
تحتوي وحدة نشر المقالة على صفحتين فقط، إحداهما هي Submit.asp المذكورة سابقًا، والتي تُستخدم لتوفير نموذج الإدخال، والأخرى هي subresult.asp، والتي تُستخدم لمعالجة النموذج. مدخل. الصفحة السابقة بسيطة للغاية وهي في الأساس نموذج HTML ولا يوجد الكثير لنتحدث عنه.
<أتش تي أم أل>
<الرأس>
<العنوان>نشر المقال</العنوان>
<meta http-equiv="Content-Type"content="text/html; مجموعة الأحرف=GB2312">
</الرأس>
<body bgcolor="#FFFFFF">
<%
المؤلف=طلب("المؤلف")
كلمة المرور = طلب ("كلمة المرور")
themeid=request("topicid")
boardid=request("boardid")
المحتوى = الطلب ("المحتوى")
title=request("title")
ملاحظة: يأخذ هذا القسم محتوى الجدول المقدم في Submit.asp ويضعه في المتغير المقابل.
<أتش تي أم أل>
<الرأس>
<العنوان>نشر المقال</العنوان>
<meta http-equiv="Content-Type"content="text/html; مجموعة الأحرف=GB2312">
</الرأس>
<body bgcolor="#FFFFFF">
<%
المؤلف=طلب("المؤلف")
كلمة المرور = طلب ("كلمة المرور")
themeid=request("topicid")
boardid=request("boardid")
المحتوى = الطلب ("المحتوى")
title=request("title")
(1) الاستعلام عن وجود المؤلف
cmd.CommandText = "اختر * من جدول المؤلف حيث المعرف='" & المؤلف &"'"
اضبط rs = cmd.Execute()
(2) تحقق من الأذونات
cmd.CommandText = "اختر * من جدول المؤلف حيث المعرف='" & المؤلف &"'"
Set rs = cmd.Execute()
ملاحظة: يتحقق هذا القسم من أذونات المؤلف ويعالج الأخطاء وفقًا لذلك في حالة عدم وجود الحساب أو كلمة المرور غير صحيحة. هنا يمكنك رؤية استخدام Response.end، والذي يُستخدم لإنهاء البرنامج النصي ASP الحالي. بالاشتراك مع عبارات if، يمكن معالجة الأخطاء المتوقعة في البرنامج. في تطبيق الويب الجيد، تعد معالجة الأخطاء أمرًا ضروريًا.
(3) تغيير علامة الاقتباس المفردة في المعلومات إلى علامتي اقتباس مفردتين، وإضافة علامتي الاقتباس المفردتين قبل وبعد
الدالة SqlStr(البيانات)
SqlStr = "'" & استبدال( البيانات،"'"، "''" ) & "'"
وظيفة النهاية
'الكتابة إلى قاعدة البيانات
sql = "أدخل في جدول المحتوى (معرف اللوحة، معرف الموضوع، معرف المؤلف، العنوان، المحتوى)القيم("
sql = sql & SqlStr(topicid) & ""،
sql = sql & SqlStr(boardid) & "،"
sql = sql & SqlStr(المؤلف) & "،"
sql = sql & SqlStr(العنوان) & "،"
sql = sql & SqlStr(المحتوى) & ")"
كون.تنفيذ SQL
%>
<h2>تم إرسال المقال إلى قاعدة البيانات ويمكن الاطلاع عليه بعد مراجعة المشرف له <h2>
</ الجسم>
</html>
في هذه المرحلة، تم حفظ المقالة في قاعدة البيانات. ومع ذلك، لا يمكن عرضه على الفور ويتطلب موافقة المشرف. بعد ذلك، دعونا نلقي نظرة على الجزء الإداري في المنتدى.
4. الجزء الإداري للمنتدى
هو جوهر منتدانا، ولكن لا يوجد شيء خاص في تنفيذه. لا تزال نفس الأشياء القديمة: معالجة النماذج واستعلام قاعدة البيانات واستخدام ASP لدمجها بشكل عضوي. عند الدخول إلى وضع مراجعة المقالة (معالجة المنتدى المذكورة سابقاً)، فإن الشيء الأكثر أهمية هو التحقق من هوية المشرف. دعونا نلقي نظرة على صفحة تسجيل دخول المشرف:
<%
boardid=request("boardid")
(ملاحظة: يتم تمرير معرف اللوحة عن طريق الاتصال بهذه الصفحة وهو معرف اللوحة المراد معالجتها. ومن خلال هذا فقط يمكننا معرفة اللوحة التي تتم معالجتها.)
تعيين 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 = "الاستعلام عن كلمة مرور الوسيط"
إعادة ديم المعلمة(0)
param(0) = CLng(boardid) //ملاحظة: لا يمكن تجاهل CLng
تعيين rs = cmd.Execute(،param)
boardmanager=rs("مالك مجلس الإدارة")
تعيين كمد = لا شيء
%>
<أتش تي أم أل>
<الرأس>
<عنوان>مستند بدون عنوان</عنوان>
<meta http-equiv="Content-Type"content="text/html; مجموعة الأحرف=GB2312">
</الرأس>
<body bgcolor="#FFFFFF">
< p> فقط مالك اللوحة < %=boardmanager%> يمكنه الدخول إلى هذا المكان </p>
<p>يرجى إدخال كلمة مرور التحقق، وللحفاظ على المصادقة، يرجى تشغيل ملفات تعريف الارتباط في متصفحك. </ع>
< طريقة النموذج = "post" action = "managerloginrest.asp">
<نوع الإدخال = "كلمة المرور" الاسم = "كلمة المرور">
< نوع الإدخال = "مخفي" الاسم = "معرف اللوحة" القيمة =< %=معرف اللوحة%>>
<نوع الإدخال = "إرسال" الاسم = "إرسال" القيمة = "موافق">
</النموذج>
ملاحظة: هذه الصفحة مخصصة لتسجيل الدخول فقط. بعد الحصول على كلمة المرور التي أدخلها Mozhu، لا يمكنه إجراء التحقق بدلاً من ذلك، سيتم تنفيذ عملية التحقق في الصفحة التالية. في الواقع، يمكن إكمال أعمال إدخال كلمة المرور والتحقق منها في صفحة واحدة، لكن الترتيب الهيكلي لرمز البرنامج مزعج بعض الشيء.
</ الجسم>
</أتش تي أم أل>
<%
تعيين RS=لا شيء
conn. Close
تعيين كون = لا شيء
%>
الآن بعد أن تم الحصول على معرف الوسيط وكلمة المرور المدخلة، فيما يلي مدير عمل التحقق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("كلمة المرور") ثم %>
<أتش تي أم أل>
<الرأس>
<العنوان> المصادقة</العنوان>
<meta http-equiv="Content-Type"content="text/html; مجموعة الأحرف=GB2312">
</الرأس>
<body bgcolor="#FFFFFF">
كلمة المرور غير صحيحة</الجسم>
</أتش تي أم أل>
<%
آخر
session("beenhere")=boarded
ملاحظة: يتطلب استخدام الجلسة للحفاظ على هوية المشرف تشغيل ملفات تعريف الارتباط الخاصة بمتصفح العميل. لأن الجلسة يتم تنفيذها من خلال ملفات تعريف الارتباط. هنا، قم بتعيين معرف اللوحة لمتغير الجلسة هناك، للإشارة إلى أن المشرف قد اجتاز مصادقة الهوية. في كل صفحة معالجة إصدار لاحقة، تحقق مما إذا كان هناك مطابقًا لمعرف الإصدار المقابل.
url="boardmanager.asp?boardid="& boardid
عنوان url الخاص بـ Response.redirect
: عندما تعلمت لغة ASP لأول مرة، كنت دائمًا في حيرة من أمري بشأن طريقة Response.redirect، ولم أكن سعيدًا بها الآن، دعني أخبرك ببعض التقنيات. قبل استخدامه، يجب عليك تمرير Response.buffer=true للسماح لصفحة ASP باستخدام المخزن المؤقت. في هذا الوقت، قبل ترجمة ASP إلى كود برنامج HTML، يتم وضعه في المخزن المؤقت ولا يتم إرساله مباشرة إلى متصفح العميل. شيء آخر يجب معرفته هو: قبل استخدام Response.redirect، لا يمكن إرسال كود برنامج HTML فعلي إلى متصفح العميل، وإلا سيحدث خطأ. بالطبع، هناك حلول بديلة إذا تم تفسير كود برنامج HTML قبل Response.redirect، فيمكنك استخدام التابع Response.clear لمسح المخزن المؤقت، ثم استخدامه لإعادة التعيين.
نهاية إذا
%>
ملاحظة: ما يلي هو هدف إعادة التعيين بعد تمرير المصادقة أعلاه: boardmanager.asp. وسوف يسرد جميع المقالات التي تمت معالجتها.
<%
boardid=request("boardid")
if session("beenthere")<>boardidthen Response.redirect "forums.asp"
ملاحظة: هذا هو المكان الذي يتم فيه التحقق من هوية المشرف، لأنه تم وضع علامة عليه في متصفح Bamboo من خلال ملفات تعريف الارتباط، والآن يمكننا اجتياز Seesion دعونا نتعرف الوسيط. إذا كانت العلامات غير متطابقة، فسيتم العودة إلى صفحة تسجيل الدخول الأصلية من خلال Response.redirect. إذا لم يتم تشغيل ملف تعريف الارتباط الخاص بمتصفح المشرف، فستكون قيمة Seesion ("beenthere") فارغة، ولن يكون من الممكن الوصول إلى هذه الصفحة أيضًا.
تعيين 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 = "اختر اسمًا من قائمة اللوحة حيث" & boardid
تعيين rs=conn.execute(sql)
اسم اللوحة = آر إس ("الاسم")
cmd.commandtext="قائمة المقالات غير المنشورة"
إعادة ديم المعلمة(0)
param(0) = CLng(boardid)//ملاحظة: لا يمكن تجاهل Clng
تعيين rs = cmd.Execute(،param)
تعيين كمد = لا شيء
%>
<أتش تي أم أل>
<الرأس>
<العنوان>معالجة النشر</العنوان>
<meta http-equiv="Content-Type"content="text/html; مجموعة الأحرف=GB2312">
</الرأس>
<body bgcolor="#FFFFFF">
< H1 align = "المركز" >< ٪ = اسم اللوحة ٪ > الإدارة العامة < /H1 >
< HR >
<٪
إذا كانت Rs.eof أو Rs.BoF ثم استجابة.
Response.end
%>
ملاحظة: إذا لم يتم نشر مقالات جديدة بواسطة مستخدمي الإنترنت ، فإن ذلك سيعطي موجهًا مقابلًا ويستخدم الاستجابة. تنهي لإنهاء عرض هذه الصفحة.
< عرض الجدول = "90 ٪" border = "0" cellpacing = "0" cellpadding = "0" align = "center" >
< tr bgcolor = "#ffffcc" >
< عرض TD = "40 ٪" الارتفاع = "20" > السمة </td >
< TD Width = "40 ٪" height = "20" > عنوان المقالة </td >
< عرض TD = "8 ٪" الارتفاع = "20" > المؤلف </td >
< عرض TD = "12 ٪" الارتفاع = "20" > التاريخ </td >
</tr>
<٪
يفعل
TopicId = RS ("TopicId")
مقاليد = روبية ("مقاليد")
البيانات = روبية ("التاريخ")
Datast = CSTR (Year (Data)) و "-" & CSTR (Month (DATA)) و "-" & CSTR (DAY (DATA))
المؤلف = روبية ("مؤلف")
articlename = RS ("العنوان")
TopicName = RS ("الموضوع")
Response.write "< tr >< td >< a href = qtopic.asp؟ topicid =" & topicid & ">" & topicname & "< /a >< /td >"
Response.write "< td >< a href = managearticle.asp؟ alticalId =" & stalleid & "& boardid =" & boardid & ">" & articlename & "< /a >< /td >"
Response.write "< td >< a href = qauthor.asp؟ uplut =" & uptor & ">" & uptor & "< /a >< /td >"
استجابة. write "< td >" & datast & "< /td >< /tr >"
rs.movenext
حلقة حتى Rs.eof
%>
</الجدول>
</html >
<٪
تعيين RS=لا شيء
conn. Close
تعيين كون = لا شيء
%>
</body >
عند النقر على رابط المقالة المقابلة ، ستقوم بإدخال صفحة معالجة المقالة managearticle.asp:
<٪
chorlesid = طلب ("مقاليد")
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.createBject ("adodb.command")
تعيين cmd.activeConnection = conn
cmd.CommandText = "Query Attlics by id"
redim param (0)
param (0) = clng (alsionId) // ملاحظة: لا يمكن تجاهل CLNG
تعيين rs = cmd.execute (، param)
المؤلف = روبية ("مؤلف")
العنوان = روبية ("العنوان")
البيانات = روبية ("التاريخ")
معدل = RS ("الدرجة الموصى بها")
boardid = rs ("kanbanid")
TopicId = RS ("TopicId")
اسم اللوح = RS ("اسم اللوحة")
TopicName = RS ("اسم الموضوع")
المحتوى = RS ("المحتوى")
content = استبدال (المحتوى ، vbcrlf ، "</p >< p >")
content = "< p >" والمحتوى و "< /p >"
تعيين cmd = لا شيء
%>
< HTML >
<الرأس>
< العنوان > مستند بدون عنوان </العنوان >
< meta http-equiv = "content-type" content = "text/html ؛ charset = gb2312">
</الرأس>
< body bgcolor = "#e9e9e4" >
< عرض الجدول = "89 ٪" border = "0" cellpacing = "0" cellpadding = "0" align = "center" >
< tr bgcolor = "#cccccc" >
< td > المؤلف: < font color = "#ff3366" >< a href = "qauthor.asp؟ upluctor = < ٪ = efference ٪ >" >< ٪ = efference ٪ > < /a >< /font > تاريخ النشر: < font color = "#ff3333" >< ٪ = data ٪ >< /font >
لوحة Kanban: < font color = "#ff3333" >< a href = "qboard.asp؟ boardid = < ٪ = boardid ٪ >" >< ٪ = poorname ٪ >< /a >< /font > توصية مالك اللوحة: < font color = "#ff3333">#rate#< /font >< /td >
</tr>
< tr bgcolor = "#cccccc" >
td td > العنوان: < font color = "#ff3333" >< ٪ = title ٪ >
الموضوع: < a href = "qtopic.asp؟ topicid = < ٪ = topicid ٪ >" > < ٪ = topicname ٪ >< /a > /font >< /td >
</tr>
< tr valign = "top" >
< TD >
< HR >
< font color = "#ff3366" > محتوى المقالة: < /font >< br >
<br>
< Font Color = Blue >< ٪ Response.WriteContent ٪ >< /font >
<br>
< HR >
</تد>
</tr>
< tr valign = "top" >
< method method = "post" Action = "ManagerEsult.asp" >
< ارتفاع TD = "18" >
< عرض الجدول = "100 ٪" الحدود = "1" cellpacing = "1" cellpadding = "1" >
<tr>
< عرض TD = "29 ٪">
< div align = "right" >
< نوع الإدخال = "Hidden" name = "boardid" value = "< ٪ = boardid ٪ >" >
< نوع الإدخال = "Hidden" name = "TopicId" value = "< ٪ = topicid ٪ >" >
< نوع الإدخال = "Hidden" name = "alticalId" value = "< ٪ = alticalId ٪ >" >
معالجة المادة: < /div >
</تد>
< TD Width = "12 ٪" BorderColor = "#006666"> حذف:
< نوع الإدخال = "الراديو" name = "إدارة" القيمة = 1 >
</تد>
< TD Width = "30 ٪" BorderColor = "#006666"> تم نشره بواسطة:
< نوع الإدخال = "الراديو" name = "إدارة" القيمة = 2 >
مستوى التوصية < حدد name = "حدد" >
< قيمة الخيار = "1" > 1 </Option >
< قيمة الخيار = "2" > 2 </Option >
< قيمة الخيار = "3" محددة > 3 </Option >
< قيمة الخيار = "4" > 4 </Option >
< قيمة الخيار = "5" > 5 </Option >
</SELECT >
</تد>
< TD Width = "20 ٪" BorderColor = "#006666"> العملية لاحقًا:
< نوع الإدخال = "الراديو" name = "إدارة" القيمة = 3 >
</تد>
< عرض TD = "9 ٪" >
< نوع الإدخال = "إرسال" name = "إرسال" value = "OK" >
</تد>
</tr>
</الجدول>
</تد>
</النموذج>
</tr>
</الجدول>
</ الجسم>
</html >
<٪
تعيين RS=لا شيء
conn. Close
تعيين كون = لا شيء
%>
ملاحظة: هذه الصفحة هي نفس المقالة. asp في وحدة عرض المقالة.
بعد ذلك ، نحتاج إلى تعديل الأجزاء المقابلة من قاعدة البيانات وفقًا لعملية معالجة المشرف.
< ٪ استجابة. buffer = true ٪ >
< HTML >
<الرأس>
< العنوان > معالجة المقالة </العنوان >
< meta http-equiv = "content-type" content = "text/html ؛ charset = gb2312">
</الرأس>
< body bgcolor = "#e9e9e4" >
<٪
chorlesid = طلب ("مقاليد")
boardid = طلب ("boardid")
TopicId = طلب ("TopicId")
إدارة = طلب ("إدارة")
قبول محتوى النموذج
استجابة. write إدارة 'show 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 =" & alsionID
conn.execute SQL
استجابة. تم حذف المقالة "< H1 > تم حذفها </H1 >"
استجابة. write "< a href = > back </a>"
elseif clng (طلب ("إدارة")) = 2th
SQL = "تحديث جدول المحتوى SET Publish = true whyid =" & stalleid
conn.execute SQL
SQL = "تحديث جدول الموضوع مجموعة المقالات = عدد المقالات+1 Whye ID =" & TopicId
conn.execute SQL
Response.write "< H1 > تم نشر مقالة </H1 >"
استجابة. write "< a href = > back </a>"
آخر
استجابة
response.redirect "boardmanager.asp؟ boardid =" & barded
نهاية إذا
%>
</ الجسم>
</html >
<٪
conn. Close
تعيين كون = لا شيء
٪>
بعد الخطوات المذكورة أعلاه ، يتم إكمال جميع الأجزاء بشكل أساسي. إذا كنت تريد أن تكون قادرًا على استخدامه ، فأنت بحاجة إلى بذل المزيد من الجهد في تصميم التصميم ، والتحقق من بيانات العميل ، إلخ. ولكن هذه كلها محتوى HTML وليس لها علاقة مع ASP ، لذلك لن أخوض في التفاصيل هنا.