2014-05-09 9 views
6

Sto sviluppando un modulo di categoria in cui sto utilizzando le regole di convalida CI. Quando la regola di validazione fallisce, voglio che il modulo abbia lo stesso valore inserito dall'utente. Ho usato la funzione set_value per caricare il valore nel modulo dopo il fallimento delle regole di validazione. Ma ogni volta che la convalida fallisce, il valore è vuoto.Il CodeIgniter set_value() non funziona?

Ecco il mio codice. Ho impostato le regole di convalida nel costruttore.

$this->form_validation->set_rules($this->validation_rules); 
if ($this->input->post()) { 
$db_array=array(
    'CategoryName' => $this->input->post('CategoryName'), 
    'ParentID' => $this->input->post('ParentID'), 
    'Status' => $this->input->post('Status') 
    ); 
if($this->form_validation->run() != false){ 

    if($id) 
    { 
     $result = $this->category_m->update($db_array,$id); 
     if(isset($result['error'])&& count($result['error']>0)) 
     { 
      foreach($result['error'] as $error) 
      { 
       $this->session->set_flashdata('error',$error); 
      } 
     } 
     if($result['success']) 
     { 
      $action['class'] = 'success'; 
      $action['msg'] = 'Data added successfully.'; 
      $this->session->set_flashdata('success',$action); 
     } 
     else 
     { 
      $action['class'] = 'error'; 
      $action['msg'] = 'Invalid values to the form!'; 
      $this->session->set_flashdata('error',$action); 
     } 
    } 
    else 
    { 
     $result = $this->category_m->insert($db_array); 
     if(isset($result['error']) && count($result['error']>0)) 
     { 
      foreach($result['error'] as $error) 
      { 
       $this->session->set_flashdata('error',$error); 
      } 
     } 
     if($result['success']) 
     { 
      $action['class'] = 'success'; 
      $action['msg'] = 'Data added successfully.'; 
      $this->session->set_flashdata('sucess',$action); 
     } 
     else 
     { 
      $action['class'] = 'error'; 
      $action['msg'] = 'Invalid values to the form!'; 
      $this->session->set_flashdata('error',$action); 
     } 
    } 
    if(isset($this->input->post['frmSubmit'])) 
    { 
     redirect('category/form/'.$result['CategoryID']); 
    } 
    else 
    { 
     redirect('category/index'); 
    } 

} 
else 
{ 
    $categories = $this->category_m->getCategoryName(true); 
    $data['categories'] = convert_to_dropdown($categories,'CategoryName','CategoryID','Select Parent     Category'); 
    $data['CategoryName'] = set_value('CategoryName'); 
    $data['ParentID'] = set_value('ParentID'); 
    $data['Status'] = set_value('Status'); 
} 
} 

if($id) 
{ 
$category = $this->category_m->getCategory($id); 
$data['CategoryName'] = $category->CategoryName; 
$data['ParentID'] = $category->ParentID; 
$data['Status'] = $category->Status; 
} 
else 
{ 
$data['CategoryName'] = ''; 
$data['ParentID'] = ''; 
/*foreach($this->validation_rules as $rule){ 
    //$data['category']->{$rule['field']} = set_value($rule['field']); 
}*/ 
} 
$categories = $this->category_m->getCategoryName(true, $id); 
$data['categories'] =            convert_to_dropdown($categories,'CategoryName','CategoryID','Select Parent Category'); 
$this->load->view('form',$data); 
+0

dove è la sua opinione? – user3470953

+0

C'è molto codice qui. Si prega di rimuovere il codice che non è pertinente alla domanda. –

+0

Ho già lo stesso problema, probabilmente perché si sta chiamando una funzione diversa durante il caricamento della vista. Quello che ho fatto è stato solo convalidare 'tagliare' ad esso. :) – Eddie

risposta

4

modificare la posizione di questo codice.

else 
{ 
    $categories = $this->category_m->getCategoryName(true); 
    $data['categories'] = convert_to_dropdown($categories,'CategoryName','CategoryID','Select Parent     Category'); 
    $data['CategoryName'] = set_value('CategoryName'); 
    $data['ParentID'] = set_value('ParentID'); 
    $data['Status'] = set_value('Status'); 
} 

come

if($this->input->post()) 
    { 

    $categories = $this->category_m->getCategoryName(true); 
    $data['categories'] = convert_to_dropdown($categories,'CategoryName','CategoryID','Select Parent Category'); 
    $data['CategoryName'] = set_value('CategoryName'); 
    $data['ParentID'] = set_value('ParentID'); 
    $data['Status'] = set_value('Status'); 
    } 
    else if($id) 
    { 
    $category = $this->category_m->getCategory($id); 
    $data['CategoryName'] = $category->CategoryName; 
    $data['ParentID'] = $category->ParentID; 
    $data['Status'] = $category->Status; 
    } 
    else 
    { 
    $data['CategoryName'] = ''; 
    $data['ParentID'] = ''; 
    } 

sarà sicuramente funziona

Problemi correlati