2012-09-02 3 views
2

나는이 코드에 너무 많은 시간을 할애하여 코드 블라인드에 빠졌다고 생각합니다. 폼 유효성 검사는 실행 중에 항상 FALSE를 반환하고 이유를 파악할 수 없습니다.Codeigniter 폼 유효성 검사는 항상 false를 반환합니다.

new_map() 함수는 양식 제출시 (물론 map_name 필드에 값이 설정된 경우) 양식을 먼저 표시하고 양식 유효성 검증 실행은 false를 리턴하지만 오류가 표시되지 않고 양식이 재설정됩니다. 나는 무엇이 없는가 ??

컨트롤러 :

public function new_map() 
{ 
    $data['extra_assets']['js'][] = 'app/admin/maps.js'; 

    $data['title'] = 'Add Map'; 

    $this->form_validation->set_rules('map_name', 'Map name', 'required'); 

    if ($this->form_validation->run() == FALSE) 
    { 
     $this->load_admin_view('admin/ae_map', $data); 
    } 
    else 
    { 
     $this->load->model('maps_model'); 
     echo 'inside true';exit; 
     // Upload map 
     if ($this->maps_model->upload_map()) 
     { 
      redirect(site_url('admin/maps')); 
     } 
    } 
} 

모델 :

public function upload_map() 
{ 
    $config['upload_path'] = root_path() . 'space/maps/'; 
    $config['allowed_types'] = 'gif|jpg|png'; 
    $this->load->library('upload', $config); 

    $map_name = $this->input->post('map_name'); 

    if (! $this->upload->do_upload('map_file')) 
    { 
     $error = array('error' => $this->upload->display_errors()); 

     echo $this->upload->display_errors();exit; 
     return FALSE; 
    } 
    else 
    { 
     $data = array('upload_data' => $this->upload->data()); 

     // Insert map into database 
     $options = array(
        'm_file' => $data['upload_data']['file_name'], 
        'm_name' => $map_name 
       ); 
     $this->insert_map($options); 

     // Create a thumbnail of this map 
     $this->generate_map_thumb($data['upload_data']['file_name']); 
    } 

    return TRUE; 
} 

보기 :

<div class="modalContent" style="width: 300px; height: 250px;"> 
<h1><?php echo $title; ?></h1> 

<?php echo validation_errors(); ?> 

<div id="MAP_FORM" class="formListing"> 
    <?php echo form_open_multipart('admin/new_map'); ?> 

    <ul> 
     <li>   
      <div><label>File: </label></div> 
      <div><span><input type="file" id="MAP_FILE" name="map_file" /></span></div> 
     </li> 
     <li>  
      <div><label>Name: </label></div> 
      <div><span><input type="text" id="MAP_NAME" name="map_name" value="" /></span></div> 
     </li> 
    </ul> 

    <br /> 
    <input type="submit" value="Submit" id="SUBMIT_MAP" name="submit_map" /> 

    <?php echo form_close(); ?> 
</div> 

+1

모델에서 유효성 검사가 왜 발생합니까? 제어기에 있어야합니다. 그러나 어쨌든, 실제로 일어나고있는 일을 살펴 보겠습니다. 또한 모델에 리디렉션 문이있는 이유는 무엇입니까? 이 문장은 컨트롤러의 일부입니다. – Aniket

+0

컨트롤러에 또 다른'new_map' 함수가 없다면 모델과 컨트롤러 코드가 틀린 방향으로 라벨이 붙어있을 것이라고 추측합니다. – jleft

+0

죄송합니다. 실제로 그들은 다른 방향으로 분류되었습니다. 나는 라벨을 즉시 바꿀 것이다. – PoloRM

답변

4

임 내 대답은하지 많은 도움이 될 것입니다,하지만 메신저는 허용하지 않을 경우 죄송합니다 덧글을 추가하십시오.

컨트롤러, 모델 및 라이브러리의 상호 작용이 거꾸로 된 것 같습니다. Aniket은 컨트롤러에서 모든 형식 검증이 이루어져야 함을 기억하십시오. 그리고 모든 데이터베이스 상호 작용은 모델에서 이루어져야합니다.

IF 문이 실패하는 이유는 업로드를 완료하지 않았기 때문이며, 업로드를 시도하지도 말라고 통제하지 못했기 때문에 업로드가 완료되지 않았기 때문입니다.

컨트롤러를이 관점에서 재구성 해보십시오. 또한 폼 유효성 검사를 실행할 때 == FALSE를 정의하면 안됩니다. 때로는 문제를 일으킬 수 있습니다. if (!$this->form_validation->run())을 사용해주세요.

+0

실수로 내 질문에 레이블을 바꿨다. (컨트롤러의 코드는 실제로 모델의 코드였다.). – PoloRM

+0

방금 ​​다시 코드를 시도했는데 == FALSE를 제거하기 전에 갑자기 양식이 작동했습니다. 내 인생에서 나는 왜 양식을 제출하지 않았고 왜 아무것도 변경하지 않은 것처럼 보이는지 알 수 없습니다. 저는 MVC와 CodeIgniter를 처음 접했지만, 코드에 문제가 있다고 생각하지 않습니다. 이제 레이블은 적어도 고정되어 있습니다 : o) 어떤 경우에도 도움을 주셔서 감사합니다! 그것은 나를 미치게했다! – PoloRM

관련 문제