• مشکی
  • سفید
  • سبز
  • آبی
  • قرمز
  • نارنجی
  • بنفش
  • طلایی
انجمن ها > انجمن کامپیوتر > صفحه اول بحث
لطفا در سایت شناسائی شوید!
کامپیوتر (بازدید: 8871)
يکشنبه 9/3/1389 - 22:31 -0 تشکر 202954
برنامه نویسى و برنامه سازى

این تاپیك رو اصلاح مى كنم تا هر دوستى سوالى و یا مطلبى در مورد برنامه سازى با زبانهاى مختلف داشته باشد در این جا ثبت كند

چهارشنبه 12/3/1389 - 10:55 - 0 تشکر 203496

ایجاد یك سیستم كلمه عبور ساده – قسمت ۱

ایجا یك سیستم Login برای ورود اعضاء یك سایت

امروزه اغلب سایتهایی را كه مشاهده می كنید معمولا دارای یك سیستم Login هستند كه بوسیله یك شناسه كاربری (UserID) و یك كلمه عبور (Password)، قادر به تشخیص افراد خاصی از میان تمام مراجعه كنندگان به سایت هستند.

یك نمونه بارز آن صفحه SignIn سایت معروف Yahoo! برای ورود به پست الكترونیك كاربران است كه یاهو پس از بررسی وجود شناسه كاربری و صحت كلمه عبور وارد شده، به كاربران اجازه ورود به صندوق پستی خود را می دهد.

در این مقاله سعی شده است با ساخت یك برنامه ساده Login توضیحاتی درباره ساختار و نحوه كار آنها بیان نماییم :

قبل از هر چیز ما نیاز به ساختن یك بانك اطلاعاتی برای ذخیره كردن اطلاعات كاربران سایت داریم. این بانك اطلاعاتی می تواند بوسیله برنامه های مختلفی از جمله Access ساخته شود. بانك اطلاعاتی مورد نیاز برای این برنامه شامل یك جدول بنام Members و دو ستون به نامهای UserID وPassword برای ذخیره اطلاعات كاربران است.

همچنین دستور SQL برای ساختن این جدول در صفحات ASP بصورت زیر است:

Create Table Members (
UserID(20)
Password(15)
)

پس از ساختن این بانك اطلاعاتی نیاز به ساخت یك فرم ساده برای دریافت اطلاعات كاربران داریم كه آنرا در داخل صفحه ای بنام Login.htm می سازیم.

این صفحه به سادگی و بوسیله دستورات مقدماتی HTML قابل تهیه است.


Login












Login Members



            UserID : 



        Password : 







در كد بالا چند نكته قابل توجه وجود دارد :

Form method=Post: نحوه ارسال اطلاعات فرم را مشخص می كند. بدین صورت كه اگر ما بخواهیم اطلاعات دریافتی از یك كاربر را به صفحه دیگری برای پردازش ارسال كنیم، باید از این متد، یعنی متد Post استفاده كنیم. اطلاعاتی كه بوسیله متد Post ارسال می شوند، در صفحه بعدی بوسیله شئ Request و بصورت زیر قابل بازیابی هستند.

Request.Form("fieldname")

Action=Login_Action.asp: مقداری كه در مقابل ویژگی Action در دستور Form قرار گرفته، نام فایلی است كه اطلاعات فرم پس از دریافت از كاربر، به آن صفحه ارسال می شود.

ویژگی Name در دستور Input: نام متغیری است كه كلمه ورودی كاربر در فیلد جاری در آن ذخیره می شود. هر كلمه ای كه كاربر در یك فیلد وارد می كند در صفحه مقصد بوسیله نامی كه برای آن فیلد تعیین شده قابل دسترسی است.

پس از ساخت بانك اطلاعاتی و یك فرم ساده برای دریافت اطلاعات كاربران، نوبت به ساخت صفحه ای برای پردازش و پاسخ متقابل به اطلاعات ورودی كاربران است. این صفحه را با نام Login_Action.asp می سازیم.

<%@Language="VBScript"%>
<%
User = Request.Form("UserID")
Pass = Request.Form("Password")
Set AdoCon = Server.CreateObject("ADODB.Connection")
StrCon = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("Users.mdb")
AdoCon.Open StrCon
Set AdoRec = Server.CreateObject("ADODB.Recordset")
StrSQL = "SELECT * FROM Members WHERE UserID ="" & User & """
AdoRec.Open StrSQL, StrCon
IF NOT AdoRec.EOF Then
    IF Pass = Trim(AdoRec("Password")) Then
        Response.Write ("Welcome " & User)
    Else
        Response.Write ("Invalid Password")
    End IF
Else
    Response.Write ("Invalid UserID")
End IF
Set AdoCon = Nothing
Set StrCon = Nothing
Set AdoRec = Nothing
%>

چهارشنبه 12/3/1389 - 10:56 - 0 تشکر 203497

ایجاد یك سیستم كلمه عبور ساده – قسمت ۲

ایجاد یك سیستم Login برای ورود اعضاء یك سایت

اطلاعات ورودی كاربر در صفحه Login.htm پس از فشردن دكمه Login به صفحه Login_Action.asp ارسال می شوند.

ابتدا ما باید اطلاعات فرم را از صفحه اصلی، داخل صفحه جاری بازیابی كنیم این كار بوسیله شئ Request انجام پذیر است. پس از بازیابی اطلاعات، آنها را درون دو متغیر به نام های User و Pass برای استفاده های بعدی ذخیره می كنیم. سپس بوسیله شئ Connection با بانك اطلاعاتی ارتباط برقرار می كنیم. متد Open از شئ Connection آغاز ارتباط با بانك اطلاعاتی است. همیشه برای هرگونه دستیابی به بانك اطلاعاتی باید بوسیله این متد، ارتباط را با بانك اطلاعاتی را باز كنیم.

پس از شروع ارتباط با بانك اطلاعاتی حال ما نیاز به یك پرس و جو از بانك اطلاعاتی داریم. این كار بوسیله شئ RecordSet انجام پذیر است. سپس بوسیله متد Open از شئ RecordSet پرس و جو از بانك اطلاعاتی را آغاز می كنیم.

همانطور كه در كد موجود در قسمت اول این مقاله مشاهده می كنید دستور AdoRec.Open شامل دو مقدار است.

StrSQL : نام متغیری است كه حاوی دستور SQL برای پرس و جو از بانك اطلاعاتی است.
StrCon : مشخص كننده درایور و محل دقیق فایل بانك اطلاعاتی ماست (لازم به ذكر است كه ما دراینجا از یك ارتباط Dsn_Less استفاده كردیم).

ساختار اصلی هر برنامه Login معمولا بصورت زیر است :

در برنامه Login ما ابتدا باید شناسه كاربری یك فرد را كه در داخل فرم وارد كرده است، دریافت كرده و همانند آنرا داخل بانك اطلاعاتی كاربران بیابیم. در صورت وجود شناسه كاربری، كلمه عبور مربوط به آن كاربر را از بانك اطلاعاتی بازیابی می كنیم. سپس كلمه عبوری را كه كاربر در داخل فرم تایپ كرده با كلمه عبوری كه از بانك اطلاعاتی بازیابی كرده ایم مقایسه می كنیم در صورت صحیح بودن كلمه عبور، عملیات Login موفقیت آمیز خواهد بود. در غیر اینصورت پیغام های خطایی مطابق با خطاهایی كه پیش آمده به نمایش در خواهد آمد.

در دستورات شرطی داخل كد بالا چند نكته وجود دارد كه بترتیب به بررسی آنها می پردازیم :

در اولین دستور شرطی متد EOF از شئ RecordSet به معنی پایان یك بانك اطلاعاتی است (همچنین متد BOF نمایانگر ابتدای یك بانك اطلاعاتی است) و واژه NOT هم، شرط جاری را منفی می كند. پس در شرط اول ما بیان كردیم كه اگر طبق دستور SQL پرس و جو در بانك اطلاعاتی به پایان بانك نرسیده باشد یعنی قبلا از رسیدن به پایان بانك اطلاعاتی، شئ RecordSet یك سطر از بانك اطلاعاتی را مطابق نظر ما یافته باشد(شناسه كاربری وارد شده در فرم معتبر باشد)، شرط بعدی اجرا خواهد شد.

در صورتیكه این شرط برقرار نباشد مرورگر پیغام خطایی مبنی بر اینكه شناسه كاربری وارد شده صحیح نمی باشد را نمایش می دهد. بدین معنی كه شناسه كاربری وارد شده در داخل فرم، در بانك اطلاعاتی یافت نشده است.

اما اگر این شرط برقرار باشد، شرط دیگری برای بررسی كلمه عبور، بیان می كنیم.

متغیر Pass حاوی كلمه عبور وارد شده توسط كاربر، در داخل فرم است و دستور AdoRec(Password) حاوی كلمه عبور اصلی است كه از بانك اطلاعاتی بازیابی شده است. (كلمه Password در دستور فوق، نام ستون مورد نظر در بانك اطلاعاتی است)

واژه Trim قبل از دستور AdoRec(Password) تمام فاصله های خالی قبل و بعد از كلمه عبور داخل بانك اطلاعاتی را حذف می كند و فقط كلمه عبور را بازیابی می كند.

مثلا اگر در هنگام ساختن بانك اطلاعاتی خود، ستون Password را با حد اكثر 15 كاراكتر ساخته باشید و كلمه Test را به عنوان كلمه عبور خود قرارداده باشیم، هنگام بازیابی این كلمه از بانك اطلاعاتی ما یك رشته با طول 15 كاراكتر داریم كه 11 كاراكتر آخر آن خالی است. بوسیله واژه Trim می توان این فواصل خالی را حذف كرد.

