Codeigniter - 如何将图像添加到我的CRUD方法?

时间:2010-06-22 14:40:10

标签: php mysql codeigniter

我正在开发第二个CI应用程序。我在控制器中创建了一些简单的CRUD方法。我的客户要求每条记录都包含一张图片。我已经在论坛和其他资源上寻求帮助,但没有太多运气。

我已经设法使用文件上传类将文件上传到目录中,但我的问题是如何将上传的文件与相关记录相关联。

以下是我的MVC的相关部分..,正确的方向的任何帮助/点将不胜感激。

查看 - admin / locationEdit.php

<form method="post" action="<?php echo $action; ?>">
        <div class="data">
        <table>
            <tr>
                <td width="30%">ID</td>
                <td><input type="text" name="id" disabled="disable" class="text" value="<?php echo $this->validation->id; ?>"/></td>
                <input type="hidden" name="id" value="<?php echo $this->validation->id; ?>"/>
            </tr>
            <tr>
                <td valign="top">Name<span style="color:red;">*</span></td>
                <td><input type="text" name="name" class="text" value="<?php echo $this->validation->name; ?>"/>
                <?php echo $this->validation->name_error; ?></td>
            </tr>
            <tr>
                <td valign="top">Address<span style="color:red;">*</span></td>
                <td><input type="text" name="address" class="text" value="<?php echo $this->validation->address; ?>"/>
                    <?php echo $this->validation->address_error; ?></td>
            </tr>

            <tr>
                <td>&nbsp;</td>
                <td><input type="submit" value="Save"/></td>
            </tr>
        </table>
        </div>
        </form> 

控制器 - location.php

function add(){
        // set validation properties
        $this->_set_fields();

        // set common properties
        $data['title'] = 'Add new location';
        $data['message'] = '';
        $data['action'] = site_url('admin/location/addLocation');
        $data['link_back'] = anchor('admin/location/index/','Back to list of locations',array('class'=>'back'));



            // Write to $title
      $this->template->write('title', 'Admin - Add New Location!');
    // Write to $sidebar
      $this->template->write_view('content', 'admin/locationEdit', $data);
      // Render the template
      $this->template->render();

    }

function addLocation(){
        // set common properties
        $data['title'] = 'Add new location';
        $data['action'] = site_url('admin/location/addLocation');
        $data['link_back'] = anchor('admin/location/index/','Back to list of locations',array('class'=>'back'));

        // set validation properties
        $this->_set_fields();
        $this->_set_rules();

        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size'] = '100';
        $config['max_width']  = '1024';
        $config['max_height']  = '768';

         $path_to_uploads='./uploads';
          $config['upload_path'] = $path_to_uploads;
          $this->load->library('upload', $config);

            $upload_data=$this->upload->data();
            $file_name=$upload_data['file_name'];
            $full_file_path = $path_to_uploads.'/'.$file_name;

        // run validation
        if ($this->validation->run() == FALSE){
            $data['message'] = '';
        }else{


           // save data
            $location = array('name' => $this->input->post('name'),
                            'address' => $this->input->post('address'),
                            'image_url' => $full_file_path);
            $id = $this->locationModel->save($location);

            // set form input name="id"
            $this->validation->id = $id;

            // set user message
            $data['message'] = '<div class="success">add new location success</div>';
        }

        // Write to $title
      $this->template->write('title', 'Admin - Add New Location!');
    // Write to $sidebar
      $this->template->write_view('content', 'admin/locationEdit', $data);
      // Render the template
      $this->template->render();
    }

1 个答案:

答案 0 :(得分:3)

在上传功能中,获取上传文件的路径:

    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '100';
    $config['max_width']  = '1024';
    $config['max_height']  = '768';
    $path_to_uploads='./uploads';
    $config['upload_path'] = $path_to_uploads;
    $this->load->library('upload', $config);
    //add this
    $this->upload->initialize($config);
    if (!$this->upload->do_upload()){
        $error = $this->upload->display_errors();
        echo "<script>alert($error);</script>";
    }else{
        $upload_data=$this->upload->data();
        $file_name=$upload_data['file_name'];
        $full_file_path = $path_to_uploads.'/'.$file_name;
    }

然后你可以将$full_file_path返回给调用它的方法并将其插入到db中,或者直接插入。