المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : أساسيات.الـ Asp ...


red^eye
30-04-2008, 05:04 PM
السلام عليكم ورحمة الله تعالى وبركاته

شرح مفصل طويل نوعا ما وممل...لول... لمن يرغب بتعلم لغة ال ASP...;)



في الواقع أظن أنك كثيرا ما تسمع هذه الأيام بهذه اللغة ، فإذا كنت كذلك ولديك فكرة عنها فلا داعي لقراءة هذه المقدمة ولكن إن أحببت فلا بأس بذلك.

هل تطمح إلى تعلم هذه اللغة ؟؟؟ إذا كانت إجابتك بنعم فهذه بداية جيدة بكل تأكيد فمن الرائع تعلم كل ما هو جديد في عالم البرمجة والتصميم.

بكل صراحة وأمانة تعتبر هذه اللغة سهلة للغاية دون أي تعقيدات فيها وتعلمها يعتبر سهلا ويسيرا وسنبدأ مشروع بسيط في البداية ولكن أعدكم أنه سيكبر شيئا فشيئا حتى يصبح موقعا متكاملا بكل معنى الكلمة.

الكثير منا قد يتساءل عن السبب في استخدامنا للـ ASP في الوقت الذي نستطيع أن نصمم صفحات شخصية مذهلة باستخدام الـ HTML (Hyper Text Markup ******** ) باستخدام برامج مساعدة في التصميم كبرنامج الفرونت بيج لشركة مايكروسوفت إذا أين الفائدة في استخدام الـ ASP ؟

والتي هي اختصار لـــ Active Server Pages أي الصفحات التفاعلية الديناميكية ، ونجد هنا من اسم اللغة نفسها ما يعبر عن شخصيتها ، إذا نستنتج هنا أننا نستطيع أن نقوم بعمل صفحات تفاعلية ، بكلمات أبسط صفحات لها القدرة على الاستجابة للأوامر والاختيارات وما إلى غير ذلك ، وهنا يتجسد الفرق الأساسي عن لغة الـ HTML الغير قادرة على التفاعل مع المستخدم وذلك عند الضغط على زر معين أو طلب معلومات محددة.

والآاااااااااان هل أدركت الفرق ؟؟

أتمنى ذلك بكل تأكيد .... ما رأيك أن تأخذ رشفة من فنجان الشاي الموضوع على المكتب أمامك وتأخذ نفسا عميقا .... حتى نكمل الرحلة حتى النهاية !

ماذا تحتاج للبدء ببرمجة الصفحات باستخدام الــ ASP ؟

أولا : تركيب (PWS) Personal Web Server أو Internet Information Server (IIS)

اعند الحديث عن لغات برمجة المواقع مثل ASP و PHP و CGI وغيرها فإنك لا تستطيع التعامل معها مباشرة على الأجهزة الشخصية وذلك لأنها بحاجة إلى Server حتى تعمل. إذا عوضا عن حجز مساحات عند الشركات لتتمكن من البدء بالعمل مع الـ ASPبإمكانك تركيب بعض البرامج التي تجعل حاسبك الشخصي Server محلي ، وبذلك تأخذ كل الوقت في تصميم صفحاتك وعرضها على جهازك وكأنها على الشبكة العنكبوتية.

ويندوز 98:

ركب برنامج (PWS) من خلال فتح قرص ويندوز Win98 CD واختر المجلد add-one ومنه PWS ومنه شغل الملف setup.exe.

ويندوز 2000 أو NT : أو Xp

ركب (IIS) للويندوز وهو متوفرة مع سيدي تركيب الويندوز، وذلك بالذهاب لي لوحة التحكم Control Panel ثم اختيار إضافة وإزالة مكونات ويندوز Add/Remove Windows Components واختيار Internet Information Server منه.

ثانيا: أين ستكتب كـود الـ ASP ؟؟

لا يوجد برنامج محدد يمكن استخدام برنامج Front Page المعروف لشركة مايكروسوفت أو يمكنك استخدام الـ Notepad المتوفر مع الوندوووز ولكن لا انصح بذلك فالفرونت بيج أفضل من حيث المساعدة على التصميم ، أما للناس المختصين فيمكنهم استخدام مجموعة الـــ Microsoft Visual Studio وبالتحديد برنامج Microsoft Interdev .

ASP ؟!!

ASP هي اختصار للاسم Active Server Pages أو كما يسميها البعض "صفحات المزود النشط"، و تنطق " آي إس بي " .

ASP هي تقنية طورتها شركة مايكروسوفت لإنشاء صفحات وتطبيقات ويب قوية و ديناميكية. لإنشاء هذه الصفحات يمكنك إضافة أوامر HTML أو أحد لغات البرمجة النصية Scripting ******** مثل VBScript أو JScript، ويمكنك أيضاً ربط هذه الصفحات بقاعدة بيانات مثل Access أو SQL Server.

~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~

معالجة صفحات ASP:

تختلف صفحات ASP عن صفحات HTML في أن معالجة هذه الصفحات تكون من جانب الجهاز المزود للخدمة لا جهاز المستخدم! حيث يكون مثبت في الجهاز المزود للخدمة برامج بها مكتبة ربط ديناميكية تدعى ASP.DLL، فعندما يطلب المستخدم صفحة بالامتداد asp. فإن مزود الخدمة يقوم بمعالجة أوامر ASP الموجودة في هذه الصفحة ويرسل النتيجة، وهذه النتيجة عبارة عن أوامر HTML ! لعرضها في مستعرض الويب على جهاز المستخدم. هذا الأسلوب يوفر درجة من الأمان لهذه الصفحات كما أنها تحفظ حقوق المبرمج من النسخ ! حيث أن المستخدم لا يمكنه رؤية أوامر ASP عند عرض مصدر الصفحة، وإنما يرى أوامر HTML وهي ناتج المعالجة.

برامج خادم الويب:

وهناك برنامجين مناسبين لهذه العميلة وهما :

* PWS وهي اختصار لـ Personal Wep Server
* أو برنامج IIS وهو اختصار لـ Internet Information Server.

يعتمد اختيار أحد هذين البرنامجين على نظام التشغيل لديك :

نظام التشغيل
IIS
IIS
IIS
PWS

برنامج خادم الويب
Win NT Server
Win 2000 workstation/Server
Win XP
Win 9X (98/95)

Windows NT Server :

نسخة IIS المناسبة لـ Win NTهي IIS 4.0 والموجودة ضمن Windows NT Option pack في الوصلة التالية:

http://www.microsoft.com/ntserver/nts/downloads/recommended/NT4OptPk/

Win 2000 Server or Workstation and Win XP :

IIS 5.0 هي النسخة المناسبة لـ Win 2000 والتي تكون جزء من نظام التشغيل، فلا حاجة لتحميلها، ولكن إن لم تكون موجودة فيمكن تثبيتها من Windows 2000 CD-ROM.

أدخل القرص في محرك الأقراص واتبع الخطوات التالية :

من لوحة التحكم (control panel) ----> إضافة وإزالة برامج (Add or Remove Programs) كما هو موضح بالشكل:

http://up.qatarw.com/u/files/eljmv0l0cgvxbg4afxaz.bmp (http://up.qatarw.com/u/)

http://up.qatarw.com/u/files/2331ryhjbo2po08nft8l.bmp (http://up.qatarw.com/u/)

http://up.qatarw.com/u/files/hcz50vy98isnmq79j9y9.bmp (http://up.qatarw.com/u/)

تأكد من وجود إشارة بجانب Internet Information Server كما هو موضح في الصورة السابقة ، إن وجدت فهذا يعني أن البرنامج مثبت لديك وإن لم تكن موجودة فاختارها واضغط على Next وتتبع الخطوات التالية :

http://up.qatarw.com/u/files/adtle9u11ec0bm5fgpb0.bmp (http://up.qatarw.com/u/)

http://up.qatarw.com/u/files/vfzrss9n577vo698zo5d.bmp (http://up.qatarw.com/u/)

Windows 95:
يمكنك تثبيت برنامج PWS الموجود ضمن Windows NT Option pack for Win95 من الموقع التالي:

http://www.microsoft.com/ntserver/nts/downloads/recommended/NT4OptPk/

وتتبع خطوات التثبيت.

Windows 98:

برنامج PWS موجود في Windows 98 CD-ROM، لتثبيته تتبع الخطوات التالية :

