2009-07-13 6 views
3

예 : 레코드 특정 페이지에 입력 양식을 만드는 중입니다. (부동산/임대/rec_id). 제출시 데이터를 삽입하고 유효성을 확인한 다음 관련 메시지와 함께 보낸 원본 페이지로 돌아와야합니다. 예를 들어, -Codeigniter 양식 유효성 검사 ... 양식 다시 채우기

유효성 검사가 실패하면
  • 하는 형태
  • 에코 특정 유효성 검사 오류를 재 채우는 양식 페이지를 다시로드 잘못된 이메일 주소 등

  • 성공하면 데이터를 삽입하고 페이지를 새로 고침하고 성공 메시지를 표시하십시오.

    기능 클래스() {

    $this->load->library('form_validation');  
    $this->form_validation->set_rules('name','name','required|trim'); 
    $this->form_validation->set_rules('email','email','required|trim|valid_email'); 
    
    $fields['name'] = 'Name'; 
    $fields['email'] = 'Email Address'; 
    
    $this->validation->set_fields($fields); 
    
    if ($this->form_validation->run() == FALSE) 
    { 
        //failed - reload page and re-populate fields with any error messages 
    } 
    else 
    { 
        // display form with success message 
    } 
    

    } 일반적으로이 단순히 '보기를로드'와 페이지, 필드 또는 디스플레이 메시지를 다시 채 웁니다 관련 데이터를 전달하면됩니다

. 하지만 제품 고유 페이지로 '리디렉션'을 사용해야합니다. 유효성 검사 오류를 수행하기 위해 세션 데이터를 사용하는 것 외에 다른 작업을 수행하는 좋은 방법이 있습니까? 사전에

감사합니다, 마이클

답변

3

세션에서 CodeIgniter 매뉴얼을보고 'FlashData'가 어떤 용도로 사용되는지 확인하십시오.

+0

Flashdata는 좋은 제안입니다. 사용하기 쉽고 깨끗한 코드. http://codeigniter.com/user_guide/libraries/sessions.html – GloryFish

0

세션 데이터는 다시 형태로 데이터를 보낼 수있는 가장 간단하고 정확한/효율적인 방법이 될 것입니다. 쿠키도 사용할 수 있지만 보안이 취약합니다 (쿠키 데이터가 모든 http 요청과 함께 전송되므로).

다른 옵션은 데이터베이스에 세부 정보를 저장하고 리디렉션 후에 다시 가져 오는 것이지만 불필요한 복잡성이 애플리케이션에 추가 될 것으로 생각됩니다. 당신도 바로 다음 SESSION 변수로 POST/GET 데이터를 덤프 거의보기의 논리 지점에서 투명 리디렉션을 만들기로 리디렉션되는 페이지에 신속하게 호출 할 수있는 정말 간단한 솔루션을

.

session_start(); 
$_SESSION['POST_DATA'] = $_POST; 
+0

음, 그건 내가 무슨 생각입니다. 그럼에도 불구하고 여전히 가장 간단한 해결책입니다. 배열이 리디렉션을 통해 전달 될 수 있다면 편리 할 것입니다 ... thanks tj111 –

-4

문제를 완화하려면 Javascript/jQuery를 사용하여 클라이언트 측 유효성 검사를 수행하면됩니다. 따라서 기본적으로 새 페이지로 바로 이동하는 대신 Submit 액션은 자바 스크립트 함수로 리디렉션됩니다. 그러면 폼이 유효한지 결정됩니다. 그렇다면 jQuery를 사용하여 잘못된 요소를보기 좋게 만들 수 있습니다.

+2

이 문제는 클라이언트 쪽 유효성 검사가 쉽게 무시 될 수 있다는 것입니다. 클라이언트에서 미리 유효성을 검사하더라도 서버의 데이터를 항상 확인해야합니다. 통제하지 않는 데이터는 절대로 신뢰하지 마십시오. – tj111

7

set_value('field_name') 함수를 사용하여 양식을 다시 채울 수 있습니다. 보기에서 샘플 사용 :

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

가 form_validation에서 오류를 표시하려면, 당신은 validation_errors() 기능을 사용할 수 있습니다.보기에서 샘플 사용 : <?php echo validation_errors(); ?>

은 또한 더 많은 정보를 원하시면 link text를 참조하십시오.

+1

이것이 실제로 가장 CI 방법이라고 생각합니다. 그러나 어떤 이유로 나를 포함한 모든 사람들이 항상 세션 메서드를 사용하여 끝납니다. – stef

+1

IMO, 세션 메소드를 사용하면 코드가 복잡해집니다. – Randell

1
$insertData=array(
      'name'=>NULL, 
      'email'=>NULL); 
//setting validation rules 
    $this->form_validation->set_rules('name', 'Name', 'required'); 
    $this->form_validation->set_rules('email', 'Email', 'required|email'); 

//here you will get all data which user entered in form 
$insertData = $this->input->post(NULL, TRUE); 

if ($this->form_validation->run() == FALSE) 
{ 
    //failed - reload page and re-populate fields with any error messages 
    $this->load->view('view_name',$insertData)  

} 
else 
{ 
    //set flash data for displaying success message in redirected page 
    $this->session->set_flashdata('success','Success message') 
    redirect('controller_name'); 

} 

보기 페이지

<?php if ($this->session->flashdata('succes_message')) { echo $this->session->flashdata('succes_message'); ?> } ?> 

<form action='action page url' method='post'> 
<input type='text' name='name' value='<?php echo $name ?>'/> 
<input type='text' name='email' value='<?php echo $email ?>'/> 
<input type='submit' value='Save'/>