파일첨부중 ajax로 데이터를 넘긴후에 db에 insert에서 문제발생.조언부탁드립니다.

파일첨부중 ajax로 데이터를 넘긴후에 db에 insert에서 문제발생.조언부탁드립니다.

QA

파일첨부중 ajax로 데이터를 넘긴후에 db에 insert에서 문제발생.조언부탁드립니다.

답변 2

본문

영카트 상품등록시 이미지를 멀티로 받아 처리해볼려고 에를 쓰고있는뎅~~ 실력이 안되서

도움 부탁드립니다.

 

현재 관리자 상품등록 페이지에서 파일첨부후 ajax로 데이터를 보내서 it_id로 폴더생성후 이미지를 넣는것까지는 되었습니다.

근데 db에 img_1,img_2.... 이곳에 url 값을 넣어줘야 하는데

아래의 이곳이라는곳에 파일명을 받고싶은데 무엇을 넣어줘야할까요???

 

ajax소스는 아래와 같습니다.

 


$('body').on('click', '.cvf_upload_btn', function(e){
                e.preventDefault();
                cvf_reload_order();
                var it_id = document.getElementById("it_id").value;
                //$(".cvf_uploaded_files").html('<p><img src = "loading.gif" class = "loader" /></p>');
                var data = new FormData();
                var items_array = $('.cvf_hidden_field').val();
                var items = items_array.split(',');
 
                for (var i in items){
                    var item_number = items[i];
                    data.append('files' + i, storedFiles[item_number]);
                    
                }
                data.append('it_id', it_id);
 
                $.ajax({
                    url: "./imageupload.php",
                    type: 'POST',
                    contentType: false,
                    data: data,
                    processData: false,
                    cache: false,
                    success: function(response, textStatus, jqXHR) {
                    }
                });
            }); 

 

 

imageupload.php소스는 아래와 같습니다.

 


 
if(isset($_FILES)){
   
    $it_id = $_POST['it_id'];
    $i = 1;
    foreach($_FILES as $key => $data){
        $targetDir = G5_DATA_PATH.'/item/'.$it_id.'/';
        (G5_DATA_PATH.'/item/'.$it_id, G5_DIR_PERMISSION);
        @chmod(G5_DATA_PATH.'/item/'.$it_id, G5_DIR_PERMISSION);
        move_uploaded_file($data['tmp_name'],$targetDir.'/'.$data['name']);
        $i++;
    }
         $sql = "insert {$g5['g5_shop_item_table']}
                   set it_id = '$it_id',
                   it_img1 = '$it_id/이곳(파일명)',
                   it_img2 = '$it_id/이곳(파일명)' ";
                   sql_query($sql);
}

이 질문에 댓글 쓰기 :

답변 2

여러개의 이미지를 첨부해도 한개만 등록이 되고있습니다.

이게 무슨말인지 잘 모르겠네요.

소스상에서는 form으로 넘기고, foreach로 해당 첨부파일을 로프하면서 넣으시는데

정확히 어떤 의미인지 잘모르겠습니다.

예를들어 it_img1~10까지 다 첨부를 했는데

it_img1만 넣고 싶다 그런의미인가요?

먼저 관심 감사드립니다^^
현재 2개의 이미지를 첨부해서 보내면
move_uploaded_file($data['tmp_name'],$targetDir.'/'.$data['name']); 통해서 it_id 폴더를 생성하고 그안에 이미지 두개는 생성이 잘됩니다. 문제는 생성된 이미지 url주소를 it_img1,it_img2에 넣고 싶은데 방법을 모르겠습니다^^
$data['name'] ---> 이걸 넣어보면 첫번째 파일이름만 나와서요..

뭐 대략 이런식이면 안될까요?


<?php
if(isset($_FILES)){
   
    $it_id = $_POST['it_id'];
    $i = 1;

	// 여기에서 최초 상품 insert
	$sql = "insert {$g5['g5_shop_item_table']} set it_id = '$it_id' ";

    foreach($_FILES as $key => $data){
        $targetDir = G5_DATA_PATH.'/item/'.$it_id.'/';
        @mkdir(G5_DATA_PATH.'/item/'.$it_id, G5_DIR_PERMISSION);
        @chmod(G5_DATA_PATH.'/item/'.$it_id, G5_DIR_PERMISSION);
        move_uploaded_file($data['tmp_name'],$targetDir.'/'.$data['name']);

		// 루프로 업데이트
		$sql = " update {$g5['g5_shop_item_table']} set it_img{$i} = '{$data['name']}' where it_id = '{$it_id}' " ; 
		sql_query($sql); 

        $i++;
    }

}
?>

사실 더 간략하게 코드를 구성 할 수 도있지만...
그냥 개념을 심어드리게 위해서 해당 방식으로 보여드렸습니다.
뭐 이정도 코드라고 하더라도, 속도에 크게 지장이 되지는 않을거라서
이대로 사용하셔도 무방할거 같습니다.
가능하면 update문을 1번만 사용하게 하거나
insert시 이미지1~10까지 들어가게 하는게 가장 좋은 방법이나
어짜피 상품1개를 등록할때 update문이 10개가 실행되어도
속도 측면에서는 체감안될 정도 일겁니다.

그리고 추가로
foreach문에서는 해당 파일이 존재하는지 여부를 판단 후
continue;로 뒤 코드는 실행이 되지않게도 하는게 좋을듯하네요.

loop(foreach)안으로 query 문(insert) 옮겨야겠네요.

답변감사합니다.좀 더 여쭈어봅니다.
엑스엠엘님 말씀대로

 foreach($_FILES as $key => $data){


        $targetDir = G5_DATA_PATH.'/item/'.$it_id.'/';
(G5_DATA_PATH.'/item/'.$it_id, G5_DIR_PERMISSION);
        @chmod(G5_DATA_PATH.'/item/'.$it_id, G5_DIR_PERMISSION);


        move_uploaded_file($data['tmp_name'],$targetDir.'/'.$data['name']);
     
    $sql = "insert {$g5['g5_shop_item_table']}
        set it_id = '$it_id',
it_img1 = '$it_id/{$data['name']}',
        it_img2 = '$it_id/{$data['name']}' ";
sql_query($sql);
     
        $i++;
    }
옮겼는데 같은파일명만 나오네요.. it_img1,it_img2값을 반복문으로  처리해서 받아야 하는건가요??

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 17
© SIRSOFT
현재 페이지 제일 처음으로