2012-05-09 9 views
7

मेरे पास एक ऐसा फॉर्म है जो पूरी तरह से काम करता है जब तक कि मैंने फॉर्म को method="get" पर स्विच नहीं किया। अब मुझे TRUE का मूल्यांकन करने के लिए form_validation->run() नहीं मिल सकता है।पैरामीटर प्राप्त करते समय कोडिनेटर में एक फॉर्म फ़ील्ड को मैं कैसे सत्यापित करूं?

$this->form_validation->set_rules('states', 'states', 'required'); 

यह कैसे मैं यह जांच लें कि प्रपत्र मान्य है है:

echo form_open('', array('method' => 'get')); 

यह केवल टुकड़ा को मान्य करने की जरूरत है:

यह कैसे मैं फॉर्म को खोलने है

if($this->form_validation->run() == FALSE) 

क्या पैरामीटर प्राप्त करने के लिए मुझे कुछ और करने की ज़रूरत है? मुझे कॉन्फ़िगरेशन ($config['allow_get_array'] = TRUE;) में पैरामीटर चालू हैं। अगर मैं सत्यापन छोड़ देता हूं तो फॉर्म ठीक काम करता है, इसलिए मुझे पता है कि सीआई सिस्टम यूआरएल जुर्माना पढ़ रहा है।

उत्तर

5

कोडिनेटर फोरम पर यह पोस्ट बताता है कि form validation does not work with Get Parameters और यह कोडिनेटर का तरीका है।

+0

बस में कदम और प्राप्त अनुरोधों पर अपने खुद के सत्यापन करते हैं। डेटा आउटपुट के आधार पर एक्सएसएस को HTMLspecialchars (GET, ENT_QUOTES, 'एन्कोडिंग') के साथ निम्नतम स्तर पर ख्याल रखा जा सकता है। फॉर्म सत्यापन सिर्फ एक सहायक है। हाथ से पहले अपनी ऐप संरचना का काम करें, देखें कि सीआई मददगार/पुस्तकालयों के संबंध में क्या पेशकश कर सकता है और फिर अपना खुद का वर्कफ़्लो मोल्ड कर सकता है। – Philip

+0

FYI ... यदि कोड पैरामीटर पर फॉर्म सत्यापन चलाने वाले पृष्ठ के यूआरआई में जीईटी पैरामीटर हैं तो कोडनिर्देशक फॉर्म सत्यापन विफल हो जाएगा। –

1

आप Form_validation.php फ़ाइल पर देख सकते हैं, वे हर जगह वर्ग ;-(में $ _POST hardcoded है

तुम भी $ _GET समर्थन करना चाहते हैं, यह काफी आसान है (और गंदे Oooo), आप एक नया संपत्ति बना सकते हैं:

public function __construct($rules = array()) 
{ 
    $this->inputData = array_merge($_POST, $_GET); 
    ... 
} 

और इस वर्ग में $ _POST द्वारा $ this-> हर जगह inputData की जगह के बाद से कोई स्थिर तरीकों

मैं जानता हूँ कि यह विक्रेता फ़ाइलों को संपादित करने recommenced नहीं है, लेकिन। वास्तव में, आपको इसकी ज़रूरत है, इसे करें ;-)

3

बस जोड़ें:

$_POST['states'] = $this->input->get('states'); 
फ़ॉर्म सत्यापन में सत्यापित करें राज्यों क्षेत्र के लिए

बस से पहले

$this->form_validation->set_rules('states', 'states', 'required|trim'); 
+0

यह एक अच्छा कामकाज है! –

9

CodeIgniter 3 के लिए, आप set_data समारोह में सरणी पारित कर सकते हैं। उदाहरण के लिए:
$this->form_validation->set_data($this->input->get());

+0

मुझे नहीं लगता कि यह सच है, मैंने इसे स्वयं इस्तेमाल किया है। साथ ही, उन्होंने अब अपने दस्तावेज़ों को अपडेट किया है: https://www.codeigniter.com/userguide3/libraries/form_validation.html –

+0

धन्यवाद यह मेरे लिए काम करता है। http://www.codeigniter.com/userguide3/libraries/form_validation.html#validating-an-array-other-than-post –

0

बिल्कुल कुछ ऐसा करने की कोशिश कर रहा था लेकिन यह आपके कोड की संरचना के लिए उबलता है।

  1. सामान्य पोस्ट विधि के साथ अपना फॉर्म सबमिट करें। यह आपको सभी पोस्ट सत्यापन करने की अनुमति देगा।
  2. फिर '/' का उपयोग करके अपने नियंत्रक के अंदर या बाहर अपने सभी डेटा को एक अलग विधि में भेजने के लिए रीडायरेक्ट() का उपयोग करें।
  3. अंत में, सभी पैरामीटर प्राप्त करने वाली विधि डेटाबेस लेनदेन को संभालेगी और इसे दृश्य में प्रस्तुत करेगी।

उम्मीद है कि यह मदद करता है।

2

इनमें से कुछ पदों के बाद से कोडिनेटर बदल गया है। मुझे लगता है कि जीएक्स का जवाब सही है।

उपयोगकर्ता मैनुअल में निर्देश, विशेष रूप से सेक्शन Validating an Array (other than $POST), मेरे लिए बहुत अच्छा काम करता है (आज के रूप में) और यह बहुत आसान है।

अपने $ this-> form_validation-> set_rules लाइन से पहले, आपके द्वारा निर्दिष्ट सरणी मान्य करने की:

$data = array(
    'username' => 'johndoe', 
    'password' => 'mypassword', 
    'passconf' => 'mypassword'); 

$this->form_validation->set_data($data); 
संबंधित मुद्दे