- أدخل Windows 98 CD-ROM في محرك الأقراص

- اذهب إلى ابدأ --> تشغيل ( Start|Run)

-أكتب المسار التالي: x:add-onspwssetup.exe حيث x هي رمز محرك الأقراص لديك

-تتبع خطوات التثبيت التالية :

http://up.qatarw.com/u/files/uotwccvgu7qqzb8ex6pt.bmp (http://up.qatarw.com/u/)

http://up.qatarw.com/u/files/y7nifznwg768k11smj2l.bmp (http://up.qatarw.com/u/)

http://up.qatarw.com/u/files/cjq5jz9tbfbfoe6nnnvu.bmp (http://up.qatarw.com/u/)

http://up.qatarw.com/u/files/pkbol7jnex8c1lqdyafs.bmp (http://up.qatarw.com/u/)

هام قبل التثبيت !

* يجب أن تغلق جميع التطبيقات قبل تثبيت أي من البرنامجين

* احرص على أن تكون نسخة برنامج IE هي الحديثة لديك

* Win95 قد يسبب لك مشاكل فيما بعد لذا يفضل تغييره إلى Win98 or Win 2000!

http://up.qatarw.com/u/files/cf65fihg3iru8dt38yur.bmp (http://up.qatarw.com/u/)

بالنقر على أيقونة Internet Information Service سيفتح معك برنامج IIS كما يبدو في الصورة:

http://up.qatarw.com/u/files/noidzo9m7d5sd7dmujsi.bmp (http://up.qatarw.com/u/)

http://up.qatarw.com/u/files/9trigh2crnp1ulhq0myc.bmp (http://up.qatarw.com/u/)

لتغيير مجلد البداية لموقعك :

مجلد البداية هو المجلد الجذري أو المجلد الأم الذي يحتوي على جميع صفحات الويب والمجلدات الفرعية، كل موقع ويب يجب أن يكون له مجلد بداية لكي ينطلق منه المستخدمون في تصفح الموقع ! في برنامج IIS يوجد مجلد افتراضي ينشأ عند تثبيت البرنامج لأول مرة، ولكن بإمكانك تغيير هذا المجلد إلى مجلد آخر إذا أردت.

http://up.qatarw.com/u/files/c0st2bwzs1stwyg1ut06.bmp (http://up.qatarw.com/u/)

http://up.qatarw.com/u/files/q02h01dzlgygl5fs80lc.bmp (http://up.qatarw.com/u/)

لإنشاء مجلد وهمي لموقع الويب على جهازك:

بما أن المستخدمين لا يستطيعون الوصول إلا للصفحات الموجودة في مجلد البداية أو أي مجلد فرعي تحته ، فإن المجلد الوهمي يُمَكّن المستخدمين من الوصول إلى مجلد غير موجود في مجلد البداية أو أي مجلد فرعي تحته ! وبغض النظر عن موقعه الأساسي على جهازك. فمثلاً لو كان لديك مجلد به صفحات ويب ولا تريد نسخها في مجلد البداية أو في أي مجلد فرعي تحته فإنه بإمكانك أن تجعل هذا المجلد كمجلد وهمي وكأنه مجلد فرعي تحت مجلد البداية بدون تغيير موقعه بالفعل ! مع ملاحظة أن المستخدمون لن يعرفوا الموقع الفعلي للمجلد على الجهاز!

http://up.qatarw.com/u/files/f15s6zmc4rsiyamfydhj.bmp (http://up.qatarw.com/u/)

http://up.qatarw.com/u/files/clztc12j0r1or2yws644.bmp (http://up.qatarw.com/u/)

http://up.qatarw.com/u/files/as0pt0cbuxdqxoo0wkkz.bmp (http://up.qatarw.com/u/)

http://up.qatarw.com/u/files/luh2fzm0aln5wt5aly47.bmp (http://up.qatarw.com/u/)

http://up.qatarw.com/u/files/6znyolsb8tthz1j1dc6x.bmp (http://up.qatarw.com/u/)

الخياران Read and Run scripts تكون نشطة في الوضع الافتراضي، فالخيار Read يمكن المستخدمين من عرض الصفحة، وRun script يمكنهم من تشغيل ملفات الأوامر النصية الموجودة بالصفحة مثل أوامر ASP، أما الخيار Execute فإنه يشغل البرامج الموجودة في المجلد قد يسبب تنشيطه مشاكل أمنية لذا لا ينشط عادة! أما الخيار write لإنشاء ملفات في المجلد، والخيار الأخير Browse عندما يحدد المستخدم اسم المجلد ولا يحدد اسم الصفحة التي يريدها يمكنه هذا الخيار من عرض جميع الصفحات الموجودة تحت هذا المجلد ! أيضاً لا يجب تنشيط هذا الخيار ! لأنه ربما توجد صفحات لا تريد المستخدم أن يصل إليها أو يعلم بوجودها !

http://up.qatarw.com/u/files/51hi29fx2kknnygd6shn.bmp (http://up.qatarw.com/u/)

http://up.qatarw.com/u/files/22txuts1pa27j6d67dfd.bmp (http://up.qatarw.com/u/)

ما المطلوب الآن ؟!!

علينا أن ننشئ مجلد فرعي تحت مجلد البداية الافتراضي والذي تجده في المسار:C:Inetpubwwwroot

وليكن هذا المجلد بالاسم ASPTEST مثلاً !! لنحفظ فيه صفحات ASP التي سننشئها معاً في الدروس القادمة بإذن الله.

لست بحاجة لجعل هذا المجلد كمجلد وهمي نظراً لأنه يعتبر مجلد فرعي تحت مجلد البداية الافتراضي!

*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~

برنامج PWS:

نبدأ من ابدأ (Start)--> البرامج (Program)--> اختار Personal Web Server كما هو موضح بالشكل :

http://up.qatarw.com/u/files/ts9ucrl1arqo1l0fkl3n.bmp (http://up.qatarw.com/u/)

لتغيير مجلد البداية لموقع الويب على جهازك :

مجلد البداية هو المجلد الجذري أو المجلد الأم الذي يحتوي على جميع صفحات الويب والمجلدات الفرعية، كل موقع ويب يجب أن يكون له مجلد بداية لكي ينطلق منه المستخدمون في تصفح الموقع ! في برنامج PWS يوجد مجلد افتراضي ينشأ عند تثبيت البرنامج لأول مرة، ولكن بإمكانك تغيير هذا المجلد إلى مجلد آخر إذا أردت كما وضحت الصور التالية

http://up.qatarw.com/u/files/26vu3zujraegg72plqp2.bmp (http://up.qatarw.com/u/)

لإنشاء مجلد وهمي لموقع الويب:

بما أن المستخدمين لا يستطيعون الوصول إلا للصفحات الموجودة في مجلد البداية أو أي مجلد فرعي تحته ، فإن المجلد الوهمي يُمَكّن المستخدمين من الوصول إلى مجلد غير موجود في مجلد البداية أو أي مجلد فرعي تحته ! وبغض النظر عن موقعه الأساسي على جهازك. فمثلاً لو كان لديك مجلد به صفحات ويب ولا تريد نسخها في مجلد البداية أو في أي مجلد فرعي تحته فإنه بإمكانك أن تجعل هذا المجلد كمجلد وهمي وكأنه مجلد فرعي تحت مجلد البداية بدون تغيير موقعه بالفعل ! مع ملاحظة أن المستخدمون لن يعرفوا الموقع الفعلي للمجلد على الجهاز. ليس من الضروري أن يكون الاختصار مختلفاً عن الاسم الأساسي للمجلد، من الممكن أن يكون نفس الاسم ، مع التنبيه على أن التعامل مع هذا المجلد سيكون بالاختصار لا بالاسم الحقيقي للمجلد !