حال در صورت برقراری این شرط یعنی اگر كلمه عبور وارد شده كاربر با كلمه عبور داخل بانك اطلاعاتی مطابقت كند، یك پیغام خوش آمد گویی حاوی نام كاربر روی نمایشگر ظاهر خواهد شد. اما اگر این شرط برقرار نباشد یعنی شناسه كاربری معتبر باشد اما كلمه عبور درست نباشد پیغام خطایی مبنی بر اینكه كلمه عبور صحیح نیست روی صفحه نمایشگر پدید می آید.

در آخر نیز باید توجه داشته باشید كه تمام اشیایی كه داخل كد بالا استفاده كرده اید را خالی كنید و تمام آنها را برابر با Nothing قرار دهید.

در پایان نیز بجاست كه مطالب اندكی راجع به حفاظت اطلاعات در صفحات سایت بیان نماییم.

شما باید همیشه بخاطر داشته باشید كه ارسال اطلاعات در داخل این شبكه عظیم، هیچگاه امن و خالی از خطر نیست. خطراتی از قبیل دسترسی هكرها به اطلاعات شخصی شما و یا گم شدن اطلاعات شخصی در داخل شبكه هنگام ارسال آنها به مقصد و... همیشه اطلاعات شما را تهدید می كنند.

چون این اطلاعات ارسالی در بین راه از موانع زیاد و از داخل شبكه های بسیاری تا رسیدن به مقصد عبور می كند و این راه در داخل این شبكه ها هیچگاه كاملا امن نیست.

داده های ارسالی شما حتی پس از رسیدن به مقصد هم ممكن است با خطرات زیادی مواجه باشند. شاید شنیده باشید كه هر روز سایتهای مختلفی بدلیل هك شدن از كار می افتند و اطلاعات آنها به سرقت می روند.

شما باید در درجه اول به عنوان یك كاربر اینترنت، مراقب وارد كردن اطلاعات محرمانه خود روی سایتهای مختلف باشید و اطلاعات شخصی خود را روی هر سایتی وارد نكنید.

اما شما به عنوان یك طراح و برنامه نویس وب، می توانید راهكارهای مفید و مختلفی برای كاهش این خطرات در سایت، بیاندیشید.

EnCode كردن (كد كردن) داده ها و سپس DeCode كردن آنها در مواقع لزوم می تواند راه حل مناسبی باشد. همچنین ساختن یك نسخه پشتیبان از اطلاعات روی سرور هم می تواند در برخی از مواقع مفید واقع شود.

اما با تمام این اعمال خطر كاملا رفع نخواهد شد و همیشه خطراتی اطلاعات شخصی كاربران شما را تهدید می كند اما با این حال شما باید همواره به كاربران اطمینان بدهید كه از اطلاعات آنها محافظت می كنید.

چهارشنبه 12/3/1389 - 10:59 - 0 تشکر 203498

اجرای ASP روی كامپیوتر خودتان

شما میتوانید ASP را روی كامپیوتر خود و بدون احتیاج به یك سرور بیرونی نیز اجرا كنید. برای این منظور شما باید یكی از برنامه های PWS یا IIS را روی كامپیوتر خود نصب كنید.
اگر شما در مورد استفاده از ASP چندان هم جدی نباشید، حداقل باید ویندوز98 نسخه دوم را داشته باشید.
اما اگر واقعاً در مورد استفاده از ASP جدی هستید و میخواهید به صورت حرفه ای از آن استفاده كنید، باید از ویندوز 2000 یا ویندوزهای جدیدتر استفاده كنید.

چگونگی نصب PWS و اجرای ASP روی ویندوز 95
برنامه PWS (Personal Web Server) همراه ویندوز 95 ارائه نشده است.
برای اجرای ASP روی ویندوز95 شما می توانید به این آدرس بروید.
و Windows NT 4.0 Option Pack را از مایكروسافت دریافت كنید.

چگونگی نصب PWS و اجرای ASP روی ویندوز NT
برنامه PWS همراه ویندوز NT نیز ارائه نشده است.
برای اجرای ASP روی ویندوزNT شما می توانید به این آدرس بروید.
و Windows NT 4.0 Option Pack را از مایكروسافت دریافت كنید.

چگونگی نصب PWS و اجرای ASP روی ویندوز 98
۱- فلدر Add-ons را از روی cd ویندوز98 بازكنید و سپس فلدر pws راپیداكنید و setup.exe را اجرا كنید.
۲- یك فلدر به اسم Inetpub در هارد درایو شما ایجاد شده، آن را باز كنید و فلدر wwwroot را پیدا كنید.
۳- یك فلدر جدید مثلMyWeb در wwwroot ایجاد كنید.
۴- فایل ASP خود را مانند test1.asp در MyWeb كپی كنید.
۵- مطمئن بشوید كه وب سرور شما در حال اجرا است.(البته به صورت معمول خود در این حالت قرار دارد)
۶- جستجوگر خود را باز كرده و آدرس http://localhost/MyWeb/test1.asp را وارد كنید تا اولین صفحه ASP خود را ببینید.

چگونگی نصب IIS و اجرای ASP روی ویندوز 2000
۱- از دگمه Start به Settings و بعد به Control Panel بروید.
۲- در پنجره Control Panel ، Add/Remove Programs را انتخاب كنید.
۳-در پنجره Add/Remove Programs گزینه Add/Remove Windows Components را انتخاب كنید.
۴- در پنجره Wizard ، Internet Information Services را انتخاب كرده و روی OK كلیك كنید.
۵- یك فلدر به اسم Inetpub در هارد درایو شما ایجاد خواهد شد.
۶- Inetpub را باز كنید و فلدر wwwroot را پیدا كنید.
۷- یك فلدر جدید مثلMyWeb در wwwroot ایجاد كنید.
۸- - فایل ASP خود را مانند test1.asp در MyWeb كپی كنید.
۹- مطمئن بشوید كه وب سرور شما در حال اجرا است.(البته به صورت معمول خود در این حالت قرار دارد)
۱۰- جستجوگر خود را باز كرده و آدرس http://localhost/MyWeb/test1.asp را وارد كنید تا اولین صفحه ASP خود را ببینید.

چگونگی نصب IIS و اجرای ASP روی Windows XP Professional 
توجه: شما نمی توانید ASP را روی نگارش خانگی XP اجرا كنید.
۱- از دگمه Start به Settings و بعد به Control Panel بروید.
۲- در پنجره Control Panel ، Add/Remove Programs را انتخاب كنید.
۳-در پنجره Add/Remove Programs گزینه Add/Remove Windows Components را انتخاب كنید.
۴- در پنجره Wizard ، Internet Information Services را انتخاب كرده و روی OK كلیك كنید.
۵- یك فلدر به اسم Inetpub در هارد درایو شما ایجاد خواهد شد.
۶- Inetpub را باز كنید و فلدر wwwroot را پیدا كنید.
۷- یك فلدر جدید مثلMyWeb در wwwroot ایجاد كنید.
۸- فایل ASP خود را مانند test1.asp در MyWeb كپی كنید.
۹- مطمئن بشوید كه وب سرور شما در حال اجرا است.(البته به صورت معمول خود در این حالت قرار دارد)
۱۰- جستجوگر خود را باز كرده و آدرس http://localhost/MyWeb/test1.asp را وارد كنید تا اولین صفحه ASP خود را ببینید.

بدلیل پیشرفته بودن كار در سیستم عامل هاى دیگر از نوشتن آن را خوددارى كردیم

چهارشنبه 12/3/1389 - 11:0 - 0 تشکر 203499

راهكارهائی برای بهبود طراحی صفحات ASP – بخش اول

مقدمه
امروزه وب بعنوان یك واقعیت انكار ناپذیر سایه خود را در تمامی زندگی اجتماعی، اقتصادی و بشریت انداخته و دارای رشدی بسیار سریع در زمینه بكارگیری تكنولوژی های جدید است. همزمان با این رشد اعجازگونه، وب سایت ها از حالت اولیه خود كه كوچك و عمدتا ایستا بوده خارج شده و بسمت حجیم شدن و پویائی حركت كردند. امروزه بر روی یك وب سایت نرم افزارهای متعددی اجراء می شوند تا پاسخگوی نیاز كاربران خود بوده و در این دنیای رقابت، دلیلی برای بودن خود را داشته باشند. دراین مسیر تكنولوژی های متعددی نظیر تكنولوژی Dynamic Scripting مانند ASP بوجود آمد تا طراحان یك وب سایت را جهت طراحی یك وب سایت پویا یاری رسانند. طراحی و پشتیبانی یك وب سایت پویا از چالش های اصلی در این زمینه بوده كه اگر تدابیر خاصی اتخاذ نگردد و طراحان مقید به رعایت آنها نباشند شاید در ادامه حیات یك وب سایت، در باتلاقی فرو رویم كه تاوان خروج از آن، گذشت از برخی سرویس های ارائه شده روی سایت و یا از دست دادن زمان باشد. از دست دادن زمان در دنیای امروز یعنی سرودن شعری ( مرثیه ای ) برای نبودن خود!

در این مقاله سعی خواهد شد كه به برخی از این تدابیر از دیدگاه مهندسی نرم افزار اشاره شود. استفاده از SSI، استفاده از مزایای كلاس های Vbscript، استفاده از متدهای Server.Execute و Server.Transfer نمونه هائی از این تدابیر جهت طراحی صفحات ASP ماجولار با قابلیت استفاده مجدد (Reusable) است.

