2010-03-14 19 views
9

में फॉर्म ड्रॉपडाउन को मान्य करना मैं अपने फॉर्म बनाने के लिए कोडइग्निटर के फॉर्म सहायक और फॉर्म सत्यापन पुस्तकालय का उपयोग कर रहा हूं। मुझे ड्रॉपडाउन 'चिपचिपा' बनाने में उचित समस्या है और उचित सत्यापन नियम भी ढूंढ रहे हैं।कोडइग्निटर

यह मैं कैसे drodown पॉप्युलेट कर रहा हूँ है:

foreach($events as $event){ 
$options[$event->event_title] = $event->event_title; 
} 
$firstItem = '<option>Please select one...</option>'; 
echo form_dropdown('events', $options, '', $firstItem); 

यह डेटाबेस में संग्रहीत की घटनाओं से विकल्प बनाने जा रहा है। फॉर्म ठीक दिखता है और सभी क्षेत्रों को सही ढंग से पॉप्युलेट कर रहा है।

हर कोई, जब मैं फॉर्म जमा करने के लिए आता हूं, तो ड्रॉपडाउन चयनित मूल्य पर नहीं हो रहा है? साथ ही, मुझे इसे कैसे सत्यापित करना चाहिए, मैं इसे आवश्यक बनाना चाहता हूं लेकिन मैं यह भी सुनिश्चित करना चाहता हूं कि मैं ड्रॉपडाउन में पहले विकल्प को छोड़कर 'कृपया एक चुनें ...'

अग्रिम धन्यवाद।

चीयर्स, Gaz

उत्तर

8

आप एक दृश्य में इस कर रहे हैं? मैं तुम्हें मैं इस संभाल है दिखाता हूँ, लेकिन यह सब एक नियंत्रक में क्या होता है:

// first, we can set a validation rule for the input 'country' (our dropdown), in this case it is required, and must be a natural number. You can look up more rules in the CI user guide, and you can write your own functions as well and add them to the 3rd parameter here. I believe some native PHP functions can be used as well. 
$this->form_validation->set_rules('country', 'Country', 'required|is_natural'); 

// the form is not valid! we'll enter this block whenever the form validation rules above are not met, as well as when first going to this controller-action. 
if ($this->form_validation->run() == FALSE) { 
    // buid your form, there's some CI functions to help with this that I'm using 
    $my_form = form_open('user/edit', 'class="superform"') 
     . form_fieldset() 
     . '<ol>' 
     . '<li>' 
     . form_label('Country<br/>', 'country') 
     // so here is the dropdown, matching the name given to the validation rule we've set, the second parameter takes an array, which I am grabbing from a model, the last parameter is the 'selected; value, which I am grabbing from some variable, if it's not present the first item in the dropdown will obviously be selected 
     . form_dropdown('country', $this->Country_model->get_countries_dropdown(), $user->country) 
. form_error('country', ' <em>', '</em>' 
     . form_submit('mysubmit', 'Save', 'class="button"') 
     . '</li>' 
     . '</ol>' 
     . form_fieldset_close() 
     . form_close() 
    ); 
    // sending the form variable to my view, where i will simply <?=$my_form?> it 
    $this->load->view('user_edit', $my_form); 
} else { 
    // form has validated! do something! 
} 

form_dropdown() फ़ंक्शन एक सरणी है कि ऐसा सेटअप लेता है: $ कुंजी => $ मूल्य कहाँ में महत्वपूर्ण मेरा मामला एक देश आईडी है, और मूल्य देश का नाम है। मेरे पास मेरी देश सरणी की शुरुआत में जोड़ी '0' => 'नहीं' है, इसलिए उपयोगकर्ता एक को नहीं चुन सकता है। अगर मैं इसे अपनी स्थिति की तरह बनाना चाहता था, तो मैं इसे '-1' => 'कृपया चुनें ...' पर सेट कर सकता हूं और यह मान्य नहीं होगा, क्योंकि -1 प्राकृतिक संख्या नहीं है।

