الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

التحقق من صحة فورم قبل إرسالها أو إضافتها

مغلق
بدأه محمد القربي في 29 سبتمبر 2004 · 6 رد · 867 مشاهدة · في منتدى تصميم صفحات الويب
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

ضع ملف الجافاسكريبت الملحق (بعد فك الضغط طبعاً) في نفس الروت (الـ folder) حيث صفحة الفورم ثم ضع الآتي:

1- ستكون صيغة الفورم كالتالي:

<form onSubmit="return EW_checkMyForm(this);"  action="صفحة المعالجة" method="post">

2- قبل الفورم تماماً ضع الكود التالي:

<script language="JavaScript" src="ew.js"></script>
<script language="JavaScript">
<!-- start Javascript
function  EW_checkMyForm(EW_this) {

هنا سنضع المعالجات المختلفة المذكورة في الأسفل

return true;
}
// end JavaScript -->
</script>

3- المعالجات:

على اعتبار أن Type هو نوع الحقل: و هو إما Text أو Select

و FieldName هو اسم الحقل

[لذلك غيّر هذه الحقول بما يتلائم مع الفورم الخاص بك]

أولاً، حقل مطلوب

if  (!EW_hasValue(EW_this.FieldName, "Type" )) {
            if  (!EW_onError(EW_this, EW_this.FieldName, "Type", "رسالة الخطأ"))
                return false; 
        }

ثانياً، الحقل هو رقم و ليس أحرف عادية

if  (!EW_checkinteger(EW_this.FieldName.value)) {
        if  (!EW_onError(EW_this, EW_this.FieldName, "Type", "رسالة الخطأ"))
            return false; 
        }

ثالثاً، أصغر وأعلى رقم يمكن وضعه في الحقل (مدى)

if (EW_this.FieldName && !EW_checkrange(EW_this.FieldName.value, أصغرقيمة, أعلىقيمة)) {
        if (!EW_onError(EW_this, EW_this.FieldName, "Type", "رسالة الخطأ"))
            return false; 
        }

رابعاً، فحص الإيميل (سيفحص وجود الـ @ و الـ . )

if  (!EW_checkemail(EW_this.FieldName.value)) {
        if  (!EW_onError(EW_this, EW_this.FieldName, "Type", "رسالة الخطأ"))
            return false; 
        }

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

ew.zip

تم تعديل هذه المشاركة بواسطة محمد القربي في 29 سبتمبر 2004 في 11:18

Mohamad Al-Karbi

www.mkarbi.me

#2

شكرا لك يا اخ محمد على هذا الجهد

#3

شكرا اخ محمد و اكرر يجب ألا يتم الإعتماد 100% على اكواد الجافا فقط...

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

و الله اعلم

#4

يا أخ محمد لقد تم تنفيذ الكود كما شرحته بنجاح حيث أني اذا تركت حقل فارغ تظهر رساله تخبرني بذلك

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

وشكراً

#5

مشكور أخي محمد القربي وما قصرت

وأحب أن أشاركك إذا سمحت بوضع أحد التكنيكات التي دائما ما أستخدمها لتحقيق ذلك الغرض

وهذا المثال يوضح ما أريده

<script>
 var IsValidePage = true;
 /**
  * validateForm
  * @param formControl Form Control
  * @return boolean
  */
 function validateForm(formControl) {
     IsValidePage = true;
     checkControls(formControl.childNodes);

     return IsValidePage;
 }

 /**
  * checkControls
  */
 function checkControls(childNodes) {
    for( var i=0; i<childNodes.length; i++ ) {
        var elem = childNodes;

        if( elem.tagName == "SPAN" ) {
             if( elem.validateControl ) {
                    var ret = eval( elem.funcName + "(\"" + elem.validateControl + "\");" );
                    elem.innerHTML = "";
                    if( !ret ) {
                         elem.innerHTML = elem.errorMessage;
                         IsValidePage = false;
                    }
             }
        }

         checkControls(childNodes.childNodes);
    }

 }

 /**
  * validateEmpty
  * @param elemetID string
  * @return boolean
  */
 function validateEmpty(elementID) {
    var element = document.getElementById(elementID);

    switch( element.type ) {
       case "text" :
       case "password" :
         if( element.value.length == 0 ) {
             return false;
          }
          break;
       case "select-one" :
         if( element.length == 0 || element.selectedIndex == -1 ) {
             return false;
          }
           break;
    }
    
    return true;
 }

 /**
  * customValidatePassword
  * @param elemetID string
  * @return boolean
  */
 function customValidatePassword(elementID) {
    var element = document.getElementById(elementID);

    if( element.value.length < 6 ) {
        return false;
    }

    return true;
 }

