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

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

QA

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

본문

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

도움 부탁드립니다.

 

현재 관리자 상품등록 페이지에서 파일첨부후 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값을 반복문으로  처리해서 받아야 하는건가요??

답변을 작성하시기 전에 로그인 해주세요.
전체 16,792
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT