2017-02-01 6 views
0

Мне нужно ввести данные в несколько таблиц после того, как Пользователь отправит форму. Я уже создал форму и контроллер. Мой вопрос в том, как я могу обрабатывать ошибки. Предположим, что есть некоторая ошибка, например, в одной таблице данные не вставлены по какой-то причине. SO теперь я хочу предупредить пользователя с конкретным сообщением об ошибке вроде («Something is wrong.try again» и т. Д.) Также мне нужно сохранить значение формы, если возникает ошибка.Codeigniter лучший способ обработки ошибок, которые на самом деле не являются ошибками проверки

меня попробовать следующее:

1) Добавить set_value поля формы, чтобы сохранить форму значения

2) Добавить сеанс флэш-сообщение (Но, чтобы отобразить его я должен обновить страницу, которая не сохраняет сеанс. значение)

Вот мой код:

файл контроллера:

public function add_new() 
{ 


    $this->load->helper('form'); 
    $this->load->library('form_validation');  

    if($this->input->post()) 
    { 
     if($this->input->post('add') !== false) 
     { 
      $post_val = $this->input->post(); 

      //Set validation rules 
      $this->form_validation->set_rules('field1', 'field1 name', 'required'); 
      . 
      . 
      . 


      if($this->form_validation->run() == TRUE) 
      { 
       //Add Data into first table 
       $this->load->model("my_model"); 
       $input_data['f1']=$post_val['filed1']; 
       $input_data['f2']=$post_val['filed2']; 
       $insert_fid =$this->my_model->insert($input_data); 

       //check whether data inserted into 1st table or not. 
       if($insert_fid) 
       { 
        //successfully inserted 

        //write into file(I have to write into file(for some requirement)) 
        $this->load->helper('file'); 

        $data = "\r\n".$input_data['f1']."."; 
        if (! write_file(WRITE_FILE, $data,'a+')) //WRITE_FILE is constant 
        {      
         //suppose file not writen then I have to alert user(Only to inform) 
         $this->session->set_flashdata('error',"Data no written.");      

        } 

        //Insert Into second table 
        $input_data=array(); 

        $input_data['f1']=$post_val['field3']; 
        $input_data['f2']=$post_val['field4']; 
        $input_data['f3']=insert_fid; 

        $this->load->model("my_model_two"); 

        $insert_sid =$this->my_model_two->insert($input_data); 

        //same procedure for checking 
        if($insert_sid) 
        { 

         //Insert Into Third table 

         $input_data=array(); 

         $input_data['f1']=$post_val['field5']; 
         $input_data['f2']=$post_val['field6']; 
         $input_data['f3']=insert_sid;     


         $this->load->model("my_model_three"); 

         $insert_tid =$this->my_model_three->insert($input_data); 

         //Insert Into Fourth table 

         $input_data=array(); 

         $input_data['f1']=$post_val['field7'];      
         $input_data['f2']=insert_sid;     


         $this->load->model("my_model_four"); 

         $insert_aid =$this->my_model_four->insert($input_data); 



         if(!$insert_tid) 
         { 
          $this->session->set_flashdata('error',"Error mesage 1"); 

          //redirect(base_url(uri_string())); 
         } 
         elseif(!$insert_aid) 
         { 
          $this->session->set_flashdata('error',"Error mesage 2"); 

          //redirect(base_url(uri_string())); 
         } 
         else 
         { 
          //ok all done successfully now I can redirect user to list page 
          $this->session->set_flashdata('message',"success message"); 
          redirect(base_url().'list/'); 
         } 


        } 

        else 
        { 
         $this->session->set_flashdata('error',"Error Message"); 

         //redirect(base_url(uri_string())); 
        }     

       } 
       else 
       { 
        $this->session->set_flashdata('error',"Error Message"); 

        //redirect(base_url(uri_string())); 
       } 

       //redirect(base_url(uri_string())); 
      } 
     } 

    } 
    $page_data["title"]="Add Data";  
    $this->load->view("myview",$page_data); 
} 

мой взгляд файл

<div class="page-content">   

      <?php   
      $success = $this->session->flashdata('message'); 
      if(isset($success) && trim($success) != "") 
      { 

       ?> 
       <div class="alert alert-block alert-success" id="success-alert"> 
       <button type="button" class="close" data-dismiss="alert"> 
        <i class="ace-icon fa fa-times"></i> 
       </button> 
       <p> 
        <?= $success ?> 
       </p> 
       </div> 
       <?php 

      } 
      $error = $this->session->flashdata('error'); 
      $validate_error = validation_errors(); 
      if((isset($error) && trim($error) != "") || trim($validate_error) != "") 
      { 

       ?> 
       <div class="alert alert-block alert-danger"> 
       <button type="button" class="close" data-dismiss="alert"> 
        <i class="ace-icon fa fa-times"></i> 
       </button> 
       <p> 
        <?= $error ?> 
        <?= $validate_error ?> 
       </p> 
       </div> 
       <?php 

      } 

      ?> 

      <div class="page-header">    
       <h1 class=""><?=$title?>       
       </h1> 
      </div>  

      <form> 
      //My form Which sucessfully created 
      </form> 


     </div> <!-- page-contnet --> 

Я хочу, чтобы отобразить ошибки (ожидать ошибки проверки), а также хотите сохранить от стоимости.

ответ

1

set_value() использует значения, подтвержденные библиотекой проверки формы, поэтому используйте правила, в которых вы можете. Он также ищет $ _POST, если нет правил проверки, поэтому в любом случае он должен работать из коробки. И первый вариант - установить значение самостоятельно set_value('my_field', $this->input->post('my_field'), true); Третий параметр для html escaping, true по умолчанию. Вы можете установить значение false, это полезно, когда у вас есть богатый html из wyswig textarea.

Говоря об ошибке, вам не нужно использовать данные флэш-памяти и перенаправлять, вы можете поместить массив в массив $ page_data и он появится внутри представления. Что-то вроде $page_data['errors'] = []; $page_data['errors']['first_field'] = 'We have a bad situation here'; должно сделать трюк

+0

Да @ cssBlaster21895. Я также думаю о том же решении добавить в $ page_data ['errors']. Но для этого я должен снова поставить условие для просмотра, чтобы отобразить ошибку. Поэтому я подумал, что может быть лучшее решение. Благодарю за ваш ответ. –

+0

Добро пожаловать. – cssBlaster21895