2012-04-16 3 views
13

हम एक नया फॉर्म लिखने की प्रक्रिया में हैं, जिसमें हमारे फ्रंट-एंड कोडर में बहुत सारे जावास्क्रिप्ट सत्यापन (तकनीकी रूप से, jQuery टूल्स सत्यापन) शामिल हैं।जावास्क्रिप्ट और PHP के बीच सत्यापन नियम साझा करने पर सिफारिशें?

मैं प्रक्रिया के PHP सर्वर-साइड भाग लिख रहा हूं, और निश्चित रूप से, मेरा स्वयं का कोड प्राप्त डेटा का अपना सत्यापन करेगा।

सत्यापन नियमों के दो सेट बनाए रखने के बजाय - jQuery और PHP - क्या आपके पास सत्यापन नियमों की केंद्रीय सूची बनाने के तरीके के बारे में कोई सुझाव है - यानी फ़ील्ड एक्स आकार> 1 और < 10 होना चाहिए , आदि - तो मैं एक फ़ाइल या डेटाबेस तालिका में एक सत्यापन नियम बदल सकता हूं जो तब PHP और jQuery दोनों को पारित किया जाएगा?

उदाहरण के लिए, कि एक ही नियम मैं उपर्युक्त बदल "क्षेत्र एक्स आकार में होना चाहिए> 1 और < 10" "क्षेत्र एक्स होना चाहिए आकार> 3 और < 5" के लिए और सभी मुझे क्या करना होगा एक फ़ाइल को संपादित करना या डेटाबेस तालिका और PHP और jQuery दोनों ही उस डेटा को पुनर्प्राप्त और पार्स कर देंगे?

आपकी मदद के लिए अग्रिम धन्यवाद,

फिल

+0

आप किस प्रकार की साइट बनाई गई हैं, आपको क्यों लगता है कि आपको ऐसे उन्नत सत्यापन की आवश्यकता होगी, जो आप वास्तव में फ़ाइल या डेटाबेस का उपयोग करके नियमों को साझा नहीं कर सकते हैं क्योंकि jquery डेटाबेस से डेटा पढ़ नहीं सकता है, लेकिन आप वास्तव में करते हैं इस बिंदु को न देखें कि आप ऐसा क्यों करना चाहते हैं एक और विचार है कि मैं अनुशंसा कर सकता हूं कि सत्यापन नियमों को संग्रहीत करने के लिए xml का उपयोग करना है –

+0

यह एक और क्षेत्र है जहां नोडजेएस वास्तव में चमकता है। – AlienWebguy

+0

नियमों वाले डेटाबेस के साथ सरल सत्यापन नियमों (ईमेल, अधिकतम लंबाई, आवश्यक इत्यादि) को सारण करना काफी सरल है, लेकिन उन्नत सत्यापन, जैसे किसी अन्य फ़ील्ड की सामग्री, वर्तमान उपयोगकर्ता या सामग्री के आधार पर सत्यापन तर्क को बदलना सिस्टम में अन्य वस्तुओं, काफी जटिल है। जब तक आपके पास बहुत अधिक प्रमाणीकरण तर्क नहीं है, तो मैं केवल PHP और jQuery दोनों में तर्क को मैन्युअल रूप से कोडित करता हूं। –

उत्तर

4

इन पंक्तियों के साथ कुछ शायद अच्छा होगा:

<?php 
$validation = Array(
    "field1" => Array(// "field1" is the name of the input field 
     "required" => true, // or false 
     "minlength" => 5, // use 0 for no minimum 
     "maxlength" => 10, // use 9999 (or other high number) for no maximum 
     "regex" => "^[a-zA-Z0-9]+$" // use empty string for no regex 
    ), 
    "field2" => ....... 
    .... 
); 
if($_POST) { 
    foreach($validation as $k=>$v) { 
     if(!isset($_POST[$k])) { 
      if($v['required']) die("Field ".$k." is required"); 
     } 
     else { 
      $l = strlen($_POST[$k]); 
      if($l < $v['minlength']) die("Field ".$k." too short"); 
      if($l > $v['maxlength']) die("Field ".$k." too long"); 
      if(!preg_match("(".$v['regex'].")",$_POST[$k])) die("Field ".$k." incorrect format"); 
     } 
    } 
    // all ok! 
} 
?> 
<script type="text/javascript"> 
    (function(rules) { 
     var die = function(str) {alert(str); return false;}; 
     document.getElementById('myForm').onsubmit = function() { 
      var elms = this.elements, i, it, r, s; 
      for(i in rules) { 
       r = rules[i]; 
       it = elms.namedItem(i); 
       if(typeof it == "undefined") { 
        if(r.required) return die("Field "+i+" is required"); 
       } 
       else { 
        s = it.length; 
        if(s < r.minlength) return die("Field "+i+" too short"); 
        if(s > r.maxlength) return die("Field "+i+" too short"); 
        if(!s.match(new RegExp(r.regex))) return die("Field "+i+" incorrect format"); 
       } 
      } 
      return true; 
     }; 
    })(<?=json_encode($validation)?>); 
</script> 

आप देख सकते हैं, सामान्य विचार का एक सेट को परिभाषित करने के लिए है नियम, तो जादू json_encode($validation) में होता है - यह नियमों को जावास्क्रिप्ट पर्यावरण में पास करता है। आपको अभी भी PHP और जेएस में चलाने के लिए सत्यापन कोड को डुप्लिकेट करना होगा, लेकिन कम से कम अब आप कोड को दो स्थानों पर बदलने के बिना और नियम जोड़ सकते हैं। उम्मीद है की यह मदद करेगा!

+0

धन्यवाद, मुझे यह पसंद है - मैं यह कोशिश करने जा रहा हूं :) – PhilGA

3

Nette framework करता है: http://doc.nette.org/en/forms

पूरे फार्म और सत्यापन नियमों एक PHP फ़ाइल में परिभाषित कर रहे हैं। फ्रेमवर्क तब HTML कोड को जावास्क्रिप्ट सत्यापन के साथ उत्पन्न करता है और सबमिट करने के बाद यह सर्वर-साइड सत्यापन करता है।

आप ढांचे के फॉर्म भाग को अलग से भी उपयोग कर सकते हैं।

+0

हाय @न्ड्राटा, नेटटे ज़ेंड के समान दिखता है, जो हम बैक एंड पर उपयोग कर रहे हैं। लेकिन हम ज़ेंड फॉर्म का उपयोग करने से परहेज कर रहे हैं क्योंकि यह लेआउट के लिए दर्द है, और हमारे पास एक बहुत ही जटिल लेआउट है। – PhilGA

+0

@ फिलहाग: नेटटे ज़ेंड की तुलना में थोड़ा अधिक हल्का वजन है, इसलिए शायद कुछ फिटिंग टूल (मैं शायद लिखता हूं, बुद्धिमानी से जांचता हूं, अपना खुद का रोलिंग एक विकल्प हो सकता है, लेकिन एक फिटिंग टूल खुद को रोल करने से बेहतर है)। – hakre

+1

@ फिलहाग यह लेआउट के साथ आपकी मदद कर सकता है: http://doc.nette.org/en/forms#toc-manual-rendering मूल रूप से, आप नियंत्रण के आसपास HTML लिखते हैं और नेटटे केवल (और

) उत्पन्न करता है । –

संबंधित मुद्दे