بالنسبة لخيارات تصريح وصول المستخدم للمجلد فهناك ثلاثة خيارات خاصة لكل مجلد وهمي أو مجلد بداية وهي الخيارات scripts تكون نشطة في الوضع الافتراضي، فالخيار Read يمكن المستخدمين من عرض الصفحة، و script يمكنهم من تشغيل ملفات الأوامر النصية الموجودة بالصفحة مثل أوامر ASP، أما الخيار Execute فإنه يشغل البرامج الموجودة في المجلد قد يسبب تنشيطه مشاكل أمنية لذا لا ينشط عادة!وخيارات خاصة بكل المجلدات وهما : Allow Directory Browsing وهي تسمح للمستخدم باستعراض جميع صفحات الويب الموجودة تحت المجلد إذا حدد المستخدم اسم المجلد ولم يحدد اسم الصفحة التي يريد الوصول إليها. لكن لا يفضل تنشيط هذا الخيار حتى لا يتمكن المستخدم من عرض أو حتى معرفة الصفحات الموجودة بالمجلد ! كذلك يوجد الخيار Save Web Site Activity Log هذا الخيار يتيح لك معرفة معلومات عن المستخدمين يتم حفظها في ملف السجل وهو عبارة عن ملف نصي يحفظ عادة في المجلد C:WINDOWSSystemLogFiles أو C:WINDOWSSystem32LogFiles

http://up.qatarw.com/u/files/i007q76ttk592omeutp9.bmp (http://up.qatarw.com/u/)

http://up.qatarw.com/u/files/ufl5crop6r6apr29g9gz.bmp (http://up.qatarw.com/u/)

ما المطلوب الآن ؟!!

علينا أن ننشئ مجلد فرعي تحت مجلد البداية الافتراضي والذي تجده في المسار:C:Inetpubwwwroot

وليكن هذا المجلد بالاسم ASPTEST مثلاً !! لنحفظ فيه صفحات ASP التي سننشئها معاً في الدروس القادمة بإذن الله.

لست بحاجة لجعل هذا المجلد كمجلد وهمي نظراً لأنه يعتبر مجلد فرعي تحت مجلد البداية الافتراضي!

~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~

بعد أن أنشئنا المجلد ASPTEST فإننا سنختبر عمل البرنامج الذي ثبتناه على أجهزتنا وذلك بكتابة كود ASP للاختبار فقط، فلا تقلق إذا لم تفهم هذا الكود!

فكل ما عليك هو أن تفتح برنامج المفكرة وتنسخ فيه الكود التالي:

<%
Response.Write(" هذا مجرد اختبار لعمل برنامج خادم الويب على جهازي")

%>


احفظ الصفحة بالاسم test.asp في المجلد ASPTEST الذي قمنا بإنشائه قبل قليل.

ثم افتح المتصفح واكتب العنوان التالي:

http://localhost/ASPTEST/test.asp

حيث أن كلمة localhost تشير إلى خادم الويب على جهازك يمكنك استبدالها باسم الكمبيوتر أو برقم الآي بي التالي : 127.0.0.1 وهو رقم أجهزة الكمبيوتر التي تعمل ببروتوكول TCP/IP للإشارة إلى نفسها .

ستظهر النتيجة كما بالصورة:

http://up.qatarw.com/u/files/jf7leqj8la2ilzr7xiaw.bmp (http://up.qatarw.com/u/)

أتمنى أن تكون هي نفس النتيجة لديك ! :)

ملاحظة !

إذا كان المستعرض لا ينقلك لصفحة ASP التي طلبتها فغير من اعدادات المتصفح وأجعل طلب الاتصال على الخيار Never dial a connection .

*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
مما يتكون ملف ASP ؟!

ملف ASP يشبه إلى حد ما ملفات HTML، فهو يحتوي على أوامر HTML وكذلك يحتوي على أوامر نصية كالـ VBScript و JScript وغيرها! ويحتوي أيضاً على أوامر خاصة بها تتم معالجتها على الجهاز المزود للخدمة، ويتم وضعها بين العلامتين <% و %>. هاتين العلامتين تنبه برامج خادم الويب بأن ما بينها هي أوامر ASP تحتاج لمعالجة في الخادم قبل إرسال الصفحة المطلوبة للمستخدم.

ذكرنا أنه بإمكاننا إضافة أحد الأوامر النصية إلى ملف ASP ،ولعمل هذا فإننا نضيف السطر التالي في بداية ملف ASP وقبل أوامر HTML وهذا لسطر عبارة عن تعريف بلغة الأوامر النصية المستخدمة في الصفحة :

<%@ ********="**********"%>

<HTML>

<BODY>

<%

' السطر التالي لعرض عبارة السلام عليكم

Response.Write("السلام عليكم")

%>

</BODY>

</HTML>


وهذا يعطيك صورة لمكونات ملف ASP التي ذكرناها.

ملاحظات:

* أود الإشارة هنا إلى أن لغة الأوامر النصية الافتراضية لملف ASP هي VBScript، ولذا فإنه بإمكاننا عدم كتابة تعريف بلغة الأوامر النصية VBScript في ملف ASP!

*لغة VBScript غير حساسة لحالة الأحرف لذا عند كتابة أوامر ASP لا يجب مراعاة حالة الأحرف إذا كانت كبيرة أو صغيرة ! وبعكسها تماماً لغة ********** فيجب مراعاة حالة الأحرف عند كتابة أوامر ASP!! فعند استخدام ********** كلغة أوامر نصية في ملف ASP يجب كتابة الحرف الأول من كل أمر بالأحرف الكبيرة تماماً كالموجود في الكود أعلاه.

*نظراً لأن لغة الأوامر النصية الموجودة في ملف ASP تتم معالجتها من جانب الخادم، فلا يستلزم أن يدعم المتصفح في جهاز المستخدم هذه اللغات.

*يمكنك إضافة تعليقات للأوامر التي تكتبها بوضع العلامة ' قبل كتابة التعليق، حيث أن هذا التعليق يتم تجاهله من جانب الخادم ولا تتم معالجة هذا السطر.

~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

كائنات ASP:

يوجد في ASP سبعة كائنات أساسية تعتبر جزء من مكتبة الربط الديناميكية ASP.DLL الموجودة على الخادم،ولذا فأنت لا تحتاج لأية برامج إضافية للعمل مع هذه الكائنات إطلاقاً !! وهذه الكائنات هي :

*Response

*Request

*Session

*ASPError

*ObjectContext

*Application

*Server

كل كائن من هذه الكائنات له خواص و دوال خاصة به، سنتطرق في هذه السلسلة بإذن الله لكل كائن من هذه الكائنات بشيء من التفصيل.

~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

أول هذه الكائنات التي سنتعرف عليها سيكون الكائن Response.

الكائن Response :

لقد مررت بهذا الكائن في الدروس السابقة ! فهل هو نفسه أحد كائنات ASP التي ذكرناها ؟!! .. نعم هو بالضبط الكائن الذي سنتعرف عليه في هذا الدرس !

الكائن Response مسئول عن إرسال المعلومات من خادم الويب إلى المتصفح في جهاز المستخدم وبإمكانه التحكم بها أيضاً.

خواص ودوال هذا الكائن :

في الحقيقة، لا أستطيع فصل الدوال عن الخواص في الشرح !! لأن غالبية الخواص تحتاج لدوال معينة لنستفيد منها ! ولذلك فإني سأوضحها معاً !

الدالة Write:

من أشهر الدوال في هذا الكائن هي الدالة Write وقد لاحظنا في أمثلة سابقة أن استخدام هذه الدالة يؤدي إلى عرض نص معين في المتصفح !

مثال :

<%
Response.Write("أهلاً بكم في الموسوعة العربية")

%>


*بإمكانك عدم وضع البيانات بين القوسين () .. ولكن تضمين بياناتك بين هذين القوسين يسهل قراءة الكود واستكشاف الأخطاء.
*عبارة Response.Write تستخدم لعرض البيانات المختلفة كنص معين، متغيرات، أو حتى أوامر HTML.

*لعرض نص أو أحد أوامر HTML فيجب وضعها بين علامتي تنصيص " ".
مثال لعرض جملتين، بحيث نجعل كل جملة في سطر مستخدمين الأمر <BR> في HTML:

<%
Response.Write("أهلاً بكم في الموسوعة العربية<BR> سعداء بزيارتكم")

%>


*لعرض بيانات مختلفة فإنك لن تحتاج لكتابة عبارة Response.Write لكل نوع من هذه البيانات على حده ! بإمكانك أن تضعها جميعاً في عبارة واحدة بشرط أن تفصل بين هذه البيانات بالحرف &.
وهذا مثال للتوضيح :

<%
Dim one

one=1

Response.Write("الرقم التالي هو الرقم واحد ويكتب : "& one)

%>


في السطر الثاني والثالث عرفنا متغير بالاسم one وعيّنا له القيمة 1. وفي السطر الرابع كتبنا نص و عرضنا قيمة المتغير one بجانب النص بعد أن فصلنا هذين البيانين بالعلامة & .

