Загрузка изображения Codeigniter - PullRequest
0 голосов
/ 16 марта 2011

У меня проблема в том, что если пользователь не выбирает изображение, он может нажать «отправить» внизу, а затем он редактирует имя в базе данных до нуля (потому что изображение отсутствует), поэтому его изображение профиля остается пустым иЯ не хочу этогоЯ хочу показать ошибку, что пользователь не выбрал изображение.

Моя другая проблема - когда пользователь загружает новое изображение, как я могу удалить старое с сервера?.

Вот мой код:

просмотр

    <?php echo form_open_multipart('profil/uploadImg'); ?>
    <div style="float:none; margin-bottom:5px;" id="profil_billed">
        <img width="200" height="200" src="<?php echo base_url(); ?>images/users/<?php echo $query->profile_picture; ?>" alt="">
    </div><!-- profil_billed -->
    <?php echo form_upload('userfile'); ?><br><br>
    <?php echo form_submit('upload', 'Upload billed', 'class=bottom'); ?>
    <?php echo form_hidden('username', $this->session->userdata('username')); ?>
    <?php echo form_close(); ?>

модель

function addProfileImg()
{
    $config = array(
        'allowed_types' => 'jpg|jpeg|gif|png',
        'upload_path' => $this->gallery_path,
        'max_size' => 2000,
        'encrypt_name' => true
    );

    $this->load->library('upload', $config);
    $this->upload->do_upload();
    $image_data = $this->upload->data();

    $config = array(
        'source_image'    => $image_data['full_path'],
        'new_image'       => $this->gallery_path . '/thumbs',
        'maintain_ration' => true,
        'width'           => 200,
        'height'          => 200,
        'encrypt_name'    => true,
        'max_size'        => 2000
    );

    $this->load->library('image_lib', $config);
    $this->image_lib->resize();


    # Ret profil billed navn #

    //$data = $this->upload->data('file_name');
    //print_r($data);

    $file_array = $this->upload->data('file_name');
    $profilBilledNavn['profile_picture'] = $file_array['file_name'];

    $this->db->where('username', $this->input->post('username'));
    $this->db->update('users', $profilBilledNavn);


}

контроллер

function uploadImg()
{
    $this->form_validation->set_rules('upload', 'upload',
        'required');
    $this->form_validation->set_rules('userfile', 'userfile',
        'required');

    if($this->form_validation->run() != true)
    {
        $this->load->model('profil_model');
        $this->profil_model->addProfileImg();
        redirect('profil/indstillinger/'.$this->session->userdata('username'));
    }
}

Ответы [ 3 ]

0 голосов
/ 16 марта 2011
        if ( ! $this->upload->do_upload())
        {
            $error = array('error' => $this->upload->display_errors());
                       // error ..show it to user

        }
        else
        {
            $data = array('upload_data' => $this->upload->data());
                        // save to db

        }

и для удаления вы должны использовать unlink(), а затем вам также может понадобиться удалить его из базы данных.Вы можете использовать простой метод getwhere .. пример:

$config['query'] = $this->db->get_where('images','some id here may be');
0 голосов
/ 18 марта 2011

Вы должны сделать это с помощью JavaScript

функция validate () {

var extensions = new
Array ( "JPG", "JPEG", "GIF", "PNG", "ВМР");

// Альтернативный способ создания массива
var extensions = new Array () {
extensions [1] = "jpg"; расширения [0] = "JPEG"; extensions [2] = "gif";
extensions [3] = "png"; расширения [4] = «ВМР»; var image_file = document.form.image_file.value;
вар image_length = document.form.image_file.value.length;
var pos = image_file.lastIndexOf ('.')
+ 1; var ext = image_file.substring (pos, image_length);
var final_ext = ext.toLowerCase ();

для (i = 0; i < extensions.length; i ++)
{
if (extensions [i] == final_ext) {
вернуть истину;
} ​​
}
alert ("Вы должны загрузить файл изображения с одним из следующие расширения: "+ extensions.join (',') + "."); вернуть ложный;
}

таким образом вам не нужно делать запрос к серверу.

** этот код от http://www.bitrepository.com/validating-an-image-upload.html

0 голосов
/ 16 марта 2011

Загрузчик файлов CI имеет базовую обработку ошибок - из документов

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

        $this->load->view('upload_form', $error);
    }
    else
    {
        $data = array('upload_data' => $this->upload->data());

        $this->load->view('upload_success', $data);
    }

Я полагаю, что если файл пуст, это приведет к ошибке.

Что касается удаления изображения, я полагаю, у вас есть путь к изображению, сохраненный в базе данных:

Вы можете использовать unlink():

$path = '/path/to/my/img/upload/001.jpg'; // wherever you store this value.

unlink($path); // returns true/false on success
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...