2013-05-30 2 views
0

В Codeigniter, при редактировании формы, если какая-либо ошибка происходит в любом поле, то после отправки формы появляется новая запись в базе данных обновления. как я могу это исправить?codeigniter form edit Исправление ошибки

здесь мой контрольный код: item() метод предназначен для редактирования страницы.

function item() {  
    //pre process for edit 
    $page_id = $this -> uri -> segment(3); 

    if ($page_id != false) { 

     //check for valid package id 
     $page_q = $this -> customer_code_m -> get_by_id($page_id); 

     if ($page_q -> num_rows() != 0) { 

      // valid package id 
      $page_data = $page_q -> row(); 
      $data['page_data'] = $page_data; 
     } else { 
      // fake package id 
      redirect("welcome"); 
     } 
    } 

    $this -> load -> view('customer_code_v', $data); 
} 

Метод process() предназначен для отправки страницы.

function process() {     
    //pre process for edit 
    $page_id = $this -> input -> post('ID'); 

    //echo "PAGE ID:".$page_id; 
    if ($page_id != false) { 

     //check for valid page id 
     $page_q = $this -> customer_code_m -> get_by_id($page_id); 

     if ($page_q -> num_rows() != 0) { 
      // valid page id 
      $page_data = $page_q -> row(); 
     } else { 
      // fake page id 
      redirect("welcome"); 
     } 
    } 

    //loading form validation 
    $this -> load -> library('form_validation'); 

    //seting valiadtion rules 
    $this -> form_validation -> set_rules('CustomerCode', 'Code Of Customer', 'trim|required|prep_for_form');  
    $this -> form_validation -> set_rules('Name_Of_Customer', 'Name Of Customer', 'trim|required|prep_for_form'); 
    $this -> form_validation -> set_rules('Name_Of_Customer_BN', 'Name Of Customer Bangla', 'trim|required|prep_for_form'); 
    $this -> form_validation -> set_rules('Name_Of_Propritor', 'Name Of Propritor', 'trim|required|prep_for_form'); 
    $this -> form_validation -> set_rules('Name_Of_Propritor_BN', 'Name Of Propritor Bangla', 'trim|required|prep_for_form'); 
    $this -> form_validation -> set_rules('Address', 'Address', 'trim|prep_for_form'); 
    $this -> form_validation -> set_rules('Address_BN', 'Address Bangla', 'trim|prep_for_form'); 
    $this -> form_validation -> set_rules('Phone', 'Phone', 'trim|integer|prep_for_form'); 
    $this -> form_validation -> set_rules('Fax', 'Fax', 'trim|prep_for_form'); 
    $this -> form_validation -> set_rules('Mobile', 'Mobile', 'trim|integer|required|prep_for_form'); 
    $this -> form_validation -> set_rules('Email', 'Email', 'trim|valid_email|prep_for_form'); 
    $this -> form_validation -> set_rules('Division', 'Division', 'trim|required|prep_for_form'); 
    $this -> form_validation -> set_rules('Area', 'Area', 'trim|required|prep_for_form'); 
    $this -> form_validation -> set_rules('Zone', 'Zone', 'trim|required|prep_for_form'); 
    $this -> form_validation -> set_rules('Type_Of_Party', 'Type Of Party', 'trim|required|prep_for_form'); 
    $this -> form_validation -> set_rules('Gener_Of_Party', 'Gener Of Party', 'trim|required|prep_for_form'); 
    $this -> form_validation -> set_rules('Grade_Of_Party', 'Grade Of Party', 'trim|required|prep_for_form'); 
    $this -> form_validation -> set_rules('Status', 'Status', 'trim|prep_for_form'); 

    if ($this -> form_validation -> run() == FALSE) { 
     $this->item(); 
    } else { 
     $form_data = array('CustomerCode' => htmlspecialchars($this -> input -> post('CustomerCode')), 'Name_Of_Customer' => htmlspecialchars($this -> input -> post('Name_Of_Customer')), 'Name_Of_Customer_BN' => htmlspecialchars($this -> input -> post('Name_Of_Customer_BN')), 'Name_Of_Propritor' => htmlspecialchars($this -> input -> post('Name_Of_Propritor')), 'Name_Of_Propritor_BN' => htmlspecialchars($this -> input -> post('Name_Of_Propritor_BN')), 'Address' => htmlspecialchars($this -> input -> post('Address')), 'Address_BN' => htmlspecialchars($this -> input -> post('Address_BN')), 'Phone' => htmlspecialchars($this -> input -> post('Phone')), 'Fax' => htmlspecialchars($this -> input -> post('Fax')), 'Mobile' => htmlspecialchars($this -> input -> post('Mobile')), 'Email' => htmlspecialchars($this -> input -> post('Email')), 'Division' => htmlspecialchars($this -> input -> post('Division')), 'Area' => htmlspecialchars($this -> input -> post('Area')), 'Zone' => htmlspecialchars($this -> input -> post('Zone')), 'Type_Of_Party' => htmlspecialchars($this -> input -> post('Type_Of_Party')), 'Gener_Of_Party' => htmlspecialchars($this -> input -> post('Gener_Of_Party')), 'Grade_Of_Party' => htmlspecialchars($this -> input -> post('Grade_Of_Party'))); 

     if ($this -> input -> post('Status') == 1) { 
      $form_data['Status'] = 1; 
     } else { 
      $form_data['Status'] = 0; 
     } 

     $data['form_data'] = $form_data; 

     if (!empty($page_data)) { 
      $form_data['page_id'] = $page_data -> ID; 
      $this -> customer_code_m -> update($form_data); 
      //set msg 
      $this -> session -> set_flashdata('page_msg', '<p class="form_msg">Successfully updated.</p>'); 
      redirect("customer_code/details_item/" . $page_data -> ID); 
      //print_r($form_data); 
     } else { 

      $this -> customer_code_m -> create($form_data); 
      //set msg 
      $this -> session -> set_flashdata('page_msg', '<p class="form_msg">Successfully created.</p>'); 
      redirect("customer_code/all"); 
      //print_r($form_data); 
     } 
    } 
} 
+0

Форма не должна быть отправлена, если есть ошибка. Можете ли вы объяснить немного больше? – sakibmoon

+0

моя проблема в том, что я обрабатываю исключение для каждого поля с помощью form_error ('fieldname') на моем представлении. но пока на странице редактирования страницы, если я пропустил какое-либо обязательное поле, ошибка происходит, как обычно, но я потерял page_id, и поэтому, когда я пытаюсь отправить форму снова, она создает новый идентификатор страницы и новое представление в базе данных. Теперь мой вопрос: как я могу сохранить свою страницу_ид для этой конкретной заявки? –

+0

Используйте сеанс. Написал мой ответ. – sakibmoon

ответ

0

Для решения вашей проблемы вы должны сохранить свою page_id в переменной сеанса. Вы можете начать сеанс с

$this->load->library('session'); 

Затем сохраните PAGE_ID как этот

$this->session->set_userdata('page_id', $this->input->post('ID')); 

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

$this->session->userdata('page_id'); 

EDIT:

Использование flashdata будет поддерживать только s ожидание для одного запроса. Сохранение данных сеанса в базе данных совершенно другое. В вашем случае нет необходимости использовать flashdata, но сохранение данных в таблице сеансов является лучшей практикой безопасности, так как обычно сеанс сохраняется в cookie. Вы можете использовать это. Это применяется в обоих случаях: используете ли вы flashdata или обычный сеанс. Эти две вещи были замешаны в моих комментариях. Надеюсь, теперь вы поняли.

+0

, если я использую $ this-> session-> set_flashdata ('page_id', $ this-> input-> post ('ID')) будет ли проблема или любая другая проблема безопасности с помощью set_userdata()? –

+0

Он сохранит данные в базе данных, вам нужно создать таблицу, чтобы она работала. Проверьте 'сохранение данных сеанса в базе данных': http://ellislab.com/codeigniter/user-guide/libraries/sessions.html – sakibmoon

+0

вопрос не был, я создаю сеанс. поэтому, если я использую session-> set_flashdata ("---"), будет ли он работать так же? –