Server Side Includes
یكی از مهمترین رویكردهای موجود در زمینه طراحی صفحات ASP ماجولار استفاده از SSI است. از SSI برای صادر نمودن كدهای یك صفحه ASP درون یك صفحه ASP دیگر استفاده می شود. ویژگی فوق به ما این امكان را خواهد داد كه صفحات ASP مجزائی (که درون هر یك توابع و یا كلاس های خاصی قرار گرفته است) را طراحی كرده و در صفحات ASP دیگر كه به عملكرد برخی از توابع و یا كلاس های مربوطه نیاز باشد، آنها را استفاده نمائیم ( كد یك بار نوشته خواهد شد و از آن به دفعات و به تعداد مورد نیاز استفاده خواهد شد). فرض كنید تابعی نوشته شده است كه وظیفه آن محاسبه میزان مالیات فروش یك كالا باشد. اگر به عملكرد چنین تابعی در چندین صفحه ASP نیاز داشته باشیم، می بایست از عملیات معروف بریدن / چسباندن (Cut & Paste) استفاده كرد. شاید این كار زمانیكه یك سایت ساده را داشته باشیم میسر باشد ولی در یك سایت واقعی با حجم عملیات بالا، طاقت فرسا و گاه غیرممكن بنظر می رسد. در چنین وضعیتی می توان تابع فوق را در یك فایل مجزا قرار داده و با استفاده SSI در هر یك از صفحات ASP مورد استفاده قرار داد. فرض كنید تابع زیر قیمت خام یك كالا را بعنوان پارامتر ورودی گرفته و پس از محاسبه میزان مالیات فروش بر آن، قیمت نهائی را محاسبه و آن را به برنامه یا تابع صدا زننده برگرداند.

Function ComputeTax(PureCost)
   Const Tax_Rate= 0.744
   ComputeTax = PureCost + PureCost*Tax_Rate
End Function

اگر تابع فوق بصورت جداگانه در هر یك از صفحات ASP یك سایت فروش كالا قرار گرفته باشد و در ادامه حیات سایت قصد تغییر میزان مالیات بر فروش را داشته باشیم، چه اتفاقی خواهد افتاد؟ می بایست یكایك صفحات ASP را انتخاب، بررسی و در صورت استفاده از تابع فوق، تغییرات لازمه را اعمال نمود. یكی از بهترین روش های موجود جهت برخورد با اینگونه مسائل در زمان طراحی یك وب سایت، استقرار تابع فوق در یك فایل مجزا ( فرضا ComputeTax.ASP ) است. پس از انجام این كار اولا زمینه استفاده از تابع فوق برای تمامی صفحات دیگر بكمك SSI فراهم شده و ثانیا در صورت نیاز به برخی تغییرات، بسهولت می توان به این هدف رسید ( اعمال تغییرات در یك نقطه و انتشار تغییرات در کل سایت ).

زمانیكه از SSI برای صدور محتویات یك فایل به فایل دیگر استفاده می كنیم، متن و یا محتویات فایل ضمیمه شده، دقیقا در محلی از فایل میزبان كه از SSI استفاده كرده قرار خواهد گرفت. در صورتیكه بخواهیم ( كه قطعا می خواهیم ) از متغیرهای موجود در فایل ضمیمه شده در فایل میزبان ( فایلی كه از قابلیت SSI استفاده می كند ) استفاده نمائیم می بایست از دستور Option Explicit در فایل فوق استفاده نمائیم. كدهای موجود در فایل ضمیمه شده می بایست بین <% %> و یا مجموعه قرار گیرند.

فرض كنید تابع نوشته شده قبلی را در فایلی با نام ComputeTax.asp ذخیره كرده و فایل فوق را در یک دایرکتوری با نام Utils بر روی سرویس دهنده وب قرار داده باشیم. محتویات فایل فوق بصورت زیر خواهد بود.

<%
Function ComputeTax(PureCost)
   Const Tax_Rate= 0.744
   ComputeTax = PureCost + PureCost*Tax_Rate
End Function
%>

در ادامه برای هر یك از صفحات ASP كه به تابع فوق نیاز داشته باشند، می بایست از یك SSI استفاده نمود. مثال زیر نحوه استفاده از تابع فوق را در یك فایل دیگر نشان می دهد:

<% @LANGUAGE="VBSCRIPT" %>
<% Option Explicit %>

در صورت اجرای فایل فوق توسط سرویس دهنده وب با یك پیام خطا مواجه شده با این مفهوم كه فایل <%strpage%> پیدا نشد. برای این مشكل هم راه حل هائی وجود دارد، یكی از این روش ها استفاده از دستور Select Case است بگونه ای كه برای هر حالت SSI یك case داشته باشیم. دستورات زیر نحوه حل مشكل فوق را نشان می دهد:

<%
Select Case strpage
Case "IncludeFile1.ASP" %>

<% Case "IncludeFile2.asp" >

<% Case "IncludeFile3.asp" >

<% Case "IncludeFile4.asp" >

<% Case "IncludeFile5.asp" >

<% End Select >

روش فوق با اینكه مشكل استفاده از نام بصورت پویا برای SSI را برطرف كرده است ولی چالش های جدیدی را ایجاد می كند : اولا تعداد حالاتی را که می توانیم داشته باشیم را محدود می کند. ثانیا به ازای هر فایلی كه می خواهیم آن را include نمائیم، می بایست از یك case استفاده نموده و ثالثا با توجه به این امر كه تمام محتویات یك فایل include شده قبل از پردازش یك فایل ASP به آن ملحق خواهد شد، بدیهی است كه حجم چنین فایلی بشدت افزایش پیدا كرده و می تواند مسائل خاص خود را داشته باشد.

یكی دیگر از روش های موجود جهت حل مشكل یاد شده، استفاده از FileSystemObject است. در این روش شی فوق مسئولیت خواندن یك فایل ضمیمه شده را برعهده گرفته و محتویات آن را در یك فایل ASP درج خواهد كرد. مجموعه دستورات زیر امكان درج یك فایل را درون اسكریپت های ASP بوجود می آورد:

<% Option Explicit %>
<%
Dim StrFileName ,objFSO,objFile
strFileName = "C:\InetPub\wwwroot\Test.htm"
Set objFile = objFSO.OpenTextFile(strFileName)
Response.Write objFile.ReadAll
Set objFile = Nothing
Set objFSO = Nothing
%>

برنامه فوق صرفا امكان درج یك فایل متنی بصورت پویا را در یك فایل دیگر فراهم می كند و اگر در فایل الحاق شده دستورات و یا كدهای اجرائی وجود داشته باشد فقط آنها را نمایش داده و صفت اجرائی بودن از آنها سلب خواهد شد. در نسخه ASP 2.0 امكان استفاده از SSI پویا وجود نداشته و در نسخه 3.0 با استفاده از متد Server.Execute تحقق این امر میسر شده است.

نامگذاری فایل های ضمیمه
پس از استقرار توابع مورد نظر در یك فایل خاص كه قصد استفاده از آنان را برای سایر صفحات ASP داریم، می بایست انشعاب فایل كنابخانه ای خود را asp قرار دهیم. در صورتیكه انشعاب یك فایل ضمیمه را asp در نظر نگیریم، یك كاربر ماهر با حدس زدن نام فایل ضمیمه شده، قادر به مشاهده محتویات فایل مورد نظر و دستیابی به كدهای مربوطه خواهد بود ! فایل های با انشعاب asp در مقابل چشمان نامحرم ایمن هستند. در صورتیكه بهر دلیلی قصد استفاده از یك فایل ضمیمه را با انشعابی غیر از asp را داشته باشیم، می بایست آن را در دایرکتوری قرار داد كه مجوز خواندن HTTP آن غیرفعال شده باشد. با انجام این كار فایل های ASP كماكان امكان استفاده از این نوع فایل ها را دارا بوده ولی در صورتیكه كاربری قصد مشاهده محتویات این نوع فایل ها را به روش سعی و خطا داشته باشد، با یك پیام خطا مبنی بر عدم مجاز بودن برای مشاهده فایل مواجه خواهند شد. اگرچه حدس زدن نام یك فایل برای یك كاربر بسیار مشكل بنظر می رسد ولی این بمنزله ایمن بودن این نوع فایل ها زمانیكه دارای انشعاب فایلی غیر از asp نخواهد بود. فرض كنید كه یكی از توابع موجود در یكی از فایل های ضمیمه شده دارای یك خطای برنامه نویسی باشد، زمانیكه یك كاربر صفحه ای را مشاهده می كند كه در آن صفحه از تابع فوق كه خود در یك فایل ضمیمه شده قرار گرفته، استفاده می شود، یك پیام خطا بر روی مرورگر كاربر با ذكر نوع خطا، مسیر و نام فایلی كه خطا در آن اتفاق افتاده نمایش داده می شود. نام فایل می تواند، فایل ضمیمه شده ئی باشد كه دارای انشعاب غیر از asp باشد، در چنین مواردی كاربران با دادن مسیر مربوطه قادر به مشاهده محتویات فایل مورد نظر خواهند بود.

حفاظت محتویات فایل های ضمیمه
روش های متعددی جهت حفاظت محتویات فایل های ضمیمه وجود دارد. در ادامه به دو روش رایج اشاره می شود:

۱ یك دایرکتوری برای تمامی فایل های ضمیمه ایجاد كرده و مجوز خواندن Http را برای آن غیر فعال نمائید. تمامی فایل های ضمیمه خود را در دایرکتوری فوق قرار دهید. در صورتیكه كاربری قصد دستیابی به محتویات یكی از فایل های موجود در فولدر فوق را داشته باشد با پیام Permission Denied error مواجه خواهد شد.
۲ انشعاب تمامی فایل های ضمیمه را asp در نظر بگیرید. با این كار در صورتیكه كاربری قصد مشاهده محتویات چنین فایل هائی را داشته باشد، سرویس دهنده وب درخواست او را اخذ و جهت پردازش در اختیار ASP.dll قرار داده و وی نیز ماحصل كار خود را بصورت HTML برای متقاضی ارسال خواهد كرد!

