2013-10-16 12 views
5

Sprawdziłem i ponownie sprawdziłem mój kod, odwołując się do dokumentów CI i innych postów w Internecie, ale nie udało mi się zastosować metody set_value() do ponownego wypełnienia pól formularza po nieudanej walidacji. Być może brakuje mi czegoś bardzo istotnego dla struktury CI (jestem raczej nowa), ale twój wgląd byłby bardzo cenny.CodeIgniter's set_value() nie ponownie wypełniając

Mam następujące metody w moim kontrolera:

public function form_step2(){ 
    //Form Setup 
    $this->load->helper('form'); 
    $this->load->helper('url'); 
    $this->load->library('form_validation'); 
    $data['title'] = $this->base_title; 
    $data['base_url'] = base_url(); 

    //Validation Settings - must be set per step 
    $this->form_validation->set_rules('request_type', 'Request Type', 'required'); 
    *...more of the same set_rules()* 


    if ($this->form_validation->run() === FALSE) { 
     ### Validation failed or New Form 

     // Get form element data 
     $data['request_types'] = $this->my_model->get_form_data('request_type'); 
     *...more of the same get_form_data() calls for loading form elements* 

     //Generate Page from View Templates 
     $this->load->view('templates/header', $data); 
     $this->load->view('templates/form_step2', $data); 
     $this->load->view('templates/footer'); 
    } else { 
     ### Save to database 
     $this->my_model->set_data($data); 

     redirect('my_model/success','refresh'); 
    } 
} 

I moim zdaniem fragment kodu, który nie jest ponowne wypełnianie:

<?php echo form_open('my_model/form_step2', array('class'=>'form-inline')); ?> 

<label for="fname">First Name</label> 
<input type="text" id="fname" name="fname" value="<?php echo set_value('fname'); ?>" /> 
<input type="submit" name="submit" value="Submit" /> 

Nie mogę tego zrozumieć jedno wyjście, więc z góry dzięki za pomoc.

Odpowiedz

13

jeśli chcesz używać set_data(), musisz również użyć set_rules dla tego pola POST/GET.

Ponieważ skomentowałeś wszystkie ustawienia set_rules, nie mogę potwierdzić, że to jest problem, ale najprawdopodobniej tak jest.

proszę sprawdzić, czy masz tę linię w kodzie

$this->form_validation->set_rules('fname', 'First name', 'trim|required');

Więc jeśli chcesz ponownie wypełniać pole z name="fname" trzeba mieć set_rules() // as line above dla niego inaczej nie będzie przetwarzać jest zatem set_value('fname') pusty.

+4

Dzięki, jest to dość irytujące, że reguła jest niezbędna dla repopulacji w ogóle pracować, ale w tym miejscu popełniłem błąd. –

+0

Mogłem również użyć $ this-> form_validation-> set_rules ("perf_fname", "First Name", "trim"); dla pól, których nie potrzebuję. –

+0

nie ma problemu, zwróć uwagę na "trim()" jest bardzo fajną funkcją, używam go w każdej regule a zapisz. – Kyslik

-4

Umożliwia ustawienie wartości formularza wejściowego lub pola tekstowego. Musisz podać nazwę pola za pomocą pierwszego parametru funkcji. Drugi (opcjonalny) parametr pozwala ustawić domyślną wartość dla formularza. Przykład:

<input type="text" name="quantity" value="<?php echo set_value('quantity', '0'); ?>" size="50" /> 

Powyższy formularz po załadowaniu pokaże "0".

+0

Nie jest to w żaden sposób odpowiedź na zadane pytanie. – charliefortune

1

Z pewnością znalazłeś rozwiązanie, ale dla ludzi takich jak ja spędzających zbyt wiele czasu na ten problem. znalazłem rozwiązanie:

więc zamiast do kodu, który

<input type="text" id="fname" name="fname" value="<?php echo set_value('fname'); ?>" /> 

Spróbuj tego, że działają bardzo dobrze:

<?php $data = array('id' =>fnam, 'name'=> 'fname','value'=> set_value('fname'), 'size =>'50'); 
echo form_input($data).'<br />'; ?> 
+0

miło, będę to wdrażał w moich przyszłych widokach –

0

Spróbuj w ten sposób. Będzie się zarówno błędy sprawdzania poprawności i ustawić wartość

W widoku

<?php echo flash_message(); 
    if($this->session->userdata('postinput') !=""){ 
    $value = $this->session->userdata('postinput'); 
    $this->session->unset_userdata('postinput'); 
    }else 
    $value = ""; 

?> 
<form action="<?php echo site_url('carlisting/carlist');?>" method="post" id="your_reg_form"> 
<div class="reg-search"> 
<input placeholder="YOUR REG" name="input" type="text" value="<?php echo $value; ?>"> 
</div> 

kontroler

$this->form_validation->set_rules('input', 'Registration', 'required|min_length[2]|max_length[7]'); 
if ($this->form_validation->run() == false){ 
    $this->session->set_flashdata('message', array('content' => validation_errors(), 'type' => 'error_message_small')); 
     $this->session->set_userdata('postinput',$this->input->post('input')); 
     redirect('home'); 
} 
Powiązane problemy