आशा है कि मेरी रैंपिंग मदद करेगी!

संपादित करें:

ठीक है, तो इससे पहले कि आप form_dropdown() के साथ लटकती बनाने के लिए, आप क्या करना चाहता हूँ पोस्ट सरणी से आने से एक चयनित मूल्य के लिए जाँच है।

सीआई के मामले में, आप, समारोह set_value ($ इनपुट) का उपयोग कर सकते तो मेरे उदाहरण के रूप में मैं की तरह कुछ कर सकता:

$selected = (!empty(set_value('country'))) ? set_value($country) : ''; 

form_dropdown('country', $this->Country_model->get_countries_dropdown(), $selected) 

तो अब लटकती के चयनित मूल्य निर्धारित किया जाएगा अंतिम पोस्ट पर क्या चुना गया था। यह सुनिश्चित करने के लिए कि आप मान्य हैं, आप उस मान को देखना चाहेंगे। यदि कुछ भी नहीं चुना गया था, तो आप वर्तमान में डेटाबेस में मौजूद मान, या आपके द्वारा चुने गए डिफ़ॉल्ट मान जैसे कुछ के रूप में $ 100 सेट कर सकते हैं।

+0

बहुत बढ़िया रिटर्न - कि ठीक काम किया आपको लगता है कि ऐसा करने का एक बेहतर तरीका होगा हालांकि? इसके अलावा, कोई विचार है कि आप ड्रॉपडाउन 'चिपचिपा' कैसे बनाते हैं? – Gaz

+0

क्या आपका मतलब है, अगर फ़ॉर्म सबमिट किया गया था लेकिन कुछ और मान्य नहीं हुआ था, और आप ड्रॉपडाउन को वही चयनित मान रखना चाहते हैं? –

+0

ये, मेरा मतलब यही है। पुन: सत्यापन - सीआई में बुनियादी इनपुट सत्यापन के लिए अच्छा प्रलेखन प्रतीत होता है लेकिन ड्रॉपडाउन के लिए इतना कुछ नहीं है। साथ ही, मैंने सोचा होगा कि डेटाबेस मानों से पॉप्युलेट किए गए ड्रॉपडाउन का एक उच्च प्रतिशत होगा और इसलिए set_select() इसके लिए पूरा करेगा, ऐसा नहीं लगता है? – Gaz

4

आप में लाइन:

echo form_dropdown('events', $options, '', $firstItem); 

बस इसे बनाने:

echo form_dropdown('events', $options, set_value('events'), $firstItem); 
+2

महत्वपूर्ण: फॉर्म प्रमाणीकरण लाइब्रेरी का उपयोग होने पर set_value() के लिए काम करने के लिए, फ़ील्ड (इस उदाहरण में 'ईवेंट') सत्यापन नियमों का हिस्सा होना चाहिए। –

4

व्यक्तिगत रूप से, मैं वास्तव में नियंत्रक में प्रस्तुति दृश्य में मेरी फार्म के निर्माण के बजाय मिश्रण की तरह। लेकिन यह महज मेरी राय है। मैं समझता हूं कि डेटा को प्री-लोड करना है यदि यह एक बड़ी सूची है लेकिन मुझे नहीं लगता कि आपको वास्तव में ड्रॉप डाउन सूची के लिए पूरे फॉर्म को बनाने की ज़रूरत है। मेरे पास एक ही समस्या थी और वास्तव में एक अच्छा समाधान पता लगाने के लिए थोड़ा सा खुदाई कर रही थी।

चयन विकल्प
मान्य करने के लिए सभी मुझे लगता है कि के लिए किया था) कि इस

function select_validate($selectValue) 
{ 
    // 'none' is the first option and the text says something like "-Choose one-" 
    if($selectValue == 'none') 
    { 
     $this->form_validation->set_message('select_validate', 'Please pick one.'); 
     return false; 
    } 
    else // user picked something 
    { 
     return true; 
    } 
} 

