파일첨부중 ajax로 데이터를 넘긴후에 db에 insert에서 문제발생.조언부탁드립니다. 채택완료
영카트 상품등록시 이미지를 멀티로 받아 처리해볼려고 에를 쓰고있는뎅~~ 실력이 안되서
도움 부탁드립니다.
현재 관리자 상품등록 페이지에서 파일첨부후 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년 전
사실 더 간략하게 코드를 구성 할 수 도있지만...
그냥 개념을 심어드리게 위해서 해당 방식으로 보여드렸습니다.
뭐 이정도 코드라고 하더라도, 속도에 크게 지장이 되지는 않을거라서
이대로 사용하셔도 무방할거 같습니다.
가능하면 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'] ---> 이걸 넣어보면 첫번째 파일이름만 나와서요..