چهارشنبه 12/3/1389 - 11:2 - 0 تشکر 203500

راهكارهائی برای بهبود طراحی صفحات ASP – بخش دوم

در بحث اول این مقاله نحوه استفاده از فایل های ضمیمه بعنوان اولین رویكرد جهت طراحی صفحات ASP ماژولار، تشریح گردید. در این بحثبه بررسی امكانات Server.Execute و Server.Transfer بعنوان دومین رویكرد جهت طراحی صفحات ماژولار خواهیم پرداخت.

Server.Execute
از امكان فوق جهت طراحی صفحات ماژولار ASP می توان استفاده كرد. در صورت استفاده از امكان فوق در یك صفحه، كنترل به صفحه دیگر منتقلشده و پس از اجرای مجموعه دستورات و امكانات موجود در صفحه صدازده شده، كنترل مجددا به صفحه اولیه برگردانده می شود. بنابراین می توان برخی از صفحات را بصورت عمومی طراحی ( كیت های نرم افزاری ) و در ادامه از طریق صفحات دیگر آنها را فعال و زمینه استفاده از خدمات دهی آنها به صفحات صدازننده را فراهم نمود. هر كیت نرم افزاری پس از ارائه خدمات مربوطه خود، كنترل را برای ادامه سرویس دهی در اختیار صفحه صدا زننده خود برمی گرداند.

مثال ۱: در مثال زیر صفحه شماره یك ( Page1 ) با استفاده از Server.Execute صفحه دوم (Page2) را فعال و صفحه دوم پس از اجرا و اتمام وظایف محوله، مجددا كنترل را به صفحه اول برمی گرداند.

/Myscripts/Page2.asp"
Server.Execute(JumpPage)
...
%>

Page2.asp 
<%
...
%>

نكته بسیار مهم در این فراخوانی امكان استفاده از اشیاء از قبل ساخته شده (Built-in) و استفاده شده در صفحه اولیه، توسط صفحه صدا زده شده است. به عبارت دیگر تمامی نمونه اشیاء استفاده شده در صفحه اولیه با صفحه صدازده شده به اشتراك گذاشته خواهند شد. مثلا در صورتیكه در صفحه اولیه از شئ Request استفاده شده و به كمك مجموعه های Form و یا QueryString اقدام به خواندن اطلاعاتی از طریق یك فرم شده است، این مقادیر نیز توسط صفحه صدا زده شده قابل استفاده خواهند بود.

بهترین جایگاه استفاده از Server.Execute زمانی است كه قصد استفاده پویا از فایل های دیگری را داشته باشیم ( Dynamic Include ) در صورتیكه چنین هدفی را دنبال نمی كنیم، استفاده از SSI توصیه می گردد.

Server.Transfer
از امكان فوق می توان در جهت بهبود طراحی صفحات ASP استفاده كرد. ویژگی فوق را نمی توان بعنوان گزینه ای برای طراحی صفحات ماژولار نظیر SSI و یا Server.Execute در نظر گرفت. عملكرد امكان فوق در اكثر موارد مشابه Server.Execute است با این تفاوت مهم كه پس از انتقال به صفحه دوم، كنترل مجددا به صفحه اول ( صدازننده) برگردانده نخواهد شد.

مثال ۲: در مثال زیر صفحه شماره یك ( Page1 ) با استفاده از Server.Transfer صفحه دوم (Page2) را فعال و صفحه دوم پس از اجرا و اتمام وظایف محوله، كنترل را به صفحه اول برنمی گرداند.

/Myscripts/Page2.asp"
Server.Transfer(JumpPage)
...
%>

Page2.asp
<%
...
%>

تمامی اشیاء Built-in در صفحه اول در اختیار صفحه دوم نیز قرار گرفته و زمینه استفاده از مجموعه های مرتبط با هر یك از اشیاء در این صفحه نیز فراهم خواهد شد.

جایگاه استفاده از Server.Transfer در مواردی است كه بخواهیم پس از انجام عملیات خاصی، نقطه خروج آنها را به یك صفحه خاص هدایت نمائیم. مثلا فرض كنیم كه دارای سایتی هستیم كه از طریق صفحات متفاوت، اطلاعاتی توسط كاربران ارسال و در نهایت در بانك های اطلاعاتی از قبل طراحی شده قرار می گیرند. در چنین حالتی می توان پس از اطمینان از صحت اطلاعات و ذخیره آنان در بانك های اطلاعاتی مرتبط، صفحه ای با نام SaveOk.asp داشته باشیم كه در این صفحه به كاربر اعلام می نمائیم، اطلاعات شما دریافت و در بانك اطلاعاتی سیستم ذخیره گردید. صفحه فوق را می توان از طریق صفحات متفاوت دیگر بكمك Server.Transfer فعال نمود. با این كار مسئولیت ارائه پیامهای دریافت اطلاعات بهمراه پارامترهای مربوطه متمركز شده و از نوشتن كدهای تكراری در این خصوص جلوگیری بعمل می آید. وضعیت فوق را می توان در موارد بسیاری نظیر: متمركز نمودن پیامهای خطا، متمركز نمودن كنترل های لازم بر روی فیلدهای موجود بر روی یك فرم، متمركز نمودن اطلاعات كمكی (Help ) به كاربران سایت و استفاده نمود.

چهارشنبه 12/3/1389 - 11:6 - 0 تشکر 203503

راهكارهائی برای بهبود طراحی صفحات ASP – بخش سوم

در بخش اول این بحث، نحوه استفاده از فایل های ضمیمه بعنوان اولین رویكرد جهت طراحی صفحات ASP ماژولار، و در بخش دوم  به بررسی امكانات Server.Execute و Server.Transfer بعنوان دومین رویكرد جهت طراحی صفحات ماژولار مطرح و بررسی گردید. در این مقاله سعی می شود كه با كلاس های Vbscript آشنا شده و نحوه استفاده از آنان در طراحی صفحات ASP مورد بررسی قرار گیرد.

همزمان با ارائه نسخه 5 Vbscript توسط شركت ماكروسافت، پیاده كنندگان نرم افزار این امكان را بدست آوردند كه بتوانند از كلاس هائی نظیر آنچه در ویژوال بیسیك استفاده می گردد نیز استفاده نمایند. كلاس ها با رویكرد برنامه نویسی شئ گراء ایجاد و به طراحان صفحات ASP این امكان را خواهد داد تا قادر به استفاده از كدهای قبلی خود در سایر صفحات ASP خود باشند. كلاس ها توسط طراحان ذیربط بعنوان ماژول های جعبه سیاه بگونه ای طراحی می گردنند كه سایر استفاده كنندگان بدون نیاز به آگاهی از جزئیات مربوط به هر كلاس و بهره مندی از متدها و صفات ( ویژگی ها ) یك كلاس از توانائی آن در برنامه های خود استفاده نمایند. در ابتدا لازم است كه یك مرور سریع به برنامه نویسی شئ گراء داشته باشیم.

برنامه نویسی شئ گراء (OOP)، یك متدولوژی برنامه نویسی است كه در آن هر موجودیت با نام یك شئ ( Object) شناخته می شود. هر شئ شامل صفت ( Properties ) و متدها ( Methods ) است. یك صفت ویژگی های یك شئ را تشریح می کند در حالیكه یك متد عملیات خاصی را بر روی یك شئ انجام می دهد. شما بعنوان یك طراح صفحات ASP، به دفعات از اشیاء تعریف شده توسط دیگران استفاده كرده و می كنید. مثلا ADO یا ActiveX Data Object، چیزی بیشتر از یك مجموعه از اشیاء طراحی شده برای دستیابی به بانك های اطلاعاتی نیست. زمانیكه از ADO برای دستیابی به بانك های اطلاعاتی استفاده می شود، استفاده كننده نیاز به دانش و آگاهی لازم جهت شناخت نوع پروتكل مورد نیاز ارتباطی با یك بانك اطلاعاتی نبوده و بسادگی با استفاده از متد Open مربوط به شئ Connection با یك بانك اطلاعاتی مرتبط خواهد شد. بمنظور شناخت كامل برنامه نویسی شئ گراء، لازم است بین دو مفهوم یك شئ (Object) و یك نمونه از شئ (Instance Object) تفاوت قائل شویم. یك شئ نظیر شئ Connection، مربوط به ADO یك آیتم خیالی است. در حقیقت این شئ بصورت فیزیكی وجود نداشته و صرفا بمنزله یك قالب ( Template ) برای ایجاد یك نمونه در نظر گرفته می شود. یك نمونه (Instance)، یك هویت ( موجودیت ) فیزیكی از یك شئ است. در مثال زیر ADODB.Connection یك شئ بوده در حالیكه ObjConn نمونه ای از شئ Connection است.

Dim ObjConn
Set ObjConn=Server.CreateObject("ADODB.Connection")

ما می بایست از هر شئ نمونه ای را داشته باشیم تا بتوانیم با استفاده از فراخوانی متدهای مربوطه و یا تغییر و استفاده از صفات ذیربط، زمینه مناسب جهت استفاده عملی از آن را فراهم نمائیم. در یك مثال واقعی از ارتباط شئ / نمونه، می توان مثال معروف اتومبیل را در نظر گرفت. یك ماشین یك شئ است. این شئ یك طرح اولیه (Templeate) برای تشریح ویژگی ها و عملكردهای یك اتومبیل خواهد بود. یك "پراید" نمونه ای از یك اتومبیل است كه با بكارگیری متدها و صفات مربوطه، می توان عملیات دلخواه و از قبل تعریف شده را بر روی نمونه فوق انجام داد.