तरह दिखता है अपने सूचकांक (में एक कस्टम नियंत्रक कक्षा में विधि प्रदान (या जो भी विधि प्रसंस्करण है डेटा और दृश्य लोड करना) आप ड्रॉप डाउन के लिए अपना सत्यापन कोड सेट करते हैं।

$this->form_validation->set_rules('select', 'Select', 'callback_select_validate'); 

यह जरूरी है कि आप के साथ "callback_" अपने कस्टम समारोह उपसर्ग है।

उपयोगकर्ता चयन को बनाए रखना चयन विकल्पों को बनाए रखना बहुत आसान है यदि आप सीआई जो आपको देते हैं उसका उपयोग करते हैं। आपको चयन सूची में प्रत्येक विकल्प के लिए set_select() फ़ंक्शन का उपयोग करने की आवश्यकता है।

तो मान लें कि आपके पास इसे आसान बनाने के लिए दो विकल्पों के साथ एक बूंद है। यह सब आप करते हैं।

<select name="select"> 
    <option value="none" <?php echo set_select('select', 'none', true);?> >- Select One -</option> 
    <option value="one" <?php echo set_select('select', 'one');?> >Option one</option> 
    <option value="two" <?php echo set_select('select', 'two');?> >Option two</option> 
</select> 

क्या इस समारोह का उपयोग कर के बारे में अच्छा है कि यह पूर्व का चयन करता है पहली "डमी" विकल्प और उसके बाद उपयोगकर्ता एक चयन करता है, लेकिन अन्य सत्यापन विफल रहता है, चयन रख लिया जाएगा और फार्म के बाद पूर्व चयनित पोस्ट किया गया है और उपयोगकर्ता को अन्य त्रुटियों को सही करने के लिए संकेत देता है।

फिर से, यह सभी को संतुष्ट नहीं कर सकता है लेकिन यह कोडइग्निटर के साथ ड्रॉप डाउन सत्यापन के लिए एक बहुत सीधी समाधान है।

+0

सहमत हुए। सादे साइट में मेरे एचटीएमएल के साथ काम करने के एक प्रशंसक के अधिक प्रशंसक। कभी-कभी सहायक प्रयोग और स्वच्छता को सीमित कर सकते हैं। – ChristoKiwi

0

एक ही समस्या थी और इसे हल करने में कामयाब रहे:

  • जावास्क्रिप्ट सत्यापन चंचल सत्यापन का उपयोग कर जावास्क्रिप्ट
  • फ़ॉर्म सत्यापन वर्ग

में

  • CodeIgniter कॉलबैक फ़ंक्शन आप विशिष्ट कोड मैं कर सकता हूँ आवश्यकता हो सकती है मदद

  • 1

    मैं इस समस्या में भी भाग गया, यहां अनुशंसित पोस्ट पढ़ने के बाद, मुझे यह काम मिल गया लेकिन मैं नाराज था प्रमाणीकरण संदेश यह लौटता है। हालांकि मेरा मानना ​​है कि मैं एक बेहतर विकल्प मिल गया है:

    foreach($events as $event){ 
        $options[$event->event_title] = $event->event_title; 
    } 
    
    $firstItem[''] = 'Please select one...'; 
    
    // I used array merge to ensure that my firstItem was infact my first item, 
    // otherwise you could just do $options[''] = 'Please select one...'. 
    // Array_unshift also does not allow you to specify the [''] array key we want 
    $options = array_merge($firstItem, $options); 
    
    $selected_option = $this->input->post('events', TRUE) ? $this->EE->input->post('events', TRUE) : ''; 
    
    echo form_dropdown('events', $options, $selected_option); 
    
    तो सत्यापन के साथ

    आप बस कर सकते हैं:

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

    फिर सत्यापन सामान्य 'आवश्यक' संदेश

    +0

    Hurray! यहां की चाल सरणी कुंजी को खाली स्ट्रिंग पर सेट करना है, ताकि मान खाली के रूप में मान्य हो। – lwitzel