</script>

<style>
 .errorMsg { color:red; }
</style>


<form onsubmit="return validateForm(this)">
 <table>
  <tr>
    <td> name 
    <td> <input type=text name=username id=username>
    <td> <span class="errorMsg" errorMessage="please enter your name" validateControl="username" funcName="validateEmpty"></span>
  </tr>

  <tr>
    <td> last name 
    <td> <input type=text name=lastname id=lastname>
    <td> <span class="errorMsg" errorMessage="please enter your last name" validateControl="lastname" funcName="validateEmpty"></span>
  </tr>

  <tr>
    <td> country
    <td> <select name=country id=country size=4><option>12<option>22</select>
    <td> <span class="errorMsg" errorMessage="please select atleast one country" validateControl="country" funcName="validateEmpty"></span>
  </tr>

  <tr>
    <td> password
    <td> <input type=password name=pwd id=pwd>
    <td> <span class="errorMsg" errorMessage="please enter the password" errorLabelControl="pwd" validateControl="pwd" funcName="validateEmpty"></span>
         <br><span class="errorMsg" errorMessage="password must be more than 6 characters" errorLabelControl="pwd" validateControl="pwd" funcName="customValidatePassword"></span>
  </tr>

  <tr>
    <td colspan=3> <input type=submit>
  </tr>
 </table>
</form>

رجاء التركيز بهذا الكود لانه ربما يكون متقدم شويه لكنه إن شاء الله يكون مفيد للجميع وبالتوفيق

29_5.gif

سورة العنكبوت

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

مشروع Arabic PHP.NET

حلم طالما كان يراودني حتي قهرته بحمد الله ليكون حقيقة

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

سلسلة أنماط التصاميم البرمجية Desgin Patterns

سلسلة أنماط التصاميم البرمجية Desgin Patterns | كتيب هذه الدروس (إعداد أحمد غريب)

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

كنترول ASP.NET DataGrid CheckBoxColumn

كنترول ProgressBar

كنترول UltraPanel

مشروع الكنترول الأنيق (إهداء للفريق العربي)

الورش الإلكترونية IT Workshops

تعقب الأخطاء error tracing

كنترول ColorPicker لمطوري الويب

RichTextBox Control لمطوري ال ASP.Net

حمل كتاب جافا سكربت عربي

#6
اقتباس
يجب ألا يتم الإعتماد 100% على اكواد الجافا فقط... فلربما يحدث خطأ أثناء تحميل الصفحة و تتوقف الأكواد عن العمل و كلامى هذا نتاج تجربة شخصية

بكل تأكيد أوافقك الرأي أخي إبراهيم. لكني شخصياً أجد الجافاسكريبت سهلة و أسرع و يمكن تحقيق الفحص قبل إدخال الفورم (وبالتالي عدم ضياع البيانات في حال لم يخزن في الذاكرة التلقائية)، في حين أن طرق أخرى مثل الـ ASP ستدخل الفورم أولاً ثم سيتحقق... و كلامي لا ينفي العيب الذي ذكرته أخي.. و لكن آمل أن تنصيب الأمور بشكل صحيح منذ البداية ستقلل من نسبة الخطأ و خاصة أن معظم المتصفحات تدعم جافاسكريبت و بشرط أن تمتاز هذه الصفحة بالسرعة في التحميل...

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

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

اقتباس
وأحب أن أشاركك إذا سمحت بوضع أحد التكنيكات التي دائما ما أستخدمها لتحقيق ذلك الغرض

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

جزاكم الله خيراً

Mohamad Al-Karbi

www.mkarbi.me

#7

لتعميم الفائدة، يوجد موضوع مشابه هنا:

/index.php?showtopic=49646

Mohamad Al-Karbi

www.mkarbi.me

هذا الموضوع مغلق.

مواضيع مشابهة