d مدونة الفريق – الصفحة 28 – مدونة فريق شركة المطورون بلس

Blog

  • CheckBoxList Validation


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

    عندما تريد إجراء تحقق من أداة CheckBoxList فإن الأمر لن ينجح معاك بالشكل المطلوب
    ، والحل بسيط جدا : ألا وهو استخدام أداة خاصة لهذا الغرض . وقد قمت بإرفاقها لكم
    على هذا الرابط
    CheckBoxListValidator

    قم باستدعاء الأداة في قائمة الأدوات ، ثم  اسحب الأداة واستخدمها كأي أداة
    تحقق عادية
    بالتوفيق للجميع

  • حفظ WindowsForm  في صورة وطباعتها

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

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

    بداية الأمر، استخدمنا شيفرة طباعة الشاشة، ومن ثم قمنا باقتصاص حجم الForm منها في صورة كالتالي

    Code

    Dim ScreenSize As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height) ‘ تحديد أبعاد الشاشة
    Dim screenCut As New Bitmap(Width, Height) ‘ تحديد أبعاد الصورة حسب أبعاد الفورم
    Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(screenCut) 
    g.CopyFromScreen(New Point(Location.X, Location.Y), New Point(0, 0), ScreenSize) ‘ حفظ الشاشة وتخزينها حسب بداية الفورم
    screenCut.Save("C:\mainimg.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) ‘ حفظ الصورة

    الفكرة بسيطة وهي أن نقوم بطباعة كاملة للشاشة ، ثم نقوم باقتطاع صورة منها وتكون بداية هذه الصورة في نقطة بدء الForm وذلك عبر Location.X, Location.Y ومن ثم نحدد نقطة نهاية الصورة عبر طول وعرض النموذج الحالي، وأخيرا حفظ الصورة.
    تبقى قضية واحدة وهي تحديد أبعاد الصورة حسب أبعاد الطباعة المرادة، وذلك للحصول على أفضل أداء، وهنالك عدة طرق لهذا الأمر وأبسطها كالتالي

    Code

    Dim source As Image = Bitmap.FromFile("C:\screenCut .jpg")
    Using dest As New Bitmap(source, (source.Width + source.Width), (source.Height + source.Height))
    dest.Save("c:\newimg.jpg")
    End Using

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

    وفق الله الجميع

  • إضافة جافاسكريبت في حدث النقر على وسم كائن

    العنوان يبدو ملخبط نوعا ما، ولكن للتوضيح، لديك  كائن فلاش embed أو غيره، وتريد
    إضافة تعليمة جافا سكريبت في حدث النقر على الفلاش، مثلا فتح نافذة جديدة، هنالك خدعة
    بسيطة لعمل هذا الأمر وهي كالتالي:
    1- بعض المتصفحات لن تدعم الحدث onclick لذلك سنستخدم الحدث : onmousedown
    2- يجب وضع الخاصية wmode إلى transparent والخاصية allowscriptaccess إلى true

    وهذا مثال على ذلك

        <div onmousedown="javascript:window.open('http://www.tkfithat.com/Details.aspx?depid=166');"
    style="text-align: center; vertical-align: middle"> <embed wmode="transparent" allowfullscreen="false"
    allowscriptaccess="always" height="136" type="application/x-shockwave-flash"
    pluginspage="http://www.macromedia.com/go/getflashplayer" width="300"
    src="http://www.3orod.com/ImagesStore/AdsMedia/201102161044541826936843.swf"
    quality="high" wmode="transparent" />
    </div>

     

    وهنا قمت بجعل الكود يفتح صفحة جديدة عند النقر على كائن الفلاش، وهذا الفكرة الأساسية
    ، تستطيع الاستزادة مثلا بتخصيص نفس هذه الخصائص للوسم <object> هنا وضعت الوسم
    <embed> على سبيل المثال.

  • أفضل طريقة لتعلم لغة برمجة واحترافها

    أتعرف …أعتقد أنه عند قراءتك للعنوان …. للوهلة الأولى سيتبدى في ذهنك السؤال التالي: هل فعلا هناك طريقة جيدة ومثالية لتعلم لغة برمجة وأيضا احترافها؟؟

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

    ولكن قبل أن أبدأ….أنت تعرف أن كل أمر نراه ولا نعرفه نجده صعبا . وأحيانا نقنع أنفسنا باستحالة تعلمه في يوم من الأيام. ولكن في حال تعلمناه…يصبح سهلا جدا بالنسبة لنا حتى أننا نستهين به أحيانا ولا نتذكر كيف أننا كنا نعتبره صعبا أو مستحيلا في يوم من الأيام.

    الآن أخبرني :

    إن كان لديك الرغبة في تعلم أمر معين في الحياة…مثل تعلم اللغة الإنجليزية أو قيادة السيارة أو تصليح الأجهزة الكهربائية وغيرها…ماذا تفعل ؟؟

    الجواب بسيط وأنت تعرفه جيدا …. ستخبرني بأنك ستقرأ كتبا عن الأمر الذي تريد تعلمه وبعدها ستحاول تطبيق ما قرأته لإتقانه يعني إن أردت تعلم اللغة الإنجليزية ستقوم بتعلم قواعد اللغة ومعانيها لكي تستطيع تكوين الجمل وبعد ذلك التحدث بها وبالاستمرار في ذلك ستحترف اللغة وستتكلم بها بطلاقة

    إذا…أنت تعرف الطريقة التي بها يمكنك تعلم لغة برمجة واحترافها….فتعلم لغة برمجة ستكون بنفس الطريقة التي تتعلم بها أي أمر آخر في حياتك.

    في البداية ستقوم بالبحث عن أفضل اللغات والتي تحمل الكثير من المزايا والإمكانيات الرائعة والتي ستلبي احتياجاتك في الحياة العملية. ولن أخبرك بها فيجب أن تقوم باكتشافها بنفسك لأنك في النهاية ستعتبرها وجهة نظر مني لا أكثر.أنت لديك عقل وتستطيع التفكير وبناء على قراءتك لمساوئ ومميزات كل لغة ستقرر أي لغة الأفضل لك .

    الآن لديك اللغة التي تريد تعلمها ولديك الرغبة القوية لذلك وأنا أؤكد على الرغبة كثيرا لأنه بدونها لن تكمل مشوارك في التعلم

    ستقوم بعد ذلك بقراءة كتب لتعلم قواعد اللغة ولا تقم بالقراءة كأنك تقرأ قصة أو مجلة للتسلية ولكن يجب عليك القراءة وتطبيق ما تقرأه بالموازنة فما نقرأه ننساه بسرعة ولكن ما نطبقه عمليا يظل محفورا في أذهاننا

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

    Dim x as integer

    ويتم كتابة نفس الأمر بلغة السي شارب بهذه الطريقة

    Int x;

    والأمر متشابه عند باقي لغات البرمجة وقس هذا الأمر على غيرها من الأوامر البرمجية..

    من هنا نستنتج أنك بتعلم لغة برمجة …تستطيع الانتقال بسهولة إلى أي لغة أخرى

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

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

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

    وأعلم أن من نجح قبلك ليس أفضل منك ولا تحاول مقارنة نفسك بمن هو أفضل منك ولكن قم بقياس مستواك منذ بداية تعلمك وحتى فترة معينة…إن وجدت فرقا وسيكون بالطبع للأحسن فأنت تسير في الطريق الصحيح وقم بالمداومة على ذلك لكي تتابع تقدمك المستمر لأن ذلك سيكسبك ثقة أكبر بنفسك وستكون أكثر حماسا وتأكد بأنك ستصبح أفضل بمن كان أفضل منك في يوم من الأيام

    وأروع أمر هو بدون أدنى شك رؤيتك لنجاحك بعد تعبك وجهدك الذي استمر وقتا طويلا…ستغمرك السعادة والفرح عند انتهاءك من برنامج قد أخذ منك وقتا وجهدا كبيرا

    ترى أنت تتساءل لماذا أتكلم بهذه الثقة الكبيرة وكأنني مررت بهذه التجربة…أقول لك نعم..

    أنا أتكلم من تجربتي الشخصية التي مررت بها …وإلى الآن أتعلم أمورا جديدة في حياتي…فنحن مهما تعلمنا ستظل أمورا كثيرة لا نعرفها وسنظل نتعلم إلى الأبد.

    ومن يريد التعلم يبدأ من اليوم ولا يؤجل ذلك للغد وتمنياتي بالتوفيق لكل من سيبدأ باكرا

     

  • Auto-Implemented Properties جديد في منصة الدوت نت 4.0

    استكمالا لسلسة مقالات الجديد في منصة دوت  نت 4.0 سنقوم اليوم بالتطرق لميزة Auto-Implemented Properties الجديدة في منصة الدوت نت 4.0.

    في الإصدارات السابقة من الدوت نت تطلب الأمر منك إذا أردت أن تعرف خاصية Property  أن تعرفها بالشكل العام كالتالي:

    Code

    Private _name As String = "developers.ps"
    Property Name As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    حيث يتوجب أن يكون متغير خاص يتم تخزين به البيانات للتغليف ومن ثم إنشاء جسم الخاصية عبر الدالتين Set , Get  ومن ثم كتابة اللزم بهما.
    غالبا ما نقوم بإنشاء خصائص كما بالمثال بدون الإضافة عليها أي شيفرات برمجية أخرى، لذلك قامت مايكروسوفت بتسهل الأمر وعمله كالتالي:
    Code

    Property Name As String = "developers.ps"
    Property Age  As Integer = 2
    Property Employees As New List(Of Person)(12)

    الذي حصل هنا هو أن الدوت نت قامت بإنشاء المتغير الخاص في الخلفية وهو يحمل نفس اسم الخاصية بالإضافة للشرطة السلفية ، وأيضا يحمل نفس النوع ، ودليل على كلامي قم بمحاولة تعريف متغير خاص يحمل نفس اسم الخاصية ونفس نوعها واسمه يبدأ بالشرطة السفلية،وستجد أن إشارة الخطأ ستظهر لك .
    بإمكانك أن تنشئ الخاصية ReadOnly أو WriteOnly بنفس الطريقة أيضا، ولو أردت أن تفصل في جسم الخاصية وتضيف ما تريد إضافته ما عليك إلا كتابة كلمة Get أو Set  في السطر التالي للخاصية وستجد أن الفيجوال ستوديو يكملها عنك.

    تسهيل جديد من مايكروسوفت على المطورين ، وخطوة جيدة من قبلهم

    وفق الله الجميع

  • احمي موقعك من تغرة XSS

    احمي موقعك من تغرة XSS

    رغم أن ثغرة XSS تعتبر ثغرة قديمة، إلا أنها قد شاعت في هذه الأيام XSS حتى أنها أصبحت كابوسا كبيرا لكثير من المواقع والبرمجيات الجاهزة كالمنتديات وما شابه، وهنا سأطرح الحلول المقترحة لهذه المشكلة في الدوت نت بإذن الله.
    بداية، ما سأقوم بعرضه يكفي فقط للدوت نت الإصدار 1.1 وما بعده مثل الإصدار 2.0 وأما بخصو ص الإصدار 1.0 فتوجد حلول أخرى لحل هذه الثغرة وهو ما لن أهتم به لأن من يستخدم الإصدارات القديمة كان الواجب عليه أن يواكب التحديثات.
    إن هذه المشكلة تظهر عند مناطق إرسال البيانات، فمثلا لدي صفحة بها صندوق نصي وأقوم عبرها بإرسال البيانات للخادم ، فقام شخص ما بكتابة الجملة التالية:

    Code

    <script>alert(‘some malicious code’);</script>

     

    وهذا وسم جافا سكريبت يظهر رسالة، وليست الخطورة في هذا الوسم ولكنها تكمن في إمكانية إرسال وسوم أخرى عديدة شأنها تغيير عمل الصفحة بالكامل.
    الحل يكمن في أن نقوم بمنع إرسال هذه الوسوم  للخادم ، وإذا كانت الصفحة تحتاج لإرسال قيمة بالرابط QueryString يجب فحصها في الصفحة التالية لها ( صفحة قراءة البيانات ).
    لتلافي منع إرسال وسوم خطيرة إلى يتوجب عليك أن تقوم بتفعيل فحص المدخلات عبر الخاصية ValidateRequest=”true”  في الصفحة في أول سطر بها.

    وهذه الخاصية جديدة في الإصدار 1.1 وما بعده وهدفها فحص مدخلات الصفحة المرسلة، فإذا وجد أن هنالك وسوم ممنوعة ، سوف يقوم الخادم برمي خطا من نوع HttpRequestValidationException وهو ما يمكنك أن تقوم بفحصه عبر الملف Global.asax في ححدث الخطأ ، وتقوم بإطهار رسالة أو صفحة خاصة له تخبره مثلا ، بأن هذا الأمر ممنوع ، أو عار عليه إذا رغبت بذلك .

    أو أن تقوم بتفعيلها  في ملف الإعدادات Web.Config  في وسم الصفحة validateRequest=”true”، مع العلم أن هذا هو القيمة الإفتراضية لهذه الخاصية هي true ، بمعنى إن لم تكن قد غيرتها فلا تقوم بفعل شيء.

    الأمر الآخر هو عند إرسالك لبيانات من صفحة إلى أخرى ، عليك أن تقوم بإستدعاء الدالة Server.HtmlEncode() عند الإرسال ، وعند استقبال البيانات عليك قراءتها عبر الدالة Server.HtmlDecode()، أو مثلا أن تستقبل البيانات من ويب سيرفس أو من قاعدة بيانات أخري، على سبيل المثال أنني مثلا أريد أن أرسل اسم المستخدم المكتوب في الصندوق النصي لصفحة أخرى كالتالي

    Code

    Response.Redirect(“login.aspx?username=” & Me.TextBox1.Text)

    فإنه يتوجب إضافة الدالة بالشكل التالي

    Code

    Response.Redirect(“login.aspx?username=” & Server.HtmlEncode(Me.TextBox1.Text))

    وعند قراءة البيانات في الصفحة الثانية أن تقرأ بالشكل التالي

    Code

    Dim uname As String = Server.HtmlDecode(Request.QueryString(“username”))

    أما بخصوص الإصدار 1.0 فإنه توجد بعض الحلول الفعالة مثل استخدم Reqular Expression  في فحص المدخلات أو القيم المرسلة ، أو بطريقة بسيطة وغير دقيقة استبدال الوسوم بالقيم المشابهة لها من ال HTML

    بالتوفيق للجميع

    (المزيد…)

  • كيفية ربط موقعك مع برنامج أو مع عدة مواقع

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

    ولكن …لعل البعض يتساءل ، ما الهدف من ربط الموقع بالبرنامج ؟!

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

     

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

    سيكون الحل كالتالي : سنقوم بعمل دالة عادية ولكن سنقوم بوضعها في منطقة خاصة وبمواصفة خاصة (Attribute) ، وسنقوم باستدعائها من البرنامج.

    سيتم إضافة جميع الدوال التي نحتاجها في ويب سيرفس (web service)  وبعدها نستدعيها في البرنامج ، وهذا الأمر يتم بالشكل التالي

    ، سنقوم بإضافة ويب سيرفس وذلك بالنقر بالزر الأيمن للماوس على اسم الموقع من قائمة.Solution Explorer ونختار add New item ومن ثم نختار web service

    وبعدها سنقوم بكتابة جميع الدوال التي سنحتاجها على أن يسبق كل دالة _<()WebMethod>  ولننظر إلى الدالة التالية على سبيل المثال  وهي لاسترجاع اسم  جهاز الحاسوب ونظام التشغيل المستخدم:_<()WebMethod>

    (المزيد…)

  • أدوات التحقق ( Validation Controls )

    من المميزات الرائعة التي قدمتها ASP.NET لمطوري المواقع
    هي أدوات التحقق

    لذلك دعنا نرى ما هي هذه الأدوات وما هي الفائدة منها ؟

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

    فالتحقق هي قواعد يتم تطبيقها على البيانات المدخلة من قبل المستخدم

     

    وقد قدمت لنا ال ASP.NET خمس أنواع
    من أدوات التحقق التي تتميز كل منها بوظيفة معينة تختلف عن غيرها والتي وفرت الوقت
    الكثير لمطوري المواقع فباستخدامها لا تحتاج إلى كتابة سطر برمجي واحد بعكس لغات الويب
    الأخرى المختلفة التي تطلب برمجة عمليات التحقق باختلاف أنواعها ووظائفها

    x
    وسنقوم باستعراض كل نوع على حدة بشكل مفصل وأول
    نوع فيها هو:

    • RequiredFieldValidator

    وهذه الأداة مهمتها التأكد من أن المستخدم قام بإدخال قيمة في المكان المراد أو لا

    ولتوضيح ذلك سنعطي مثالا

    وهو بعمل جدول من سطرين وعمودين ووضع مربع نص وزر وأداة التحقق RequiredFieldValidator
    بالشكل التالي مع إعطاء اسم الأداة التي سيتم إجراء التحقق عليه لخاصية
    ControlToValidate التابعة لأداة التحقق والتي ستكون هنا
    TextBox1 وأيضا إدخال النص الذي تريده في خاصية ErrorMessage
    وهي رسالة الخطأ التي تظهر للمستخدم في حال لم يدخل قيمة في مربع النص مع ترك خاصية
    Text فارغة  :

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

    وأريد أن أقوم بالتنبيه على أمر مهم ألا وهو التأكد من أن خاصية CausesValidation
    التابعة للزر تأخذ القيمة True وذلك لإنجاز عملية التحقق عند
    الضغط على الزر

    • النوع الثاني من أدوات التحقق وهو:
      CompareValidator

    وهذه الأداة مهمتها المقارنة بين قيمتين إما من خلال المقارنة بين قيمة مدخلة في
    مربع نص وقيمة مدخلة في مربع نص آخر أو بمقارنة قيمة مدخلة في مربع نص مع قيمة ثابتة

    وأيضا سنعطي مثالا كسابقتها لتوضيح الفكرة وطريقة استخدامها

    وهنا سنقوم بتوضيح الفكرة الأولى وهي بمقارنة قيمة مدخلة في مربع النص الأول مع قيمة
    مدخلة في مربع النص الثاني

    وسيكون ذلك بعمل جدول من 3 سطور وعمودين وإضافة مربعين نص وزر وأداة التحقق
    CompareValidator بالشكل التالي :

    ويلزمنا الاهتمام بالخصائص التالية التابعة لأداة التحقق :

    ControlToValidate: وتحتوي اسم الأداة التي سيتم التحقق من البيانات
    المدخلة به

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

    ErrorMessage: وتحتوي على رسالة الخطأ التي ستظهر للمستخدم في حال اختل
    شرط التحقق

    Operator: وهي لتحديد العملية التي على أساسها سيتم التحقق بين القيمتين
    إما بالتساوي أو غيرها

    Type: وهي لتحديد نوع البيانات المدخلة التي سيتم التحقق منها إما أعداد
    صحيحة أو نص أو غيرها

    ولتوضيح الفكرة الثانية وهي بمقارنة قيمة مدخلة في مربع نص مع قيمة ثابتة وذلك بإضافة
    مربع نص واحد وزر وأداة التحقق وسنهتم بنفس خصائص أداة التحقق التي تم ذكرها عند توضيح
    الفكرة الأولى مع فارق بسيط وهو أننا هنا لن نهتم بالخاصية ControlToCompare
    ولكن اهتمامنا سينصب على الخاصية ValueToCompare والتي من خلالها
    سيتم إدخال القيمة الثابتة بناء على نوع البيانات الذي قمت بتحديده في الخاصية
    Type

    بعدها قم بالتجربة والتنفيذ ورؤية النتائج بنفسك

    • النوع الثالث من أدوات التحقق هو :
      RangeValidator

    وهذه الأداة مهمتها التحقق من أن القيمة المدخلة واقعة تحت مدى معين

    لنعطي مثالا لتوضيح الفكرة : سنقوم بإضافة مربع نص وزر وأداة التحقق بالشكل التالي

    والاهتمام بالخصائص التالية لها وهي :

    ControlToValidate و ErrorMessage و
    Type: وتم شرحها سابقا ويلزمنا هنا أيضا خاصية
    MaximumValue وهي لتحديد القيمة القصوى التي لا يمكن أن يتعداها المستخدم
    عند إدخال قيمة معينة في مربع النص وخاصية MinimumValue وهي
    لتحديد القيمة الدنيا التي يجب أن يلتزم المستخدم بالبدء منها عند تحديده للقيمة المدخلة
    في مربع النص

    • النوع الرابع من أدوات التحقق هو:
      RegularExpressionValidator

    وهذه الأداة مهمتها التأكد من صحة صياغة أو شكل القيمة المدخلة يعني على سبيل المثال
    مربع النص الخاص بالبريد الإلكتروني ، فنحن نعلم أن البريد الإلكتروني يتبع صيغة ثابتة
    في الكتابة لا يمكن تغييرها ولمنع المستخدم من كتابة أي نص عشوائي في خانة البريد الإلكتروني
    والتزامه بالصيغة المعروفة له يتم استخدام أداة التحقق هذه ولتوضيح ذلك ، سنضع مربع
    نص وزر وأداة التحقق وتحديد الصيغة الثابتة التي سيتم التحقق من خلالها من الخاصية
    ValidationExpression بالإضافة إلى خاصية ControlToValidate
    و ErrorMessage والتي تم شرحها في أدوات التحقق السابقة

    • النوع الخامس والأخير من أدوات التحقق هو:
      CustomValidator

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

    في البداية أضف مربع نص وزر وأداة التحقق إلى صفحة الويب وبعدها في صفحة السورس أضف
    الكود التالي بين بداية ونهاية head tag


    <script
    language=JavaScript>


    function validateNumber(oSrc, args) {


    args.IsValid = (args.Value % 5 == 0);


    }


    </script>

    وبعدها نعطي اسم الدالة لخاصية ClientValidationFunction
    التابعة لأداة التحقق وبعدها تستطيع تنفيذ الأمر

    • وإذا كنت قد جربت جميع الأمثلة السابقة على
      نفس صفحة الويب ، فلابد أنك لاحظت أمرا غريبا ألا وهو في حال عدم إدخال قيمة معينة
      للأداة الخاص يإحدى أدوات التحقق الأربعة والتي تبدأ من الأداة الثانية فإن رسالة الخطأ
      الخاصة بأداة RequiredFieldValidator ستظهر والسبب أن تلك الأدوات
      لا تعمل مع القيم الفارغة فهي لا تعتبرها قيما ولحل هذا الأمر وجد ما يسمى
      بال validationGroup
      وهي تعني وضع كل عدة كونترولز مع بعضها في مجموعة ويكون بإعطاء نفس اسم المجموعة للخاصية
      validationGroup لكل الأداةز التي ستتبع تلك المجموعة
    • وأيضا لإظهار جميع رسائل الخطأ الموجودة في
      الصفحة في مكان واحد يتم استخدام الأداة validationSummery ويتم
      اعطاء قيمة لخاصية التكست التابعة للكونترولز التي سيجرى عليها عملية التحقق ولتكن
      * وبعدها قم بالتنفيذ بالشكل التالي :

    ويمكنك أيضا إظهار رسائل الخطأ في صندوق حوار وذلك بإعطاء الخاصية showSummery
    القيمة False بينما يتم إعطاء الخاصية showMessageBox
    القيمة True بالشكل التالي:

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

    (المزيد…)

  • هفوة برمجية غير متوقعة أدت إلى ضرر لموقع محترم !

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

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

     

    في إحدى موقع وفي إحدى جزئياته، يقوم المدير برفع صور ابتسامات ويحفظها على مسار في القرص، ويقوم باضافة إختصار لها في قاعدة البيانات

    وكان كود الرفع كالتالي

    If fileuploads(i).FileName.ToLower().EndsWith("png") Or fileuploads(i).FileName.ToLower().EndsWith("gif") Or fileuploads(i).FileName.ToLower().EndsWith("jpg") Or fileuploads(i).FileName.ToLower().EndsWith("jpeg") Then

    السطر هذا بشكل سريع يقوم بتحديد امتداد الملفات المرفوعة وقد حددتها بأربعة امتدادات فقط ( توجد طريقة أخرى لتحديد الامتدادات بشكل أسرع ) ، ومن ثم يتم حفظ هذه الملفات باسم فريد GUID

    يدخل المدير فيرفع الملفات والأمور تعمل بدون مشاكل

    قام مدير الموقع بتعيين مدير فرعي آخر وهو ما لم يكن بحسباني فقام هذا المدير برفع ملف اختراق وكان امتداده بالشكل التالي : xxxx.asp.png

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

    بدوري أخبرته أنني لم أتوقع أن يرفع المدير ملف ليضر نفسه، وهو ما أقوم به غالبا، بل اـتغاظى كثيرا في قضية التحقق في المدير لأنه ببساطة المدير، هل سيضر موقعه.

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

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

    1- ضرورة رفع ملفات الموقع Compiled وليست صفحات كود ، وبدون ذكر الأسباب سيكون الأمر أكثر أمانا.

    2- لا تؤمن لمدير الموقع مرة أخرى، بل يجب عمل التحقق كما لو أنه مستخدم خارجي .

    3- يجب تعطيل الصلاحيات أو الخيارات الإضافية التي لا تلزم ، فمثلا لو أنني قمت بتعطيل asp  أو php  على السيرفر لكان الأمر أفضل لوما استطاع تشغيل الملف، وفي حالة الموقع الذي قمت برفعه كان الأمر متعذر بخصوص تعطيل asp لأن برمجتي asp.net كانت كانت متصلة ببرمجة قديمة asp وهي رغبة العميل

    4- لا تفحص الامتداد من اسم اسم الملف بل افحص عبر contenttype

    أسأل الله التوفيق

  • ربط حساب التويتر بالدوت نت

    طرحت سابقا مقال بعنوان توتر برمجيا ،  وكان يعتمد على مكتبة توتايزر ، ولكن للأسف تويتر أصبح عتمد على مصاقدة معينة ، وهنا تغيرت المكتبة وتغير أسلوب عملها، وأصبح بنظري معقد، فقمت بترتيب مكتبة تستطيع عبرها التوترة من الدوت نت.
    يجب أولا بعد أن تقوم بإنشاء حساب على تويتر يجب ـأن أن تقوم بتفعيل حساب مطور على تويتر ، وذلك عبر هذا الرابط http://dev.twitter.com/apps

    بعد ذلك تلزمك القيم التالية:
    ConsumerKey
    ConsumerSecret
    Token
    TokenSecret

    بخصوص أخر قيمتين بعد إنشاء التطبيق ، اذهب إليه ولا تختار تعديل ، بل اضغط على اسم التطبيق واختار من اليسار My Access Token

     ثم تجد المفتاحين أمامك

    الآن يمكنك تحميل المكتبة التي قمت بترتبيها لتسهيل الأمور عليك :

    asp.net twitter تحميل المكتبة

    المكتبة بها 3 فئات ، تستطيع استخدام الفئتين الأساسيتين اللائي قمت بوراتثهم وتطوير فئة خاصة بي ، أو استخدام الفئة التي طورتها باسم TwitterOn
    تستطيع إرسال المفاتيح الأربعة عبر عبر المشيد Constructor أو إرسالها عبر الخصائص
    استدعي بعد ذلك

    Dim m As New TwitterLib.TwitterOn("token", "tokenSecret", "consumerKey", "consumerSecret") 
    m.Send("بسم الله الرحمن الرحيم - عالم التطوير ، خليل سليم")

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