لاحظ أن السطر الثاني و الثالث عبارة عن أوامر لغة VBScript. ولم نحتج للتعريف بها في البداية وذلك لأنها اللغة الافتراضية والتي سنستخدمها في هذه الدروس.

*يمكنك عرض البيانات بطريقة أخرى مكافأة للعبارة Response.Write ! وذلك كالتالي: <%="أهلاً بكم في الموسوعة العربية"%>

لا فرق بين الطريقتين إلا أن الطريقة الثانية تسهل عليك كتابة الأوامر ! جربها !!

~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

الخاصيّة Buffer:

أحد خواص الكائن Response التي سنتعرف عليها هي الخاصية Buffer. قد يكون هذا المصطلح ليس بالجديد عليك !! ومع ذلك سأقوم بشرحه :)

نعم، بالضبط ! Buffer هو ذلك الجزء من ذاكرة الحاسوب الذي يستخدم للتخزين المؤقت، فخادم الويب يستخدم جزء معين من الذاكرة يخزن فيه الأوامر التي تمت معالجتها حتى تنتهي معالجة ملف ASP كاملاً قبل إرسالها إلى المتصفح لدى المستخدم !

هذه الخاصية تأخذ قيمتين، إما True أو False. إذا كانت قيمتها True فهذا يعني أن الخادم يحتفظ بكل أمر بعد معالجته حتى تنتهي معالجة الصفحة بأكملها ومن ثم يرسل ناتج المعالجة إلى للمستخدم !

وأما إذا أخذت القيمة False فإن الخادم يرسل ناتج المعالجة فور انتهاءه من معالجة كل أمر في الصفحة !

المثال التالي يوضح استخدام هذه الخاصية:

<%Response.Buffer=True%>

*إذا لم تعين قيمة لهذه الخاصية فإن القيمة الافتراضية ستكون False.

*يجب استخدام هذه الخاصية في بداية ملف ASP وقبل أوامر HTML! و إلا فإن المستعرض سيعرض خطأ لديك !

كما ذكرت في بداية الدرس بأننا لن نستفيد من خواص الكائنات إلا إذا استخدمنا دوال معينة تحقق نتيجة من استخدام هذه الخواص !!

ولهذا فسنتعرف الآن على بعض الدوال المتعلقة بهذه الخاصية:

الدالة Flush:

تستخدم هذه الدالة لإرسال محتويات المنطقة التخزينية للمتصفح لدى المستخدم ! جميع محتويات المنطقة التخزينية ترسل لمستخدم فور معالجة العبارة Response.Flush.

وكأن هذه الدالة توجه أمراً للمنطقة التخزينية في الخادم وتقول " فضلاً أيتها المنطقة التخزينية، أرسلي جميع الأوامر التي قمتي بمعالجتها حتى الآن للمستخدم ولا تنتظري اكتمال معالجة الصفحة !" ، وبعد معالجة هذه العبارة ستصبح المنطقة التخزينية خالية تماماً حتى تتم معالجة أوامر جديدة تلي هذه العبارة.

المثال التالي يوضح استخدام هذه الدالة:

<%Response.Buffer=True%>
<HTML>

<BODY>

<%

Response.Write("قبل الدخول في عمليات حسابية مطولة فإن الساعة الآن تشير إلى : " & Time)

Response.Flush

Dim x

For x=0 To 10000000

x=x+2

Next

Response.Write("وبعد إجراء عمليات حسابية مطولة فإن الوقت الآن : " & Time)

%>

</BODY>

</HTML>


في المثال السابق استخدمت دالة الوقت Time في لغة VBScript لتوضيح عمل كلاً من الخاصية Buffer والدالة Flush. فالكود السابق يعمل كالتالي :

1- قبل البدء في كتابة أي أوامر في الصفحة، عينت القيمة True للخاصية Buffer رغبةً في الاحتفاظ بناتج المعالجة حتى تتم معالجة الصفحة كاملةً قبل إرسالها للمستخدم.
2- كتبت العبارة Response.Write لتعرض نص بسيط بالإضافة إلى عرض الوقت الحالي.

3- استخدمت العبارة Response.Flush لإرسال جميع مكونات المنطقة التخزينية للمستخدم قبل البدء في معالجة الأوامر التي تلي العبارة.
4- مستخدمةً لأوامر VBScript أجريت عمليات حسابية مطولة.

5- كتبت عبارة Response.Write لعرض نص بسيط بالإضافة إلى الوقت الحالي.
6- بعد انتهاء أوامر ASP فإن الخادم سيرسل المحتويات التي عالجها بعد العبارة Response.Flush للمستخدم .

7- ستلاحظ أن فارق الوقت هو ثانية أو ثانيتين.

*يجب استخدام هذه الدالة فقط إذا أخذت الخاصية Buffer القيمة True، و إلا فإن المستعرض سيعرض خطأ لديك !!
*نستخدم هذه الدالة قبل الدخول في عمليات حسابية مطولة أو قبل استرجاع وتخزين بيانات لقاعدة البيانات، وذلك حتى لا يضطر المستخدم للانتظار فترة طويلة أما صفحة بيضاء !!

*يمكنك وضع هذه العبارة بعد أوامر خاصة لعرض صور إعلانية متحركة مثلاً، لتكون كنوع من تسلية زوار موقعك أثناء معالجة الصفحة التي تطلب كم كبير من المعالجة كما ذكرنا.
الدالة Clear:

لازلنا مع الدوال المستخدمة مع الخاصية Buffer، والآن الدالة الجديدة التي سنتعرف عليها هي الدالة Clear. يشير اسم الدالة إلى عملها !! Clear تعني امسح وهي تستخدم مع الخاصية Buffer !! فما عمل هذه الدالة ؟؟

بالفعل! هذه الدالة تقوم بمسح جميع محتويات المنطقة التخزينية. ففور معالجة الأمر Response.Clear تمسح جميع محتويات المنطقة التخزينية! وكأن هذه الدالة عند معالجتها تقول للخادم " فضلاً أيها الخادم أمسح جميع المحتويات الموجودة في المنطقة التخزينية دون أن ترسلها للمستخدم ! "

مثال يوضح عمل هذه الدالة:

<%Response.Buffer=True%>
<HTML>

<BODY>

<%

Response.Write("هذا النص لن يظهر لديك في المتصفح ")

Response.Clear

Response.Write("هذا النص سيظهر في المتصفح ")

%>

</BODY>

</HTML>


الكود السابق يعمل كالآتي:

1- قبل البدء في كتابة أي أوامر في الصفحة، عينت القيمة True للخاصية Buffer رغبةً في الاحتفاظ بناتج المعالجة حتى تتم معالجة الصفحة كاملةً قبل إرسالها للمستخدم.
2- وضعت عبارة Response.Write لعرض نص في المتصفح.

3- استخدمت العبارة Response.Clear لمسح ناتج معالجة الأوامر السابقة. فأصبحت المنطقة التخزينية في هذه اللحظة خالية من أي أوامر.
4- كتبت أوامر جديدة تمت معالجتها وحفظها في المنطقة التخزينية وهي عبارة عن عرض نص في المتصفح باستخدام العبارة Response.Write

5- بعد الانتهاء من معالجة أوامر ASP جميعاً سيرسل الخادم ناتج المعالجة للمستخدم وسيعرض لديه النص الثاني فقط! حيث أن النص الأول قد تم مسحه بفعل الدالة Clear.
*يجب استخدام هذه الدالة فقط إذا أخذت الخاصية Buffer القيمة True، و إلا فإن المستعرض سيعرض خطأ لديك !!

*تستخدم هذه الدالة إذا لم يتحقق شرط معين ولم تعد بحاجة لعرض المعلومات إذا لم يتحقق ذلك الشرط.
*وتستخدم أيضاً إذا حدث خطأ في معالجة صفحة ASP، فإن هذه الدالة تقوم بمسح جميع المعلومات في المنطقة التخزينية وعرض رسالة خطأ للمستخدم بدلاً منها. غير ذلك من الاستخدامات التي ترغب بها !

الدالة End:

الدالة الأخيرة المستخدمة مع الخاصية Buffer هي الدالة End،استخدام هذه الدالة يؤدي إلى إيقاف معالجة الأوامر! فبمجرد أن يعالج الخادم العبارة Response.End يتوقف عن معالجة الأوامر التي تلي هذه العبارة ويرسل جميع محتويات المنطقة التخزينية للمستخدم.

