2

私はこれに非常に多くの時間を費やしたので、コードが見えなくなったと思います。フォームの検証は実行時に常に 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>

4

1 に答える 1

4

私の答えがあまり役に立たない場合は申し訳ありませんが、まだコメントを追加することはできません.

コントローラー、モデル、およびライブラリーの相互作用が逆さまになっているようです。アニケットが言ったように、すべてのフォーム検証はコントローラーで行う必要があることに注意してください。また、データベースとのやり取りはすべてモデルで行う必要があります。

IF ステートメントが失敗する理由は、アップロードを完了していないためであり、アップロードを試みるように制御されていないため、アップロードを完了していません。

この観点からコントローラーを作り直してみてください。また、フォーム検証を実行するときに == FALSE を定義しないでください。場合によっては、問題が発生する可能性があります。を使用するだけif (!$this->form_validation->run())です。

于 2012-09-02T14:35:18.820 に答える