كپسوله نمودن پیچیدگی ها
برنامه نویسی شئ گراء می تواند بعنوان یك راهكار موفق جهت كپسوله نمودن پیچیدگی های مرتبط با فعالیت های خاص نیز مورد توجه جدی قرار گیرد. مثلا فرض نمائید كه بر روی وب سایت خود نیاز داشته باشیم كه یك فایل متنی را بازكرده ( Open )، تعداد خطوط آن را محاسبه ( شمارش ) و ماحصل كار را در یك فایل دیگر ثبت ( Log ) نمائیم. در چنین حالتی در صورتیكه از برنامه نویسی شئ گراء استفاده نكنیم، هر زمان كه قصد انجام مجموعه فعالیت های گفته شده را داشته باشیم، می بایست عملیات زیر را مرحله به مرحله انجام داد:

• باز نمودن یك فایل متنی خاص 
• شمارش تعداد خطوط موجود در فایل 
• بستن فایل متنی 
• باز كردن فایل مورد نظر برای ثبت ( Logging File ) 
• ثبت تعداد خطوط شمارش شده 
• بستن فایل Log

با اینكه مراحل فوق پیچیده بنظر نمی آیند ولی تصور كنید كه بخواهیم این عملیات را در چندین صفحه ASP انجام دهیم. در چنین حالتی می توان بسادگی تمامی مراحل فوق را كپسوله و در یك شئ خاص قرار داد. ببینیم چگونه می توان این شئ را ایجاد كرد. فرض كنید نام این شئ را LogTextFileLines در نظر بگیریم. شئ فوق صرفا دارای یك صفت با نام TextFilePath بوده كه مسیر فیزیكی فایل Log را مشخص خواهد كرد. شئ فوق همچنین دارای یك متد با نام UpdateLog بوده كه مسئول شمارش تعداد خطوط در فایل مورد نظر خواهد بود. متد فوق می تواند دارای تعریفی مشابه زیر باشد:

Function UpdateLog ( StrFileName )

StrFileName، مسیر و نام فایل متنی است كه می بایست تعداد خطوط آن شمارش و ثبت گردد. متد فوق یك ارزش منطقی (Boolean)، را برمیگرداند. مقدار فوق موفقیت آمیز بودن عملیات را نشان خواهد داد. پس از ایجاد شئ فوق، مراحل شش گانه گفته شده بسادگی انجام خواهند شد:

Dim ObjLog
Set ObjLog = New LogTextFileLines
ObjLog.LogTextFileLine = "C:\MyLogFiles\Linecount.log"
If ObjLog.UpdateLog( "C:\MyTextFiles\Test.Txt") Then 
   Response.Write("C:\MyTextFiles\Test.txt was logged successfully")
