파일첨부중 ajax로 데이터를 넘긴후에 db에 insert에서 문제발생.조언부탁드립니다. 채택완료
떡배
4년 전
조회 1,756
영카트 상품등록시 이미지를 멀티로 받아 처리해볼려고 에를 쓰고있는뎅~~ 실력이 안되서
도움 부탁드립니다.
현재 관리자 상품등록 페이지에서 파일첨부후 ajax로 데이터를 보내서 it_id로 폴더생성후 이미지를 넣는것까지는 되었습니다.
근데 db에 img_1,img_2.... 이곳에 url 값을 넣어줘야 하는데
아래의 이곳이라는곳에 파일명을 받고싶은데 무엇을 넣어줘야할까요???
ajax소스는 아래와 같습니다.
</p>
<p>$('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]);
}</p>
<p> data.append('it_id', it_id);</p>
<p> </p>
<p> <span style="color:#e74c3c;"> $.ajax({
url: "./imageupload.php",
type: 'POST',
contentType: false,
data: data,
processData: false,
cache: false,
success: function(response, textStatus, jqXHR) {
}
});</span>
}); </p>
<p>
imageupload.php소스는 아래와 같습니다.
</p>
<p> </p>
<p>if(isset($_FILES)){
$it_id = $_POST['it_id'];
$i = 1;
foreach($_FILES as $key => $data){</p>
<p> $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']);
$i++;
}
<strong>$sql = "insert {$g5['g5_shop_item_table']}
set it_id = '$it_id',
it_img1 = '$it_id/<span style="color:#e74c3c;">이곳(파일명)</span>',
it_img2 = '$it_id/<span style="color:#e74c3c;">이곳(파일명)</span>' ";
sql_query($sql);</strong>
}</p>
<p>
댓글을 작성하려면 로그인이 필요합니다.
답변 2개
채택된 답변
+20 포인트
4년 전
여러개의 이미지를 첨부해도 한개만 등록이 되고있습니다.
이게 무슨말인지 잘 모르겠네요.
소스상에서는 form으로 넘기고, foreach로 해당 첨부파일을 로프하면서 넣으시는데
정확히 어떤 의미인지 잘모르겠습니다.
예를들어 it_img1~10까지 다 첨부를 했는데
it_img1만 넣고 싶다 그런의미인가요?
로그인 후 평가할 수 있습니다
답변에 대한 댓글 4개
�
떡배
4년 전
�
그누위즈
4년 전
뭐 대략 이런식이면 안될까요?
[code]
<?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++;
}
}
?>
[/code]
[code]
<?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++;
}
}
?>
[/code]
�
떡배
4년 전
그누위즈님 최고!! 감사합니다^^
�
그누위즈
4년 전
사실 더 간략하게 코드를 구성 할 수 도있지만...
그냥 개념을 심어드리게 위해서 해당 방식으로 보여드렸습니다.
뭐 이정도 코드라고 하더라도, 속도에 크게 지장이 되지는 않을거라서
이대로 사용하셔도 무방할거 같습니다.
가능하면 update문을 1번만 사용하게 하거나
insert시 이미지1~10까지 들어가게 하는게 가장 좋은 방법이나
어짜피 상품1개를 등록할때 update문이 10개가 실행되어도
속도 측면에서는 체감안될 정도 일겁니다.
그리고 추가로
foreach문에서는 해당 파일이 존재하는지 여부를 판단 후
continue;로 뒤 코드는 실행이 되지않게도 하는게 좋을듯하네요.
그냥 개념을 심어드리게 위해서 해당 방식으로 보여드렸습니다.
뭐 이정도 코드라고 하더라도, 속도에 크게 지장이 되지는 않을거라서
이대로 사용하셔도 무방할거 같습니다.
가능하면 update문을 1번만 사용하게 하거나
insert시 이미지1~10까지 들어가게 하는게 가장 좋은 방법이나
어짜피 상품1개를 등록할때 update문이 10개가 실행되어도
속도 측면에서는 체감안될 정도 일겁니다.
그리고 추가로
foreach문에서는 해당 파일이 존재하는지 여부를 판단 후
continue;로 뒤 코드는 실행이 되지않게도 하는게 좋을듯하네요.
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 2개
�
떡배
4년 전
답변감사합니다.좀 더 여쭈어봅니다.
엑스엠엘님 말씀대로
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 = "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값을 반복문으로 처리해서 받아야 하는건가요??
엑스엠엘님 말씀대로
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 = "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값을 반복문으로 처리해서 받아야 하는건가요??
�
엑스엠엘
4년 전
data.append('files' + i, storedFiles[item_number]);
여기를
data.append('files[]' + i, storedFiles[item_number]);
이렇게 해야 php에서 배열로 인식해서 foreach()가 돌 것 같습니다.
여기를
data.append('files[]' + i, storedFiles[item_number]);
이렇게 해야 php에서 배열로 인식해서 foreach()가 돌 것 같습니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
현재 2개의 이미지를 첨부해서 보내면
move_uploaded_file($data['tmp_name'],$targetDir.'/'.$data['name']); 통해서 it_id 폴더를 생성하고 그안에 이미지 두개는 생성이 잘됩니다. 문제는 생성된 이미지 url주소를 it_img1,it_img2에 넣고 싶은데 방법을 모르겠습니다^^
$data['name'] ---> 이걸 넣어보면 첫번째 파일이름만 나와서요..