وكأن هذه الدالة توجه أمراً للخادم بقولها " توقف أيها الخادم عن معالجة المزيد من الأوامر ! و أرسل محتويات المعالجة التي تحتفظ بها في المنطقة التخزينية للمستخدم فوراً !! "

مثال توضيحي:

<%Response.Buffer=True%>
<HTML>

<BODY>

<%

Response.Write("هذا النص سيظهر لديك في المتصفح ")

Response.End

Response.Write("بينما هذا النص لن يظهر في المتصفح ")

%>

</BODY>

</HTML>
*يجب استخدام هذه الدالة فقط إذا عيّنت القيمة True للخاصية Buffer، و إلا فإن المستعرض سيعرض خطأ لديك !!( لا مانع من التجربة!)
*بعد استخدام الدالة End فإن أي أوامر تلي هذه الدالة لن تتم معالجتها سواء كانت أوامر ASP أو HTML.

وبهذا أكون قد انتهيت من الخاصية Buffer وجميع الدوال المتعلقة بها!

الخاصية Expires:

الخاصية Buffer كانت تخص خادم الويب! بينما الخاصية Expires في تخص جهاز المستخدم وبالتحديد متصفح الويب لديه !

فمتصفح الويب لدى المستخدم يستخدم ذاكرة مؤقتة تدعى cache memory للاحتفاظ بصفحات الويب التي يزورها المستخدم. والخاصية Expires تحدد المدة التي سيحتفظ فيها المتصفح بهذه الصفحة ! وتكون هذه المدة بالدقائق.

فإذا طلب المستخدم صفحة الويب فإن المتصفح يبحث في هذه الذاكرة المؤقتة عن الصفحة المطلوبة فإذا وجدها فإنه يتأكد من مدة صلاحية عرض الصفحة من الذاكرة المؤقتة، فإذا لم تنقض هذه المدة فإنه يعرض الصفحة من الذاكرة بدلاً من إعادة معالجتها في خادم الويب ومن ثم إرسالها للمستخدم ! أما إذا انقضت المدة، فإن المتصفح يطلب الصفحة من الخادم لتتم معالجتها من جديد قبل إرسالها.

تستخدم هذه الخاصية كالتالي:

<%Response.Expires=20%>

* يجب استخدام هذه الخاصية في بداية ملف ASP وقبل أوامر HTML! و إلا فإن المستعرض سيعرض خطأ لديك !
* قد تكون هذه الخاصية مفيدة في عرض الصفحة بسرعة إذا استخدمت ولكنها قد تمنع المستخدم من مشاهدة التغييرات الجديدة التي قد تطرأ على الصفحة خصوصاً إذا كانت صفحة الويب تتغير باستمرار !

* إذا لم تكن تريد حفظ الصفحة في الذاكرة المؤقتة قم بتعيين القيمة 0 للدالة Expires.
* إذا لم تضع العبارة Respopnse.Expires في صفحتك فإن المستعرض سوف يطلب الصفحة من خادم الويب في المرة الأولى، ثم يعيد قراءتها من الذاكرة المؤقتة حتى يغلق المستخدم المتصفح .

* عند كتابة أكثر من عبارة Response.Expires وبقيم مختلفة فإن الذاكرة المؤقتة ستحتفظ بالصفحة لمدة مساوية للقيمة الأصغر في عبارات Response.Expires. أي القيمة رقم 5 في هذا المثال :


<%
Response.Expires=15

Response.Expires=20

Response.Expires=5

%>

~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

ماذا لو كنت تريد تخزين الصفحة حتى يوم معين وساعة محددة؟!

الخاصية ExpiresAbsolute:

تستطيع فعل ذلك بالخاصية ExpiresAbsolute التي تحدد اليوم والوقت الذي يجبر فيه خادم الويب المستعرض على الاحتفاظ بالصفحة في ذاكرته المؤقته.وهذا مثال يوضح استخدام هذه الخاصية:

<%
Response.ExpiresAbsolute=#May 16, 2003 16:30:00#

%>

~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

الخاصية IsClientConnected:

ستكون هذه الخاصية هي الأخيرة التي سنتطرق لها في هذا الدرس، تستخدم هذه الخاصية للتأكد من ما إذا المستخدم لازال متصلاً بالخادم أم لا !! وهي تأخذ قيمتين، إما True أو False.

True إذا كان المستخدم ما زال متصلاً بالخادم .. و False إذا كان غير متصل.

مثال لتوضيح عمل هذه الخاصية:

<%Response.Buffer=True%>
<HTML>

<BODY>

<%

If Response.IsClientConnected=True Then

Dim x

For x=0 To 10000000

x=x+2

Next

Response.Write(x)

Else

Response.End

End If

%>

</BODY>

</HTML>
هذا الكود يقوم بالتأكد من ما إذا كان المستخدم متصلاً بالخادم قبل الدخول في عمليات حسابية مطولة، وذلك عن طريق الأمر If في لغة VBScript.. فإذا كان متصلاً فإن الخادم يبدأ بمعالجة الأوامر الأوامر التي تطلب عمليات حسابية مطولة ويعرض النتيجة.. أما لو وجد أن المستخدم غير متصل فإنه يوقف المعالجة حتى لا يهدر الوقت في المعالجة بينما المستخدم غير متصل!

* تفيد هذه الخاصية في الحفاظ على موارد الخادم وعدم إهدارها، خصوصاً حين تتطلب الصفحة كم كبير من المعالجة كاسترجاع أو تخزين بيانات في قاعدة البيانات، أو إجراء عمليات حسابية مقعدة تستغرق وقت طويل.

~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

الخاصية ContentType :

هذه الخاصية تفيد مستعرض الويب في معرفة نوع البيانات التي تحتويها الصفحة لتساعده في عرضها للمستخدم بصورة صحيحة.

هذا المثال يوضح طريقة استخدامها:

%>

Response.ContentType="text/plain"

<%

* يجب كتابة العبارة السابقة في بداية صفحة ASP قبل وسوم HTML.

* لاحظ أنه يجب أن يكتب نوع المحتوى في العبارة Response.ContentType بين علامتي تنصيص

الدالة AddHeader :

هذه الدالة ترسل معلومات للمستعرض عن صفحة ASP التي يطلبها أيضاً !! ولكن ترسلها كرؤوس للصفحة ! ومن أمثلة هذه المعلومات، معلومات عن تاريخ إنشاء صفحة الويب واللغة المستخدمة في هذه الصفحة وعدد أحرف الصفحة و نوع خادم الويب الذي يعالج الصفحة !

تستخد هذه الدالة كالتالي:

%>

Response.AddHeader"Content-********","en"

<%


* يجب كتابة العبارة السابقة في بداية صفحة ASP قبل وسوم HTML.

الدالة Redirect :

الدالة الأخيرة التي سنتعرض لها في هذا الدرس هي الدالة Redirect والتي تحول طلب المستخدم لصفحة ما إلى صفحة أخرى. فمثلاً لو طلب مستخدم صفحة لا يحق له الوصول إليها فإن المستعرض يحوله- بعد التأكد من أحقية وصوله للصفحة - إلى صفحة أخرى!

مثال على استخدام هذه الدالة:

الكود التالي سيتحقق من اسم الشخص فإذا لم يكن الاسم هو نفسه المطلوب فإن الصفحة تقوم بتحويل هذا المستخدم تلقائياً لصفحة أخرى !

<%
Dim name

If name= Ahmed then

Response.Write(" أهلاً بك ")

Else

Response.Redirect"PermissionMsg.asp"

End If

%>

red^eye
30-04-2008, 05:05 PM
[SIZE="3"]الكائن Request

سنتعرف في هذا الدرس بإذن الله على كائن جديد من الكائنات السبعة لـ ASP وهو الكائن Request، في الدرس الماضي تعرفنا على الكائن Response وكانت مسئوليته هي إرسال معلومات من الجهاز الخادم إلى متصفح المستخدم بالإضافة إلى إمكانيته للتحكم بطريقة عرض هذه المعلومات. فماذا عن الكائن الجديد Request؟!

الكائن Request يقوم بعكس ذلك ! فـ Request تعني " طلب " فإذاً مسئولية هذا الكائن هي الوصول للمعلومات التي يرسلها المستخدم لخادم الويب. مثلاً كالمعلومات التي يكتبها المستخدم في نموذج ما.