Else 
   Response.Write("There are an error when attemping to log C:\MyTextFiles\Test.Txt"
End If

همانطور كه مشاهده می شود، استفاده از شئ فوق تمام پردازش روی فایل را بصورت یك جعبه سیاه در آورده است. پس از اصول اولیه فوق، در ادامه با نحوه استفاده از كلاس های Vbscript تشریح می گردد.

كلاس های Vbscript صرفا شامل یك Constractor است. یك Constractor، روتینی است كه بلافاصله پس از ایجاد یك نمونه از شئ بصورت اتوماتیك اجرا خواهد شد. متاسفانه Constractor ها در Vbscript نمی توانند پارامتری را بعنوان ورودی اخذ نمایند. در ضمن كلاس های Vbscript، توارث را نیز حمایت نمی كنند.

در زمان ایجاد یك كلاس، می بایست به این نكته توجه شود كه شما در حال تولید و ساخت ابزاری هستید كه قرار است توسط سایر طراحان مورد استفاده قرار گیرد. پیاده كنندگانی را كه برای سایر پیاده كنندگان كلاس هائی را ایجاد می كنند Class Developer و پیاده كنندگانی را كه از این كلاس ها استفاده می نمایند End Developer می گویند. كلاس هائی كه توسط Vbscript ایجاد می شود را نمی توان مانند عناصر COM، كامپایل نمود. بنابراین یك End Developer كه قصد استفاده از كلاس فوق را در صفحات ASP داشته باشد، می بایست تعریف كلاس را بهمراه كدهای ASP داشته باشد. بنابراین روش مناسب این است كه تعاریف مربوط به كلاس ها را در یك فایل متنی قرار داد و بدین ترتیب استفاده كنندگان از كلاس فوق با استفاده از SSI ( استفاده از فایل های ضمیمه ) قادر به استفاده از كلاس های فوق در صفحات ASP خود خواهند بود. پس از ایجاد یك كلاس، پیاده كنندگان كلاس ها می بایست به این نكته توجه نمایند كه اعمال هر گونه تغییر در یك كلاس می بایست بگونه ای باشد كه باعث بروز اشكال در متدها و صفات قبلی تعریف شده نگردد.

ایجاد یك كلاس
برای ایجاد یك كلاس از دستورالعمل Class كه دارای گرامری مشابه زیر است، استفاده می شود:

Class Name_Of_Class
" تعریف متدها و صفات مربوطه 
End Class

رویدادهای آغاز و خاتمه
زمانیكه كلاس ها ایجاد می گردنند، دو رویداد مهم در این زمینه نقش مهمی را برعهده خواهند گرفت : رویداد مقداردهی اولیه (Initilize) و رویداد خاتمه (Terminate). رویداد مقداردهی اولیه زمانیكه توسط دستور New یك نمونه یا مصداق از كلاسی ایجاد می گردد، فعال خواهد شد.

مثال ۱- دستورات زیر یك نمونه از كلاسی با نام SomeObject را ایجاد می كنند.

Dim ObjSomeObjectInstance
Set ObjSomeObjectInstance = New SomeObject

رویداد خاتمه زمانیكه به حیات نمونه ای از یك شئ خاتمه داده می شود، فعال خواهد شد. حیات نمونه ای از كلاس یا با استفاده از عبارتی نظیر ObjSomeObjectInstance = Nothing با صراحت اعلان می گردد و یا زمانیكه از حوزه ای كه شئ را تعریف كرده ایم، خارج شویم، بدین ترتیب زمینه اجرای رویداد فوق فراهم خواهد شد. رویدادهای دوگانه فوق را می توان در زمان طراحی یك كلاس، تعریف نمود. رویداد مقداردهی اولیه را برای مقداردهی اولیه صفات یك كلاس یا انجام عملیات خاص مورد نیاز برای شروع استفاده از یك كلاس می توان استفاده كرد. رویداد مقداردهی اولیه را Constractor می نامند. رویداد خاتمه را می توان جهت انجام عملیات خاصی كه مورد نیاز اتمام فعالیت یك كلاس است، استفاده كرد. رویداد فوق را Deconstractor می نامند.

مثال۲- در مثال زیر یك كلاس بهمراه رویدادهای آغاز و خاتمه تعریف شده است.

Class SomeObject
Private Sub Class_Initialize( ) 

End Sub
Private Sub Class_Terminate( ) 

End Sub
End Class

رویداد Class_Initialize زمانیكه یك نمونه از یك شئ ایجاد می گردد، بصورت اتوماتیك اجراء خواهد شد. رویداد Class_Terminate زمانیكه نمونه تعریف شده از یك شئ از بین می رود، بصورت اتوماتیك اجراء خواهد شد.

Properties , Methods , Member Variables , Member Function
از دیدگاه استفاده كننده از یك كلاس، یك كلاس شامل مجموعه ای از صفات و متدها است. صفات، متغیرهائی هستند كه پیاده كنندگان را قادر به تغییر و یا استفاده از آنان بمنظور مشخص نمودن وضعیت یك كلاس می كنند. متدها توابعی هستند كه پیاده كنندگان را قادر به انجام عملیات خاصی را بر روی یك كلاس می كنند. مثلا شئ ADODB.Connection شامل صفاتی است كه وضعیت یك نمونه از شئ ایجاد شده را تشریح خواهد كرد.( نظیر ConnectionString,ConnectionTimeOut, ) متدهائی نظیر Open , Close عملیات خاصی را در رابطه با نمونه شئ ایجاد شده، انجام خواهند داد. یك كلاس می تواند دارای صفات و یا متدهائی باشد كه یك استفاده كننده از كلاس، نمی تواند آنها را مستقیما استفاده و فعال نماید. این متغیرها و توابع مخفی، Member Variables و Member Function نامیده می شوند. بنابراین در صورتیكه یك استفاده كننده قادر باشد مستقیما تابعی را فعال نماید به آن متد و در غیراینصورت به آن Member Function می گویند. این وضعیت در رابطه با صفات نیز صدق می كند. در صورتیكه یك استفاده كننده از كلاسی قادر به صدا زدن و استفاده از یك متغیر كلاس باشد از آن با نام Property نام برده می شود، در غیر اینصورت به آن Member Variable می گویند.

عبارات Prtivate , Public
همانطور كه قبلا گفته شد، كپسوله نمودن پیچیدگی ها، یكی از اهداف برنامه نویس شئ گراء است. در این حالت جزئیات پیاده سازی از دید استفاده كنندگان یك كلاس مخفی نگه داشته می شود. Vbscript این امكان را فراهم می سازد كه بتوان در زمان طراحی یك كلاس، برخی از متدها و صفات یك شئ را از دید استفاده كنندگان آن كلاس، مخفی نگه داشت. برای ایجاد Member Function و Member Variable از واژه Private قبل از نام یك تابع و یا یك صفت استفاده می شود. یك Member Function صرفا توسط متد دیگری از كلاس مورد نظر و یا یك Member Function دیگر صدا زده می شود. یك Member Variable را می توان توسط یك متد و یا یك Member Function تغییر و استفاده نمود. با استفاده از امكانات Property Get , Property Let , Property Set نیز امكان تغییر و استفاده از این نوع متغیرها وجود خواهد داشت. برای ایجاد یك صفت و یا یك متد كافی است قبل از نام آنها از واژه Public استفاده كرد. در صورتیكه قبل از نام یك متد و یا یك صفت با صراحت نوع آنها ( Public,Private ) مشخص نگردد، بصورت پیش فرض Public در نظر گرفته خواهند شد.

مثال ۳- در مثال زیر یك كلاس ایجاد و صفات و متدهای Public و Private برای آن تعریف شده است.

Class myclass
Public Sub A_Public_Method( )
در این محل می توان متدهای Private را صدا زد.
A_Private_Method
End Sub
Public A_Public_Property
Private Sub A_Private_Method( )
...
End Sub
Private A_Private_Property
End Class

همانگونه كه در مثال فوق مشاهده می نمائید، زمانیكه از واژه های Private و Public بهمراه متغیرها استفاده می گردد، دیگر نیازی با استفاده از عبارت Dim نخواهد بود. در صورتیكه با صراحت نوع یك متغیر را مشخص ننمائیم، می بایست قبل از نام این نوع متغیرها از عبارت Dim استفاده شود. در چنین وضعیتی این نوع متغیرها بصورت Public در نظر گرفته خواهند شد.

توصیه می گردد كه همواره با صراحت نوع یك متغیر و یا یك تابع را توسط بكارگیری واژه های Private و یا Public مشخص نمود. در صورتیكه یك استفاده كننده از كلاس قصد دستیابی به متدها و صفات Private نمونه شئ myclass را در یك برنامه داشته باشد، با یك پیام خطا مواجه می گردد.

مثال ۴- در مثال زیر نحوه دستیابی به توابع و صفات Private و Public با تاكید بر شئ myclass كه در مثال ۳ تعریف شده بود، نشان داده می شود.

Dim Objmyclass
Set Objmyclass = New myclass
Objmyclass.A_Public_Method( ) "Valid Calling
Objmyclass.A_Public_Oroperty = 12 "Valid Calling
Objmyclass.A_Private_Method "Invalid Calling
Objmyclass.A_Private_Property = 120 "Invalid Calling
Dim Ivalue
"Invalid Calling Ivalue = Objmyclass,A_Private_Property

استفاده از Property Get
نمامی متغیرها در Vbscript از نوع Variant بوده و اگر یك متغیر Public را تعریف كنیم، هیچگونه كنترلی از بعد نوع محتوائی كه استفاده كننده به آن نسبت خواهد داد، وجود نخواهد داشت. مثلا فرض كنید كه صفتی با نام PhoneNumber در یك كلاس تعریف كرده باشیم، بدیهی است كه متغیر فوق قرار است شماره تلفن ها را در خود ذخیره نماید. استفاده كنندگان از كلاس فوق می توانند بسادگی یك بردار، نمونه ای از یك شئ و سایر موارد را به آن نسبت دهند. بمنظور حل مشكلاتی از این نوع یك متغیر Private در كلاس ایجاد و در ادامه متدی Public را جهت دستیابی و استفاده از این متغیر تعریف می كنیم. در Vbscript تمامی صفات را می توان بصورت Private تعریف و در صورتیكه بخواهیم استفاده كنندگان از كلاس فوق، قادر به خواندن مقدار این صفت باشند، با استفاده از عبارت Property Get در كلاس، امكان استفاده از آن را می توان فراهم كرد. عبارت فوق دارای گرامری مطابق زیر است:

[ Public | Private ] Property Get propertyName [ ( arglist) ]
"...assign the value of the private property to propertyname
End Property

مثال ۵- در مثال زیر یك صفت با نام strphonebumber تعریف شده است.

Class Information
Private StrPhoneNumber
End class

در ادامه اگر بخواهیم كه سایر استفاده كنندگان از شئ فوق، قادر به خواندن مقدار StrPhoneNumber باشند، می توانیم از عبارت Property Get مشابه زیر استفاده نمود:

Class Information
Private StrPhoneNumber
Public Property Get PhoneNumber ( )
PhoneNumber = strPhoneNumber 
End Property
End class

پس از انجام عملیات فوق، سایر استفاده كنندگان از كلاس فوق می توانند با استفاده از كدهائی مشابه زیر به StrPhoneNumber دستیابی داشته باشند.

Dim Objinfo
Set objinfo = New Information
Response.Write " Phone number = " & Objinfo.PhoneNumber "Valid 
Response.Write " Phone number = " & Objinfo.StrPhoneNumber "Invalid

در صورتیكه صفت برگردانده شده توسط Property Get، یك شئ باشد، می بایست از عبارت Set در زمان مقداردهی استفاده نمود. مثلا اگر StrPhoneNumber بجای یك رشته شامل یك شئ دیكشنری باشد، عبارت Property Get مورد نیاز بصورت زیر نوشته خواهد شد:

Public Property Get PhoneNumber( )
Set PhoneNumber = StrPhoneNumber 
End Property

عنصر arglist مربوط به عبارت Property Get زمانی مورد استفاده قرار می گیرد كه صفت به یك پارامتر، ایندكس نیاز داشته باشد. مثلا در صورتیكه یك بردار را بعنوان یك صفت Private داشته باشیم و بخواهیم به استفاده كنندگان از كلاس فوق امكان خواندن یك المان خاص از بردار را بدهیم ، می بایست از كد مشابه زیر استفاده كرد:

Class Information
Private Iostan( )
Private sub Class_Initialize( )
ReDim Iostan(27)
Iostan(0) = "Khoozestan"
...
End Sub
Public Property Get Ostan(Index)
Ostan = Iostan(Index)
End Property
End Class

پس از ایجاد نمونه ای از شئ Information، می توان از كدهای زیر برای خواندن یك مقدار خاص از بردار Iostan، استفاده كرد.

Dim ObjInfo
Set ObjInfo = New Information
Response.write ObjInfo.Ostan( 0) 
Set ObjInfo = Nothing

استفاده از Property Let
Property Get این امكان را برای استفاده كننده از یك كلاس فراهم می سازد كه بتوانند اقدام به بازیابی یك صفت Private بنمایند. Property Let، این امكان را برای استفاده كننده از یك كلاس فراهم می سازد كه بتوانند اقدام به مقداردهی اولیه یك صفت Private بنمایند. ویژگی فوق نظیر بیمه نمودن یك صفت در مقابل هر گونه حوادث احتمالی و خرابی است. اگر كلاسی بهمراه یك صفت Public و با نام StrPhoneNumber را ایجاد كرده باشیم، استفاده كنندگان از كلاس فوق قادر به مقدار دهی هر نوع ارزشی به این صفت خواهند بود. بدیهی است كه طراح كلاس فوق قصد ندارد این اجازه را به استفاده كننده از كلاس بدهند كه هر مقداری را به این صفت نسبت دهند. مقدار نسبت داده شده به صفت فوق می بایست دارای نوع و ارزش قابل قبول باشد. StrPhoneNumber می بایست دارای یك نوع داده با فرمت "#######" باشد. عبارت Property Let این امكان را فراهم خواهد ساخت كه یك نوع داده بهمراه فرمت مربوطه را تعریف و بررسی های لازم بر روی آن در زمان استفاده توسط یك استفاده كننده فراهم می گردد. گرامر عبارت فوق مشابه زیر است:

[ Public | Private ] Property Let propertyName [ ( arglist,) value]
"...Statements : Check to see if value is of the correct datatype
"...and format. If it is,assign value to the private property
End Property

جهت مقداردهی یك مقدار به صفت StrPhoneNumber می توان عبارت Property Let را مطابق زیر استفاده نمود:

Class Information
Private StrPhoneNumber 
Public Property Let PhoneNumber(StrPhone)
StrPhoneNumber = StrPhone
End Property
End Class

عبارت Property Let فوق، دارای یك فرمت یا بررسی نوع داده و ارزش مربوطه در زمان اختصاص یك مقدار توسط استفاده كنندگان كلاس به StrPhoneNumber نخواهد بود. پارامتر StrPhoneNumber از عبارت Property Let مقداری را كه توسط استفاده كننده از كلاس وارد می شود در خود ذخیره خواهد كرد.

مثال ۶- در این مثال مقدار 9999999 مقدار پارامتر ورودی بوده كه به صفت PhoneNumber نسبت داده می شود.

Dim ObjInfo
Set ObjInfo = New Information
ObjInfo.PhoneNumber = "9999999"

برای بررسی فرمت كد مربوطه، می بایست تصمیم گرفت كه چه نوع فرمتی قابل قبول و چه نوع قالبی غیرپذیرش خواهد بود. مثلا در رابطه با مثال فوق فرمت یك تلفن می تواند بصورت ####### باشد و اگر استفاده كننده از این كلاس قالبی دیگر را وارد كند، قابل قبول نخواهد بود.

مثال ۷- در این مثال یك كلاس جدید Information تعریف شده است.

Class Information
Private StrPhoneNumber
Public Property Let PhoneNumber(StrPhone)
If Isobject(StrPhone) Then 
Err.Raise vbobjectError + 1000 , "Information Calss","Invalid format for PhoneNumber.
Exit Property
End if
Dim ObjRegExp
Set ObjRegExp = New regexp
ObjregExp.Pattern = "^\d{7}$"
If ObjRegExp.Test(StrPhone) Then
StrPhoneNumber = StrPhone
Else
Err.Raise vbobjectError + 1000 , "Information Calss","Invalid format for PhoneNumber.
End if
Set ObjRegExp = Nothing
End Property
Public Property Get PhoneNumber( )
PhoneNumber = StrPhoneNumber
End Property
End Class

اگر استفاده كننده از كلاس، كدی مطابق زیر را اجراء نماید:

Dim ObjInfo
Set ObjInfo = New Information
ObjInfo.PhoneNumber = " This is an Invalid Phone Number "

یك پیام خطا مبنی بر عدم رعایت فرمت قابل قبول، را دریافت خواهد كرد. عبارت Property Let همچنین دارای یك arglist اختیاری نیز هست. این آرگومان می بایست با arglist عبارت متناظر در Property Get یكسان باشد ( در صورت وجود ) استفاده از Property Set كلاس ها می توانند دارای صفاتی باشند كه خود بمنزله شئ باشند. در چنین حالتی می بایست مراقبت های ویژه ای را در زمان اختصاص ( برگرداندن ) یك شئ از طریق یك Property Get انجام داد.

در Vbscript با استفاده از عبارت Property Set امكان مقداردهی یك نمونه از یك شئ به یك صفت وجود خواهد داشت. گرامر عبارت فوق بشكل زیر است:

[ Public | Private ] Property Set propertyName [ ( arglist,) reference]
" Perform any needed checks here , then use
" set ObjPrivateProperty = ProperName
End Property

قالب Property Get تقریبا مشابه Property Let است. تنها تفاوت عملیاتی بین آنها در این است كه عبارت Property Let مقادیری را كه به یك صفت نسبت می دهد از نوع شئ نخواهد بود در حالیكه Property set نمونه ای از یك شئ را كه به یك صفت Private نسبت می دهد. مثلا فرض كنید دارای كلاسی باشیم كه دارای یك صفت اختصاصی با نام ObjConn باشد، تعریف كلاس، عبارات Property Set و Property Get مطابق زیر خواهد بود.

Class MyConnectionClass
Private ObjConn
Public Property Get Connection( )
Set Connection = ObjConn
End Property
Public Property Set Connection( Objconnection)
Set ObjConn = ObjConnection
End Property
End Class

استفاده كنندگان از كلاس با استفاده Property Set مطابق زیر از كلاس فوق استفاده خواهند كرد.

Dim ObjMyClass , ObjMyRecordSet
Set ObjMyclass = New MyConnectionClass
Set ObjConnection = Server.Createobject("ADODB.Connection)
Set ObjMyclass.connection = objconnection

چهارشنبه 12/3/1389 - 11:8 - 0 تشکر 203506

آشنایی با فایل Global.asa

در فایل Global.asa، می توان اسكریپت هائی را تعریف نمود كه همزمان با بروز یك رویداد ( Event ) فعال شده و یا اقدام به تعریف اشیاء Session و Application نمود. امكانات تعریف شده در فایل فوق برای تمامی صفحات تشكیل دهنده یك برنامه ASP قابل دستیابی و استفاده خواهند بود. ضرورت وجود فایل فوق اختیاری بوده و در صورت تعریف می بایست در فهرست ریشه ای كه برنامه ASP در آن قرار دارد، استقرار یابد. هر برنامه ASP صرفا می تواند دارای یك فایل Global.asa باشد.

رویدادهای استاندارد در فایل Global.asa
در فایل فوق می توان به اشیاء Application و Session گفت كه در زمان آغاز و خاتمه عملیات مربوط به خود چه كارهائی را انجام دهند. در مجموع در فایل فوق چهار نوع رویداد را می توان قرار داد :

• Application_OnStart: رویداد فوق زمانیكه اولین كاربر به اولین صفحه یك برنامه ASP دستیابی پیدا می كند، فعال می گردد.
• Session_OnStart: رویداد فوق هر دفعه كه یك كاربر جدید درخواست اولین صفحه یك برنامه ASP را داشته باشد، فعال می گردد. 
• Session_OnEnd: رویداد فوق هر بار كه كاربری به جلسه كاری خود خاتمه می دهد فعال می گردد. در صورتیكه در یك مدت زمان مشخص و محدود ( پیش فرض بیست دقیقه ) در خواست صفحه ای توسط كاربر واصل نگردد، به جلسه كاری وی خاتمه داد می شود. 
• Application_OnEnd: رویداد فوق پس از اینكه آخرین كاربر به كار خود خاتمه می دهد، فعال می گردد. معمولا رویداد فوق زمانیكه سرویس دهنده وب متوقف می گردد نیز فعال می گردد.

برای هر یك از رویدادهای فوق می توان روال هائی را نوشت كه مسئول برخورد با رویداد مربوطه باشند. این روال ها درفایل Global.asa قرار می گیرند. چهارچوب كلی فایل فوق كه متضمن خواسته های چهارگانه فوق باشد می تواند بصورت زیر باشد:

با مشاهده چهارچوب فوق دوستان متوجه شده اند كه از <% و %> استفاده نشده و بمنظور استفاده از اسكریپت ها در فایل Global.asa می بایست از تگ

• از فایل Global.asa بمنظور كنترل دستیابی به صفحات نیز می توان استفاده كرد. در مثال زیر پس از ارتباط كاربر با سایت، بصورت اتوماتیك وی بسمت استفاده از یك فایل ( MyNewPage.asp ) دیگر هدایت می گردد.

vbscript" runat="server">
sub Session_OnStart
Response.Redirect("MyNewPage.ASP")
end sub

در ادامه به بررسی یك مثال كاربردی از تاثیر فایل فوق و نحوه استفاده از پتانسیل های ایجاد شده توسط فایل های ASP، خواهیم پرداخت.

مثال در این مثال با استفاده از فایل Global.asa، تعداد ملاقات كنندگان فعال یك سایت را مشخص می نمائیم. در فایل فوق از سه روال استفاده خواهد شد كه هر یك عملیات محوله را انجام خواهند داد. روال Application_OnStart، متغیر visitors مربوط به شی Application را صفر قرار می دهد. مقدار اولیه متغیر فوق پس از اینكه سرویس دهنده كار را آغاز كرد، به آن داده خواهد شد. روال Application_OnStart زمانیكه یك ملاقات كننده جدید وارد سایت می گردد، یك واحد به متغیر visitors اضافه كرده و در نهایت روال Session_OnEnd زمانیكه یك ملاقات كننده سایت را ترك می كند، یك واحد از متغیر visitors كم می كند.

محتویات فایل Global.asa:

بمنظور نمایش تعداد ملاقات كنندگان فعال، می توان از یك فایل ASP مطابق زیر استفاده نمود.




You are one of the <%=Application("visitors")%> online user!



پس از اجرای ASP فوق، خروجی زیر را خواهیم داشت.

You are one of the 12 online user

چهارشنبه 12/3/1389 - 11:9 - 0 تشکر 203507

بررسی شئ Application

این مقاله بطور خلاصه به بررسی شئ Application ومتدها، مجموعه هاو رویدادهای آن می پردازد. همانطور كه میدانید این شئ برای ذخیره كردن متغیرها و همچنین دستیابی به متغیرها از هر صفحه ASP استفاده می شود. این شئ، یك شئ عمومی است و اطلاعاتی را كه می خواهید در چند صفحه ASP مورد استفاده قرار دهید، باید در این شئ ذخیره كنید.

مجموعه Contents
این مجموعه حاوی تمام آیتم های اضافه شده در یك اسكریپت واقع در یك برنامه ASP است. لازم به ذكر است كه برای حذف آیتم ها از این مجموعه می توانید از متدهای Remove و Removeall استفاده كنید.
قاعده تركیبی : Application.Contents(Key)
پارامتر key نام آیتم بازیافت شده از این مجموعه است.

date")="2001/05/05"
Application("author")="Ostadhashemi"
for each x in Application.Contents
    Response.Write(x & "=" & Application.Contents(x) & "
")
next
%>

مجموعه StaticObjects
این مجموعه محتوی تمام آیتم های اضافه شده در یك برنامه ASP است كه بوسیله دستور اضافه شده اند. 
قاعده تركیبی : Application.StaticObjects(Key)
پارامتر key نام آیتم بازیافت شده از این مجموعه است.

server" scope="application" id="MsgBoard" progid="msgboard.MsgBoard">




In an ASP file :
<%
for each x in Application.StaticObjects
    Response.Write(x & "
")
next
%>

متد Remove
وظیفه این متد حذف یك یا چند آیتم از مجموعه Contents است. 
قاعده تركیبی : Application.Contents.Remove(name|index)
پارامترها :
name = نام آیتم موجود در مجموعه Contents 
index = شماره آیتم موجود در فهرست مجموعه Contents 

test1")=("First test")
Application("test2")=("Second test")
Application.Contents.Remove(2)
for each x in Application.Contents
    Response.Write(x & "=" & Application.Contents(x) & "
")
next
%>

متد RemoveAll
این متد تمام آیتم های موجود در مجموعه Contents را پاك می كند. 
قاعده تركیبی : Application.Contents.RemoveAll()
این متد، مستقل و بصورت زیر در صفحات ASP استفاده می شود :
Application.Contents.RemoveAll()

متد Lock
این متد مانع تغییر دادن متغیرهای شئ Application توسط كاربران می شود. همچنین مانع از دسترسی بیش از یك نفر در یك زمان به یك متغیر Application می شود.

متد UnLock
این متد، متد Lock را خنثی می كند و اجازه تغییر دادن متغیرهای Application را به بقیه كاربران می دهد.

visits")=Application("visits")+1
Application.Unlock
%>
This page has been visited
<%=Application("visits")%> times!

در مثال بالا از متد Lock برای جلوگیری از دسترسی بیش از یك كاربر به متغیرها استفاده شده است و متد UnLock كه در واقع پایان كار متد Lock است و در آخر كد آمده است به كاربر بعدی اجازه اضافه كردن یك واحد به متغیر را می دهد.

رویداد Application_OnStart
قبل از اینكه اولین جلسه كاربری جدید تشكیل شود این رویداد رخ می دهد (وقتی كه شئ Application اولین مراجعه را دارد ) توجه كنید كه جای این رویداد داخل فایل Global.asa است.
نكته: مراجعه به اشیاء Request , Session و یا Response در این رویداد باعث بروز خطا در اسكریپت می شود.

رویداد Application_OnEnd
این رویداد هنگامی كه یك برنامه ASP بكار خود پایان می دهد و یا هنگامی كه سرور به حالت Stop می رود رخ می دهد. جای قرار دادن این رویداد نیز داخل فایل Global.asa است.
نكته: متد MapPath از شئ Server نمی تواند در این رویداد استفاده شود.

قاعده تركیبی دو رویداد فوق در فایل Global.asa :

vbscript" runat="server">
Sub Application_OnStart
. . . 
End Sub
Sub Application_OnEnd
. . . 
End Sub

چهارشنبه 12/3/1389 - 11:10 - 0 تشکر 203508

ارتباط ASP با بانكهای اطلاعاتی

ازآنجا كه برقراری ارتباط با بانكهای اطلاعاتی یكی از مباحث مهم و پركاربرد در ASP است، در این مقاله سعی شده است با معرفی SQL و ADO، نحوه برقراری ارتباط ASP با بانكهای اطلاعاتی بطور خلاصه شرح داده شود.

SQL یك زبان استاندارد ANSI برای دستیابی به یك بانك اطلاعاتی و همچنین پرس و جو از بانك اطلاعاتی است. زبان SQL با برنامه های بانك اطلاعاتی مانند: Access, Oracle, MS SQL Server, DB2, Informix & ... كار می كند. چون SQL زبان استاندارد بانكهای اطلاعاتی است برای دستیابی به بانكهای اطلاعاتی از این زبان استفاده می شود.

دستورات زیر برای پرس و جو از بانكهای اطلاعاتی در SQL بكار می رود:

Select : داده ها را از بانك اطلاعاتی فراخوانی میكند.
Insert : داده ها را به بانك اطلاعاتی اضافه می كنند .
Update : داده ها را در بانك اطلاعاتی تغییر می دهند و به روز می كنند. 
Delete : داده ها را از داخل بانك اطلاعاتی پاك می كنند.

در ASP برای ارتباط با بانك های اطلاعاتی از ADO استفاده می شود و ADO برای پرس و جو از بانك اطلاعاتی از زبان استاندارد SQL استفاده می كند. یعنی برای ارتباط با بانكهای اطلاعاتی از داخل صفحات ASP باید هم SQL و هم ADO را فرا بگیرید زیرا از هر دوی آنها به طور مشترك در ASP استفاده می شود.

ADO یك زبان نیست بلكه یك تكنولوژی است كه توسط میكروسافت برای دسترسی به بانكهای اطلاعاتی از داخل صفحات وب ساخته شده است كه به همراه IIS در ویندوز نصب می شود. برای برقراری ارتباط با بانك های اطلاعاتی بوسیله ADO دو راه وجود دارد.

۱- ارتباط DSN_LESS
این نحوه ارتباط به این صورت است كه بعد از ساختن یك شئ Connection و مشخص كردن درایور بانك اطلاعاتی، مسیر فایل بانك اطلاعاتی را مشخص می كنیم و بدین صورت بانك اطلاعاتی را از داخل صفحه وب معرفی می كنیم. در مثال زیر، یك بانك اطلاعاتی را از درایو C باز كرده ایم:

ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/webdata/northwind.mdb"
%>

۲- ارتباط ODBC
نحوه برقراری ارتباط ODBC با یك بانك اطلاعاتی MS Access :
آیكون ODBC را از داخل پنجره ControlPanel انتخاب كنید و روی قسمت DSN System كلیك كنید، دكمه ADD را برای ساختن یك ارتباط جدید كلیك كنید. سپس Microsoft Access Driver را انتخاب کزده و روی Finish كلیك كنید. در صفحه بعد روی دكمه Select كلیك كنید و مسیر فایل بانك اطلاعاتی را مشخص نمائید. سپس در فیلد Name نام بانك اطلاعاتی خود را وارد نمایید و OK را فشار دهید.

تا این مرحله شما یك ارتباط ODBC را برای یك بانك اطلاعاتی ساخته اید حال برای فراخوانی این بانك از داخل صفحه ASP كد زیر را داخل صفحه ASP بنویسید:

ADODB.Connection") 
conn.Open "northwind"
%>

در روش اول برای برقراری ارتباط نیاز به DSN System در ODBC نداریم و تمام اعمال مربوط به ارتباط در داخل صفحه ASP انجام می شود لذا این روش هنگامی مفید است كه میزبان شما یك سرور خارجی باشد و یا اینكه شما به میزبان سایت خود دسترسی فیزیكی نداشته باشید. اما اگر به سرور میزبان سایت خود دسترسی دارید می توانید از روش دوم استفاده كنید. البته در این حالت از روش اول هم می توانید استفاده كنید. اما پیشنهاد می شود كه در هر حالت شما از روش اول یعنی DSN_LESS استفاده كنید زیرا در تمام حالات و وضعیت ها جواب می دهد و مشكلی پیش نخواهد آمد.

چهارشنبه 12/3/1389 - 11:11 - 0 تشکر 203509

ایجاد شمارنده برای كاربران فعال در یك صفحه

در این مقاله سعی داریم یك شمارنده برای شمارش تعداد كاربرانی كه در یك لحظه در یك صفحه فعال هستند درست كنیم. فایل global.asa برای یك برنامه اختیاری است كه میتواند شامل معرفی كردن اشیا، متغیرها و متدهایی باشد كه می توانند از هر صفحه در ASP دسترس پذیر باشند. نكته مورد توجه در مورد این فایل این است كه حتما باید این فایل در ریشه یك برنامه ASP ذخیره شود و هر بار كه این فایل تغییر می كند سرور به راه اندازی مجدد برای اعمال تنظیمات این فایل نیاز دارد.

در فایل global.asa چهار رویداد استاندارد وجود دارد كه عبارتند از :

application_onstart : این رویداد زمانی كه اولین كاربر وارد اولین صفحه از سایت شود رخ می دهد. همچنین هنگامی كه سرور reboot شود نیز این رویداد رخ می دهد.
application_onend : زمانی كه آخرین كاربر از سایت خارج شد و یا به عبارتی هیچ كاربر فعالی در سایت وجود نداشت این رویداد رخ می دهد.
session_onstart : با ورود هر كاربر به یكی از صفحات ASP این رویداد رخ می دهد.
session_onend : با خروج كاربر از صفحه ASP و اتمام یك جلسه كاربری این رویداد رخ می دهد.

یك جلسه كاربری هنگامی كه كاربر دیگر صفحه ای را درخواست نكند و یا مرورگر خود را ببندد و یا به سایت دیگری برود تمام می شود.

بعد از آشنایی با این فایل می خواهیم بوسیله آن یك شمارنده برای یك صفحه بسازیم. یك فایل بنام global.asa در ریشه درست می كنیم و كد زیر را داخل آن می نویسیم.

در فایلی كه بالا ساختیم ابتدا مقدار متغیر visitors را صفر قرار دادیم. سپس بوسیله رویداد session_onestart با ورود هر كاربر به صفحه یك واحد به متغیر visitors اضافه كردیم و در پایان نیز بوسیله رویداد session_onend با خروج هر كاربر یك واحد از متغیرمان كم كردیم. متد lock برای application برای آن است كه از تغییر دادن متغیرها بوسیله سایر كاربران جلوگیری شود. بعد از این یك فایل با نام visitor.asp بسازید و كد زیر را در آن تایپ كنید.





There are <%response.write(Application("visitors"))%>
online now!


در این كد نیز بوسیله متد write از شی response مقدار متغیر visitor را روی مرورگر نمایش می دهیم.

برو به انجمن
انجمن فعال در هفته گذشته
مدیر فعال در هفته گذشته
آخرین مطالب
  • آلبوم تصاویر بازدید از کلیسای جلفای...
    آلبوم تصاویر بازدید اعضای انجمن نصف جهان از کلیسای جلفای اصفهان.
  • بازدید از زیباترین کلیسای جلفای اصفهان
    جمعی از کاربران انجمن نصف جهان، در روز 27 مردادماه با همکاری دفتر تبیان اصفهان، بازدیدی را از کلیسای وانک، به عمل آورده‌اند. این کلیسا، یکی از کلیساهای تاریخی اصفهان به شمار می‌رود.
  • اعضای انجمن در خانه شهید بهشتی
    خانه پدری آیت الله دکتر بهشتی در اصفهان، امروزه به نام موزه و خانه فرهنگ شهید نام‌گذاری شده است. اعضای انجمن نصف جهان، در بازدید دیگر خود، قدم به خانه شهید بهشتی گذاشته‌اند.
  • اطلاعیه برندگان جشنواره انجمن‌ها
    پس از دو ماه رقابت فشرده بین کاربران فعال انجمن‌ها، جشنواره تابستان 92 با برگزاری 5 مسابقه متنوع در تاریخ 15 مهرماه به پایان رسید و هم‌اینک، زمان اعلام برندگان نهایی این مسابقات فرارسیده است.
  • نصف جهانی‌ها در مقبره علامه مجلسی
    اعضای انجمن نصف جهان، در یك گردهمایی دیگر، از آرامگاه علامه مجلسی و میدان احیا شده‌ی امام علی (ع) اصفهان، بازدیدی را به عمل آوردند.