2013-10-16 7 views
5

Я проверил и повторно проверил свой код, ссылаясь на документы CI и другие сообщения в Интернете, но я не смог реализовать метод set_value() для повторного заполнения полей формы после неудачной проверки. Возможно, мне не хватает чего-то очень фундаментального для рамки CI (я довольно к ней знаком), но ваше понимание было бы очень оценено.Set_value CodeIgniter() не переполняется

У меня есть следующие в моем методе контроллера:

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'); 
    } 
} 

И на мой взгляд, фрагмент кода, который не восстанавливается заселение:

<?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" /> 

Я не могу понять это один, так что заблаговременно за вашу помощь.

ответ

13

Если вы хотите использовать set_data(), вам необходимо также использовать set_rules для этого поля POST/GET.

Поскольку вы прокомментировали все свои set_rules, я не могу подтвердить, что это проблема, но, скорее всего, это так.

, пожалуйста, проверьте, если у вас есть эта линия в код

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

Так что, если вы хотите, чтобы повторное заполнение поля с name="fname" вам нужно иметь set_rules() // as line above для него в противном случае он не будет обрабатывать поэтому set_value('fname') является пустой.

+4

Спасибо, это очень раздражает, что правило необходимо для того, чтобы повторно населения работать на всех, но это было то, где я ошибся. –

+0

Я также смог использовать $ this-> form_validation-> set_rules ('perf_fname', 'First Name', 'trim'); для полей, которые мне не нужны. –

+0

проблем нет, примечание 'trim()' очень хорошая функция. Я использую его в каждом правиле, записывая. – Kyslik

-4

Позволяет установить значение формы ввода или текстового поля. Вы должны указать имя поля с помощью первого параметра функции. Второй (необязательный) параметр позволяет установить значение по умолчанию для формы. Пример:

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

Приведенная выше форма покажет «0» при первой загрузке.

+0

Это никак не ответ на заданный вопрос. – charliefortune

1

Вы наверняка нашли решение, но для таких людей, как я, которые тратили слишком много времени на эту проблему. Я нашел решение:

так вместо того, чтобы код, который

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

Попробуйте это, работают очень хорошо:

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

хорошо, я реализую это в своих будущих представлениях –

0

Попробуйте этот путь. Это будет получить как ошибки проверки и установить значение

В View

<?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> 

В контроллере

$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'); 
} 
Смежные вопросы