يعتبر هذا الكائن من أهم الكائنات التي يجب علينا معرفتها! وذلك لأنه يمكنك بواسطته أن تنشئ صفحات ويب ديناميكية ومتغيرة باستمرار وذلك تبعاً للقيم التي يدخلها المستخدم!! كإضافة حقول أو سجلات جديدة لقاعدة البيانات، أو البحث في قاعدة البيانات تبعاً لرغبة المستخدم !

حسناً، قبل البدء في شرح هذا الكائن بالتفصيل، أود أن أجعل صورة العلاقة بين خادم الويب و المتصفح ( تعبير دقيق أعني به جهاز المستخدم ) واضحة بالنسبة لك، وذلك بمثال بسيط جداً :):

أنظر معي لصفحة الويب هذه HTMLForm.htm :

http://up.qatarw.com/u/files/mfbz9fdx0d6zdkwdq9w1.bmp (http://up.qatarw.com/u/)

هذه الصفحة هي صفحة ترحيب بالمستخدم الذي أدخل اسمه في النموذج. هل تعلم ماذا حدث بالضبط؟!! أو بمعنى آخر ما الذي تم بين المستخدم والخادم في هذه العملية ؟!

العلاقة بين الخادم والمتصفح تتم بواسطة أحد برتوكولات حزمة TCP/IP وهو برتوكول HTTP الذي يعمل كالتالي:

* عندما كتب المستخدم عنوان صفحة النموذج في أعلى المتصفح وضغط على المفتاح " إنتر " وجه المتصفح طلباً من الخادم لعرض الصفحة HTMLForm/.

*يستقبل الخادم طلب المستخدم للصفحة HTMLForm/ والذي يستطيع أن يحدد منه نوع الطلب! .. هناك نوعين مشهورة و يطلق عليهما HTTP Request Types :

1- النوع الأول و هو النوع GET، هذا النوع يطلب من الخادم الوصول إلى معلومات بسيطة ملحقة مع عنوان الصفحة! ومن ثم يرسل الخادم استجابة لهذا الطلب للمتصفح لدى المستخدم.

2- أما النوع الثاني فهو النوع POST، هذا النوع يطلب من الخادم الوصول إلى المعلومات الموجودة في النموذج الموجود في الصفحة المطلوبة، ومن ثم يرسل الخادم استجابة لطلب المستخدم.

* بعد أن يستقبل الخادم طلب المستخدم ويحدد نوعه، يرسل الصفحة التي طلبها المستخدم إلى المتصفح لديه لعرضها وفي هذا المثال الصفحة المطلوبة هي: HTMLForm/.

* يستقبل المتصفح الصفحة المرسلة ويعرضها للمستخدم. هذه الصفحة عبارة عن نموذج يملأه المستخدم بالمعلومات المطلوبة وبعد الانتهاء يضغط على الزر "موافق".

* لأن الصفحة المطلوبة عبارة عن نموذج فإن الطريقة التي سيصل بها الخادم إلى المعلومات الموجودة في النموذج هي الطريقة POST. سيحصل الخادم على المعلومة المدخلة في النموذج وهي في هذا المثال عبارة عن " اسم المستخدم" .

* بعد أن يحصل الخادم على المعلومات الموجود في النموذج،تتم معالجة هذه المعلومات في الصفحة التي تستجيب للنموذج في هذا المثال هي الصفحة hello.asp والتي تقوم بعرض رسالة ترحيب تتضمن اسم المستخدم ، ومن ثم ترسل ناتج هذه المعالجة للمتصفح لدى المستخدم.

* سيستقبل المتصفح ناتج معالجة الصفحة hello.asp ليعرض رسالة الترحيب بالمستخدم!

الآن، وحتى هذه اللحظة، فإننا قد عرفنا عمل الكائن Request، وهي للتذكير، الوصول إلى المعلومات التي يدخلها المستخدم!

وعرفنا أيضاً بأن هناك طريقتين لإرسال المعلومات إلى الصفحة التي ستعالجها، وهي إما أن تكون المعلومات المدخلة ملحقة في عنوان الصفحة ( لا تقلق سنتعرف عليه بالتفصيل بعد قليل) و هذه هي الطريقة GET! ويتم الوصول لهذه المعلومات من عنوان الصفحة.

أو أن ترسل المعلومات المدخلة منفصلة عن عنوان الصفحة التي ستعالج هذه المعلومات، كما وضحّنا في المثال السابق، و هي تسمى بالطريقة POST. ويتم الوصول إلى هذه المعلومات من النموذج مباشرة.

ملاحظة!

* يتم تحديد طريقة إرسال المعلومات المدخلة من قبل المستخدم، في نفس الصفحة التي تطلب من المستخدم إدخال المعلومات بها.(صفحة النموذج )

* طريقة إرسال المعلومات تحدد طريقة الوصول إليها من قبل الخادم!

.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^

السؤال الآن هو، كيف أستفيد من الكائن Request للوصول إلى المعلومات المدخلة باستخدام كلاً من الطريقتين السابقتين ؟!!

حسناً، تابع معي لنبدأ بالطريقة الأولى GET!!

Request.QueryString:

باستخدام عبارة Request.QueryString فإنك ستتمكن من جعل الخادم يصل للمعلومات المرسلة بواسطة الطريقة GET! حيث أن هذه المعلومات تكون ملحقة بعنوان صفحة ASP التي ستعالجها، فكيف نقوم بذلك؟!

لننشئ نموذج يطلب من المستخدم إدخال اسمه ، كما تعلمنا في دروس سابقة:

صفحة النموذج ستحتوي على الكود التالي:

<HTML>
<BODY>
<CENTER>
<FORM ACTION="UserInfo.asp" METHOD="GET">
<B>اسم المستخدم<BR><BR> <INPUT TYPE="text" NAME="Fname"><BR><BR></B>
<INPUT TYPE="submit" NAME="submit" VALUE=" موافق">
</FORM>
</CENTER>
</BODY>
</HTML>


لاحظ أننا قد حددنا طريقة إرسال المعلومات التي سيدخلها المستخدم في النموذج وهي الطريقة GET. وقد حددنا صفحة ASP التي ستصل للمعلومات المدخلة وتعالجها وهي الصفحة UserInfo.asp.

احفظ الصفحة بالاسم HTMLForm.htm .. والتي ستبدو كما في الشكل التالي:

http://up.qatarw.com/u/files/dqwp2skiwtai2rqwk1px.bmp (http://up.qatarw.com/u/)


والآن تبقى لدينا كتابة كود ASP للصفحة التي ستصل لمعلومات النموذج وهي الصفحة UserInfo.asp

بما أن الطريقة المستخدمة في النموذج هي GET، فإننا سنستخدم العبارة Request.QueryString حتى نصل للمعلومات المدخلة في النموذج.

سيكون كود ASP كالتالي:

<%
Dim Name
Name=Request.QueryString("Fname")
Response.Write(" <CENTER><B>الاسم الذي أدخلته هو <BR>" & Name & "</B></CENTER>")
%>

فقط ؟!!! .. نعم ! كل المطلوب كتابته للوصول لمعلومات النموذج المرسلة بواسطة الطريقة GET هو هذا الكود فقط ! ثم احفظ الصفحة بالاسم UserInfo.asp وستظهر النتيجة كالتالي

http://up.qatarw.com/u/files/yg9zivt7eard597u1guf.bmp (http://up.qatarw.com/u/)

لاحظ !!

لاحظ عنوان الصفحة UserInfo.asp !! ستجد بعد عنوان الصفحة علامة الاستفهام يليها اسم مربع النص في النموذج ثم علامة المساواة ثم القيمة المدخلة في مربع النص هذا! .. بمجرد أن ترى ذلك في عنوان الصفحة ستعلم أن الطريقة المستخدمة لإرسال معلومات النموذج للصفحة التي ستعالجها هي الطريقة GET وذلك لأن معلومات النموذج ملحقة بعنوان الصفحة!!

كيف يعمل هذا الكود؟!

* في البداية كتبنا أمر VBScript للإعلان عن المتغير Name

* ثم عيّنا قيمة لهذا المتغير وهي المضللة باللون الأخضر

حيث أن name هي اسم مربع النص الذي يحتوي على المعلومة المدخلة بواسطة المستخدم في النموذج. هذه العبارة تجعل الخادم يصل للقيمة التي أدخلها المستخدم في مربع النص Fname الموجود في النموذج من عنوان الصفحة وليس من النموذج مباشرة!

