2012-09-02 147 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