2013-12-20 1 views
5

나는 CodeIgniter 프로젝트에서 검색 페이지를 만들고 있습니다. 제출시 양식에서 제어기 기능을 호출하고 데이터를 모델 함수를 통해 가져오고 결과 배열을보기로 전달합니다.PHP Codeigniter; 양식 재발행 방지

문제는 결과 페이지를 새로 고치면 $ _POST 데이터가이기 때문에 양식이 다시 제출된다는 것입니다. 여전히 요청 헤더에 있습니다. 내 컨트롤러에 대한 코드

<!--form--> 
<form id="find" action="<?php echo base_url()?>search/find" method="post"> 
    <input type="text" name="search_key" class="tb4" id="search_key" placeholder="Search here"/> 
    <input type="button" value="search"/> 
</form> 

다음입니다 :

/* 
    * function for fetching search results 
    * @param void 
    * @return void 
    */ 
    public function find() 
    { 
     $data['search_result']=$this->search_model->search($this->input->post('search_key')); 
     $this->load->view('template/header'); 
     $this->load->view('pages/search_result',$data); 
     $this->load->view('template/footer'); 
    } 
친절

이걸 좀 도와 내가 다음 그을 다시 확인 메시지

을 피할 수있는 방법 내 양식에 대한 코드입니다 결과 배열 $ data를 뷰에 전달하기 위해 뷰를로드하는 대신 리디렉션을 사용할 수 없습니다.

+0

검사와 일치하지 않는 형태로 검사를 처리하기 전에, 세션이 타임 스탬프를 저장할 게시물 및 요청에 게시물 데이터가 있습니다. 그 결과를로드합니까. 할 일은 아무것도하지 마십시오. –

+0

.... 문제는 결과 페이지를 새로 고치는 것에 대한 확인 메시지가 브라우저에서 resubmi에 표시됩니다. t 양식 – Chinthu

답변

7

자체로 리디렉션보십시오 즉.

폼 처리
<?php echo form_hidden('TS', time()); ?> 

,

$this->session->set_userdata('form_TS', $this->input->post('TS')); 

개의 타임 스탬프가 요청인지

if ($this->input->post('TS') != $this->session->userdata('form_TS')) 
{...} 
+0

리디렉션은 다음에 제출할 양식을 얻지 못할 때 작업을 처리합니다. – Pupil

+0

그것은 내 문제에 대한 올바른 해결책을 ......... ... 정말 고마워요. – Chinthu

1

다시 제출하지 않으려면 같은 컨트롤러에서 리디렉션을 저장 한 후하시기 바랍니다. 세션을 사용하여 해결할 수 있습니다. 이 경우 어떤 POST 양식 제출

public function find() 
{ 
    $data['search_result']=$this->search_model->search($this->input->post('search_key')); 
    if($this->input->post('search_key')) { 
     redirect('yourcontroller/find'); 
    } 
    $this->load->view('template/header'); 
    $this->load->view('pages/search_result',$data); 
    $this->load->view('template/footer'); 
} 
+0

진짜 문제를 이해하지 못하겠습니까 .....? – Chinthu

2

간단한 솔루션 형태로 숨겨진 타임 스탬프 필드를 가지고있다

if (count($_POST) > 0){ 
    $this->session->set_userdata('post_data', $_POST); 
    redirect('same_controller'); 
} 
else{ 
    if($this->session->userdata('post_data')){ 
    $_POST = $this->session->userdata('post_data'); 
    $this->session->unset_userdata('post_data'); 
    } 
}