Как вставить и переместить несколько изображений с помощью codeigniter? - PullRequest
0 голосов
/ 02 января 2019

просмотр:

<script>
    $(document).ready(function(){
        $("#submit").click(function(e){
            e.preventDefault();
            product_name = $("#product_name").val();
            color = $("#colorWell").val();
            $.ajax({
                type:"POST",
                data:{"product_name":product_name, "color":color},
                url:"<?php echo base_url(); ?>admin/products",
                success:function(data){
                    alert(data);
                }
            });
        });
    });
</script>

<input type="text" class="form-control" id="product_name" name="product_name">
<input type="color" id="colorWell" name="color">
<input type="file" id="product_image" name="product_image[]" multiple>
<input type="submit" class="btn btn-primary" id="submit" name="submit">

контроллер:

public function products()
{
    $product_name = $this->input->post('product_name');
    $color = $this->input->post('color');

    $dataInfo = array();
    $files = $_FILES;
    $cpt = count($_FILES['product_image']['name']);
    for($i=0; $i<$cpt; $i++)
    {           
        $_FILES['product_image']['name']= $files['product_image']['name'][$i];
        $_FILES['product_image']['type']= $files['product_image']['type'][$i];
        $_FILES['product_image']['tmp_name']= $files['product_image']['tmp_name'][$i];
        $_FILES['product_image']['error']= $files['product_image']['error'][$i];
        $_FILES['product_image']['size']= $files['product_image']['size'][$i];    

        $this->upload->initialize($this->set_upload_options());
        $this->upload->do_upload();
        $dataInfo[] = $this->upload->data();
    }
    $data = array(
            'product_name' => $product_name,
            'color' => $color,
            'product_image' => implode(",",$dataInfo['product_image']),
        );
    $result_set = $this->db->insert('add_product',$data);
    if($sql == true)
    {
        echo 'New Product Added';
    }
    else
    {
        echo 'Unable to Proceed!';
    }
}

private function set_upload_options()
{   
    $config = array();
    $config['upload_path'] = ''.base_url().'resource/product/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size']      = '0';
    $config['overwrite']     = FALSE;
    return $config;
}

В этом коде я пытаюсь вставить и хочу переместить изображение в папку.Но теперь проблема в том, что когда я нажимаю на кнопку отправки, выдается ошибка, как показано ниже:

Message: Undefined index: product_image

и запрос выглядит так:

INSERT INTO `product` (`product_name`, `color`, `product_image`) VALUES ('men hoodies','#004080', NULL)

Я не знаю, где яЯ делаю неправильно.Итак, как я могу решить эту проблему?Пожалуйста, помогите мне.

Спасибо

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Отправьте все форм-данные с файлом в вашем ajax.

HTML-код, подобный этому ...

<form method="POST" id="YourFormID" enctype="multipart/form-data">
<input type="text" class="form-control" id="product_name" name="product_name">
<input type="color" id="colorWell" name="color">
<input type="file" id="product_image" name="product_image[]" multiple>
<input type="submit" class="btn btn-primary" id="submit" name="submit">
</form>

Код Ajax здесь ....

<script type="text/javascript">
$(document).ready(function(){
    $("#submit").click(function(e){
        e.preventDefault();
        var formData = new FormData($('form#YourFormID')[0]);
        $.ajax({
            type:"POST",
            data:formData,
            url:"<?php echo base_url(); ?>admin/products",
            success:function(data){
                alert(data);
            }
        });
    });
});
</script>

Вы не отправляете файл в своем запросе ajax.следовательно не найден индекс product_image

0 голосов
/ 02 января 2019

Вы не предоставили данные файлов.Используйте formData для загрузки файлов данных и добавьте любой другой ввод, который вы хотите добавить к formData:

<script>
    $(document).ready(function(){
        $("#submit").click(function(e){
            e.preventDefault();
            product_name = $("#product_name").val();
            color = $("#colorWell").val();
            var formData = new FormData();
            $.each($("#product_image"), function (i, obj) {
                $.each(obj.files, function (j, file) {                    
                    formData.append('product_image[' + i + ']', file);
                });
            });
            formData.append('product_name', product_name);
            formData.append('color', color);
            $.ajax({
                type:"POST",
                data:formData,
                processData: false,
                contentType: false,
                url:"<?php echo base_url(); ?>admin/products",
                success:function(data){
                    alert(data);
                }
            });
        });
    });
</script>
0 голосов
/ 02 января 2019

используйте array_column, как показано ниже, чтобы добавить все значения product_image

implode(",",array_column($dataInfo, 'product_image'))
...