* كتبنا عبارة Response.Write التي تتضمن نص لعرضه في المتصفح بالإضافة إلى المتغير Name.
قد تكون حتى الآن مصّراً على أن الخادم وصل للمعلومة التي أدخلها المستخدم في النموذج من النموذج مباشرة وليس من عنوان الصفحة UserInfo.asp! هل هذا صحيح؟!!

حسناً، إليك مثال آخر سيقنعك إن شاء الله:

في هذا المثال لن ننشئ نموذج ولكن سننشئ الصفحة UserInfo.asp وسيكون الكود هو نفسه الكود السابق لهذه الصفحة.

<%
Dim Name
Name=Request.QueryString("Fname")
Response.Write(" <CENTER><B>الاسم الذي أدخلته هو <BR>" & Name & "</B></CENTER>")
%>

والآن افتح هذه الصفحة UserInfo.asp في متصفحك ستكون كالتالي عند فتحها :

http://up.qatarw.com/u/files/s7ak7ufdn8mrwbj0exhy.bmp (http://up.qatarw.com/u/)

أكتب بعد عنوان هذه الصفحة الظاهر في المتصفح العبارة التالية :

?Fname=Nora

كما في الشكل التالي:

http://up.qatarw.com/u/files/wuty0ser4vmn0tfxohx0.bmp (http://up.qatarw.com/u/)

ثم اضغط على المفتاح " إنتر" بعد تضليل العنوان لتحصل على التالي:

http://up.qatarw.com/u/files/239zeyhqcg9lol0l5izf.bmp (http://up.qatarw.com/u/)

والآن قد أتضح الأمر بالنسبة لك! فنحن هنا لم نستخدم النموذج ومع ذلك استطعنا أن نصل للقيمة التي أدخلناها في العنوان، فهذا يدل على أن العبارة Request.QueryString تمكن الخادم من الوصول للقيمة المحددة من عنوان الصفحة وليس من النموذج مباشرة.

وكل ما حدث عندما استخدمنا النموذج لإدخال المعلومات هو أن الطريقة GET التي استخدمناها في ذلك النموذج تقوم بإلحاق المعلومات المدخلة بعنوان الصفحة. ومن ثم يأتي دور العبارة Request.queryString للوصول إلى هذه المعلومة من العنوان!

.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^

* يتيح لك الحرف & أن تدخل أكثر من متغير وأكثر من قيمة في العنوان كالتالي:

?Fname=Nora&Lname=Ahmed

* هذه المعلومات التي تضيفها للعنوان تسمى بالاستعلام.

* بإمكانك عرض الاستعلام الملحق بالعنوان كاملاً في صفحتك وذلك بالعبارة التالية فقط:

<%=Request.QueryString%>

وستبدو النتيجة كالتالي:

http://up.qatarw.com/u/files/epk7v5aczak2u8qbmhmz.bmp (http://up.qatarw.com/u/)

* لو أخذنا صورة أخرى للنماذج وهي عبارة عن نموذج يحتوي على مربع اختيار، وليكن اختيار الدولة المفضلة لدى الشخص مثلاً، سنكتب صفحة HTML للنموذج كالتالي:

<HTML>
<BODY>
<CENTER>
<B>حدد دول الخليج العربي التي قمت بزيارتها من قبل</B><BR>
<FORM ACTION="Country.asp" METHOD="GET">
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="17%" id="AutoNumber1">
<tr>
<td width="3%">
<INPUT TYPE="Checkbox" NAME="country" VALUE="المملكة العربية السعودية" CHECKED></td>
<td width="97%">المملكة العربية السعودية</td>
</tr>
<tr>
<td width="3%"><INPUT TYPE="Checkbox" NAME="country" VALUE=" البحرين" ></td>
<td width="97%">البحرين</td>
</tr>
<tr>
<td width="3%"><INPUT TYPE="Checkbox" NAME="country" VALUE=" الكويت" ></td>
<td width="97%">الكويت</td>
</tr>
<tr>
<td width="3%"><INPUT TYPE="Checkbox" NAME="country" VALUE=" قطر" ></td>
<td width="97%">قطر</td>
</tr>
<tr>
<td width="3%">
<INPUT TYPE="Checkbox" NAME="country" VALUE="الأمارات العربية المتحدة" ></td>
<td width="97%"><span lang="ar-sa">ا</span>لأمارات العربية المتحدة</td>
</tr>
<tr>
<td width="3%"><INPUT TYPE="Checkbox" NAME="country" VALUE=" عمان" ></td>
<td width="97%">عمان</td>
</tr>
<tr>
<td width="3%"><INPUT TYPE="Checkbox" NAME="country" VALUE=" اليمن" ></td>
<td width="97%">اليمن</td>
</tr>
</table>
<p>
<INPUT TYPE="submit" NAME="submit" VALUE=" موافق"><B><BR><BR></B>
</FORM>
</CENTER>
</BODY>
</HTML>

حفظ الصفحة بالاسم countryForm.htm والتي ستبدو كما في الصورة:

http://up.qatarw.com/u/files/8zu713d6dfp9jyoctqvo.bmp (http://up.qatarw.com/u/)

سنكتب صفحة ASP التي تعالج القيم التي يختارها المستخدم من النموذج ولتكن الصفحة بالاسم : country.asp كالتالي:

<%
Dim IndexNumber
IndexNumber=Request.QueryString("country")
Response.Write("<CENTER><B>مربع الخيار التي تم تحديدها في النموذج يشير إلى الدول التالية: " & IndexNumber & "</B></CENTER>")
%>

ستظهر النتيجة كالتالي:

http://up.qatarw.com/u/files/5tfyzft8fqcpqhscxc5h.bmp (http://up.qatarw.com/u/)

ماذا لو أردت أن تظهر قيمة مربع خيار معين حسب تسلسل اختياره من قبل المستخدم فقط دون إظهار بقية المربعات المختارة الأخرى ؟!

فمثلاً في النموذج السابق تم اختيار المملكة العربية السعودية، البحرين، الكويت والأمارات العربية المتحدة والنتيجة قامت بعرض هذه الدول، أما الآن فأنا أريدها أن تعرض لي قيمة رابع مربع قمت باختياره فقط( وهو في المثال دولة الأمارات العربية المتحدة) دون أن تعرض قيمة بقية المربعات التي اخترتها !

ستلاحظ في النموذج بأن السمة NAME لكل مربع خيار في النموذج لها نفس القيمة وهي country. ولذا فإننا سنحتاج لرقم فهرس يحدد لي رقم كل مربع أقوم باختياره بترتيب متسلسل ففي مثالي السابق كانت أرقام الفهرس للمربعات التي اخترتها كالتالي:

المملكة العربية السعودية 1

البحرين 2

الكويت 3

الأمارات العربية المتحدة 4

وهكذا حسب اختياري للمربعات

إذاً كل ما احتاجه لعرض رابع مربع قمت باختياره هو تحديد الرقم 4 كرقم للفهرس، فقط قم بتغيير بسيط في الكود السابق كالتالي:

<%
Dim IndexNumber
IndexNumber=Request.QueryString("country")(4)
Response.Write("<CENTER><B>مربع الخيار الرابع الذي تم تحديده في النموذج هو: " & IndexNumber & "</B></CENTER>")
%>

ستكون النتيجة مشابهه للصورة التالية:

http://up.qatarw.com/u/files/atuc8qj7b7omcf871ca7.bmp (http://up.qatarw.com/u/)

باستطاعة الكائن Request الحصول على عدد المتغيرات في الاستعلام، فمثلاً لو أخذنا النموذج الذي يطلب اسم المستخدم الذي أنشأناه قبل قليل:

<HTML>
<BODY>
<CENTER>
<FORM ACTION="QueryNO.asp" METHOD="GET">
<B>اسم المستخدم<BR><BR> <INPUT TYPE="text" NAME="Fname"><BR><BR></B>
<INPUT TYPE="submit" NAME="submit" VALUE=" موافق">
</FORM>
</CENTER>
</BODY>
</HTML>


لعد المتغيرات الموجودة في الاستعلام فإننا سنقوم بعمل صفحة ASP ولتكن QueryNO.asp وتحتوي على الكود التالي:

<%
Dim QueryNumber
QueryNumber=Request.QueryString.Count
Response.Write("<BR><CENTER><B>عدد المتغيرات في الاستعلام المرسل إلى الصفحة هي : " & QueryNumber & "</B></CENTER>")
%>

فالعبارة Request.QueryString.Count في الكود السابق تقوم بعد المتغيرات الموجودة في الاستعلام.

بعد تعبئة النموذج بالبيانات المطلوبة و الضغط على الزر موافق سأحصل على صفحة QueryNO.asp كالتالي:

http://up.qatarw.com/u/files/ybm77tqdlw9ln5n9cf6i.bmp (http://up.qatarw.com/u/)

النتيجة هي متغيرين ! متغير عبارة عن اسم المستخدم ، والمتغير الثاني هو زر الإرسال " موافق "..

.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^

Request.Form

العبارة Request.Form تمكّن الخادم من الوصول للمعلومات المرسلة بواسطة الطريقة POST. و هذه الطريقة هي عكس الطريقة GET حيث أنها تقوم بإرسال المعلومات المدخلة للنموذج بشكل منفصل عن عنوان الصفحة التي ستعالج هذه المعلومات !!

وبما أن المعلومات المدخلة سترسل منفصلة عن العنوان، فإننا نستطيع أن نقول أن العبارة Request.Form تمكّن الخادم من الوصول للقيمة التي أدخلها المستخدم للنموذج من النموذج مباشرة !! وبطبيعة الحال فإن القيم المدخلة لن تكون ملحقة بعنوان الصفحة التي ستعالج هذه القيم، وهذا ما يساعدنا على التمييز بين الطريقتين GET و POST كما سنرى بعد قليل.

كل ما نحتاجه لفهم الموضوع بشكل عملي هو إنشاء نموذج نستخدم فيه الطريقة POST وليكن اسمه POSTForm.htm كالنموذج التالي:

<HTML>
<BODY>
<CENTER>
<FORM ACTION="UserComment.asp" METHOD="POST">
<B>الاسم<BR><BR> <INPUT TYPE="text" NAME="name"><BR><BR></B>
<B>البريد الإلكتروني<BR><BR><INPUT TYPE="text" NAME="Email"><BR><BR></B>
<B>أكتب ملاحظاتك على الموقع<BR><BR><TEXTAREA NAME="UserComments"></TEXTAREA><BR><BR></B>
<INPUT TYPE="submit" NAME="submit" VALUE=" موافق">
</FORM>
</CENTER>
</BODY>
</HTML>

هذا النموذج يتطلب إدخال الاسم والبريد الإلكتروني والملاحظات على الموقع، سيبدو كما في الصورة التالية :

http://up.qatarw.com/u/files/s0we9ydyrvsaulwf1y8w.bmp (http://up.qatarw.com/u/)

نحتاج أيضاً لإنشاء صفحة ASP التي نستطيع بواسطتها الوصول للمعلومات المدخلة في النموذج. هذه الصفحة سنسميها UserComment.asp سنضع بها الكود التالي :

<%
Dim UserName
Dim UserEmail
Dim UserComment

UserName=Request.Form("name")
UserEmail=Request.Form("Email")
UserComment=Request.Form("UserComments")

Response.Write("<CENTER><B>المستخدم " & UserName & "، لقد أضفت الملاحظات التالية : <BR>" & UserComment &"<BR>فشكراً لك </B></CENTER>")
%>

صفحة ASP هذه تقوم بالوصول إلى المعلومات التي أدخلها المستخدم في النموذج، وحيث أن طريقة الإرسال المستخدمة في النموذج هي الطريقة POST، فالوصول لهذه المعلومات المدخلة سيكون من نفس النموذج بواسطة العبارة Request.Form الموضحة في الأسطر الثلاث المضللة:

حيث أن المتغير name و Email و UserComments هي عبارة عن أسماء مربع النص الذي حددناه في النموذج السابق.

بمجرد تعبئة النموذج السابق والضغط على الزر موافق سينتقل بي المتصفح للصفحة UserComment.asp والتي ستبدو كما في الصورة :

http://up.qatarw.com/u/files/hpqxjjjowongncnh55e1.bmp (http://up.qatarw.com/u/)

لاحظ أن عنوان الصفحة UserComment.asp لا يحتوي على استعلام!
* إذا أردت أن تعرض جميع متغيرات وقيم النموذج المدخلة بواسطة المستخدم فيمكنك ذلك بواسطة الجملة التالية فقط ! :

<%=Request.Form%>

* إذا كان النموذج عبارة عن مربع خيارات فنستطيع أن نحدد قيمة أحد الخيارات التي اختارها المستخدم تبعاً لرقم الفهرس كما فعلنا مع العبارة Request.QueryString تماماً :

<%
Dim IndexNO
IndexNO=Request.Form("Country")(3)

%>

* وأيضاً يمكننا الحصول على عدد المتغيرات الموجودة في النموذج بواسطة العبارة التالية :

<%
Dim FormVar

FormVar=Request.Form.Count

%>

*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*

قبل أن ننهي هذا الدرس البسيط، سأذكر إحدى مكونات الكائن Request وهو ServerVariables !

ServerVariables:

ستستفيد من العبارة Request.ServerVariables في الحصول على قائمة بجميع متغيرات الخادم !!! كاسم الخادم، وعنوان IP الخادم، و نوع برنامج الخادم الذي يستخدمه بالإضافة إلى رقم IP العميل ونوع المتصفح لديه أيضاً !!

تستطيع القيام بذلك كالتالي:

<HTML>
<BODY>
<CENTER>
<B> هذه قائمة بجميع متغيرات الخادم :<BR>
<%
For Each Var in Request.ServerVariables
Response.Write(Var & "<BR>")
Next
%>
</B>
</CENTER>
</BODY>
</HTML>


هذا الكود يعوم بعرض جميع متغيرات الخادم باستخدام تكرار For Each ....Next في الـ VBScript للوصول إلى كل بند في مصفوفة متغيرات الخادم !

وأيضاً باستخدام العبارة Request.ServerVariabls للحصول على هذه القائمة !

احفظ الصفحة بالاسم serverVariable.asp وافتحها في المتصفح لديك لتعطيك نتيجة مشابهه لهذه :

http://up.qatarw.com/u/files/jvwiyjactrr8e2rzo9fr.bmp (http://up.qatarw.com/u/)

هذه قائمة بالمتغيرات، فماذا لو أردت قيمة أحد هذه المتغيرات؟!!!

سنأخذ أحد هذه المتغيرات لنحصل على قيمته بواسطة كود ASP بسيط يؤدي الغرض :) .. سنختار على سبيل المثال المتغير SERVER_NAME

نستطيع الحصول على قيمة هذا المتغير كالتالي:

<%
Dim ServerVal
ServerVal=Request.ServerVariables("SERVER_NAME")
Response.Write(" <CENTER>SERVER_NAME = " & ServerVal & "</CENTER>")
%>

كل ما فعلناه هنا هو أني حددت اسم المتغير في العبارة Request.ServerVariables ووضعت هذه العبارة في المتغير ServerVal ثم قمت بطباعة هذا المتغير بواسطة العبارة Response.Write!

سنحفظ الصفحة السابقة بالاسم serverValue.asp مثلاً، وستكون النتيجة :

http://up.qatarw.com/u/files/iq3r29xb7hdyufperxw8.bmp (http://up.qatarw.com/u/)

بإمكانك تجربة هذا الكود للحصول على قيم المتغيرات الأخرى بنفس الطريقة ;)

*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*

وبهذا أستطيع أن أقول أننا تعرفنا على أهم مكونات الكائن Request وهي QueryString، Form، و أخيراً ServerVariables!

سأضع حصرا لمكونات الكائن Request و خواصه ودواله:

الخواص TotalBytes
الدوال BinaryRead
المجموعات ClientCertificate ******s ServerVariables QueryString Form

أرجوا ان تكونو قد استفدتم من هذا الدرس البسيط...

لا تنسونا من صالح دعائكم...

وإلى اللقاء في درس جديد;)

مع تحيات أختكم Red^Eye Hacker


[/SIZE

المستشار
30-04-2008, 06:54 PM
رائع رائع جميل Red^Eye

شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

موفق^_^

SnIpEr_SyRiA
05-07-2008, 12:19 PM
موضوع رائع ويستاهل التثبيت

السينتور
06-08-2008, 02:02 AM
http://img174.imageshack.us/img174/7601/24pv4.gif
http://img252.imageshack.us/img252/1954/57ld7.jpg