테스트 사이트 - 개발 중인 베타 버전입니다

특정 배열만 ajax 업데이트 채택완료

SㅣR어드민 4년 전 조회 1,964

<input type="text" name="seller[]" id="seller_<?php echo $n-1; ?>" value="<?php echo $seller[$n-1];?>">

이렇구요,

 

        var bo_table = $('#bo_table').val();
        var wr_id = $('#wr_id').val();
        var seller = $("#seller_<?php echo $n-1;?>").val();

  

        $.ajax({
            url: "<?php echo $board_skin_url?>/ajax.update.php",
            type: "POST",
            data: {

                "bo_table": bo_table,
                "wr_id": wr_id,            
                "seller": seller

            },

            dataType : "json",
            cache: false,


            error:function(){
                alert("error");
            },

            success:function(data){

                sql = data.sql;

            }

        });

 

업데이트는 이렇습니다.

$wr_id = $_POST['wr_id'];
$seller = implode('|', $_POST['seller']);

 

$sql = " update g5_write_test set  
seller = '$seller' where wr_id = '$wr_id' ";
sql_query($sql); 

 

문제는 인풋하고 업데이트 부분인거 같습니다.

도움을 기다려봅니다.

몇번째 배열을 수정할건지는 그때그때 정해지지 않았습니다.

거의 다된거 같은데 여기서 막히네요,

코드 500줄 줄일수 있는건데....

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
4년 전

seller필드에 대한 설명이 부족한데 ajax.update.php를 보아서는

seller 배열값을 합쳐서 넣은 것 같은데 특정 배열만 수정한다고 해도 배열값을 모두 넘기고 이것을 합쳐야 하는데 배열값 하나만 넘기면 안되죠

넘기기전에 모두 합쳐서 넘기세요

<input type="text" name="seller[]" class='sellerk'~~~<== 모두 class 부여

  var seller = $("#seller_<?php echo $n-1;?>").val(); <== 삭제 후 다음코드를 이 자리에 추가

seller=deli='';

$(".sellerk").each(function(){

  seller+= deli+$(this).val(); deli ='|';

});

------------------------------

$seller = implode('|', $_POST['seller']); <-- upate화일에서 삭제

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

S
SㅣR어드민
4년 전
뭔가 서광이 비치는거 같습니다. 열심히 삽질 해보겠습니다. ㅋ 그런데 도사님은 그냥 지나가실거죠? ㅋ 암튼 감사합니다.
S
SㅣR어드민
4년 전
도사님 가셨나요? ㅎㅎ 그런데 수정이 이를테면 5번째 배열을 수정해도
배열이 사라져버리고
seller이 일반필드처럼 한곳만 수정되어 버리네요..

아 <input type="text" name="seller[]" class='sellerk' value="<?php echo $seller[$n-1];?>" > 이게 하나만 있어서
그런가 봅니다.
어떻게 해야할지..이를테면 (그때그때 변동될 수 있는)특정배열 한개만 수정하려는건데
배열이 60개면
<input type="text" name="seller[]" class='sellerk' 이게 60개나 있어야 할지....
균이
4년 전
<input type="text" name="seller[]" class='sellerk' 이게 60개나 있어야 할지....
<-- 이런 상황이고 input 태그 하나만 사용하고 싶다면 질문 자체를 그렇게 해야지요
보통 수정페이지라면 처음 입력 페이지와 동일한 입력 구조를 가지고 있을 것이라 가정하는데
그게 아니라면 먼저한 답변은 전혀 정답이 아닙니다
input name이 배열이 되어야할 이유도 없는 것이고....

위 답변 무시하고 아래처럼 하세요

data: {
"bo_table": bo_table,
"wr_id": wr_id,
"seller": seller, "idx" : <?=n-1?> <--- 추가
},

update 화일에서
$seller = trim($_POST['seller']);
$tmp = explode('|', $write['seller']);
$tmp[$idx] = $seller;
$seller2 = implode('|', $tmp);
sql_query(" update g5_write_test set seller = '$seller2' where wr_id = '$wr_id' ");
S
SㅣR어드민
4년 전
정말 감사합니다~ 운좋게 도사님을 다시 뵙게 되어 기쁩니다. 복받으실 겁니다.

댓글을 작성하려면 로그인이 필요합니다.

html이 어떻게 구성되어 있는지 몰라서 추측만 할 뿐입니다.

해당 input에서 커서가 아웃될 때 그것만 처리하면 되지 않을까요?

$("인풋.클래스").on("blur", function() {

   $.ajax ~~~

});

로그인 후 평가할 수 있습니다

답변에 대한 댓글 10개

S
SㅣR어드민
4년 전
<input type="text" name="seller[]" id="seller_<?php echo $n-1; ?>" value="<?php echo $seller[$n-1];?>"> 은 이렇게 되어있습니다.

예를들어 n-1=4이면
seller_4의 배열 즉 4번째 배열을 지정할때 name="seller[]" 이걸 어떻게 해야하는지와
이 배열만 업데이트하려고 하는데 업데이트 처리에서 구문을 잘 모르겠씁니다.
쟁반짜장
4년 전
해당 페이지 html을 보여 주세요.
php 코드가 들어간 것 말구요.
브라우저에서 소스 보기로 해서 보이는 html 태그만요.
S
SㅣR어드민
4년 전
개발자검사해보니
<input type="text" name="seller[]" id="seller_0" value="대한민국" >
인풋부분은 이렇구요
콘솔보니

var n = <?php echo $n-1;?>;
var seller = $("#seller_<?php echo $n-1;?>").val();


console.log(n);
console.log(seller);

몇번째인지 n하고
인풋에서 전달하는
seller 값은

0
VM405735:14 대한민국
잘 나옵니다


하단부분에
데이터 처리하고

console.log(n);
console.log(seller[n]);
이렇게 찍어보니


VM405735:52 0
VM405735:55 대
이렇게 나오구요 alert("error"); 에러나오네요

결론은 이부분일거 같구요

error:function(){
alert("error");
},

success:function(data){

sql = data.sql;

}


업데이트 sql은

$wr_id = $_POST['wr_id'];
$seller = implode('|', $_POST['seller']);


$sql = " update g5_write_test set seller = '$seller' where wr_id = '$wr_id' ";
sql_query($sql);
이렇습니다. 제생각에 이부분도 수정하고자 하는 배열 위치가 안맞아서 그런거 같습니다.
말하자면 제가 보낸거는 배열의 n 번째를 보내고
업데이트는 그냥 배열전체이다보니 야가 정신을 못차리는거 같습니다요 ㅋㅋ
쟁반짜장
4년 전
혹시 seller라는 게 디비엔 어떻게 저장이 되어 있나요?
아래에 쓰신 걸 보니 seller라는 input에 있는 값들이 그냥 a|b|c 이런 식으로 저장이 되어 있는 건가요?
이런 식으로 되어 있는 거라면 그냥 name="seller[]"라고 된 input의 값들을 전부 뭉쳐서 전송하는 게 나을 것 같습니다.
S
SㅣR어드민
4년 전
뭉쳐서 보낸다면 몇번째 (n)인지 정해진게 아니라서 보내는 문제보다는 ajax를 for문돌려야 할거 같아서 ajax문이 엉청 길어질거 아닐까요?
쟁반짜장
4년 전
<input type="text" name="seller[]" id="seller_<?php echo $n-1; ?>" class="seller" value="<?php echo $seller[$n-1];?>">
위처럼 input에 class를 주고 input에서 커서가 아웃될 때마다 input.seller인 애들 값만 뭉쳐서 다음 페이지로 넘기는 식으로 하시면 되지 않을까 싶네요.
그리고 저거 받는 페이지에서는
UPDATE g5_write_".$_POST['bo_table']." seller = '".$_POST['seller']."' WHERE wr_id = ".$_POST['wr_id'];
이런 식으로 하시면 될 것 같습니다.

$(".seller").on("blur", function() {
let seller = $(".seller").map(function() {
return $(this).val();
}).get().join("|");
$.ajax({
생략
data: {
bo_table,
wr_id,
seller
},
생략
});
});
S
SㅣR어드민
4년 전
아 감사합니다. 설명들으니 될거 같습니다. ㅎㅎ
S
SㅣR어드민
4년 전
감사합니다.!! 그런데 복병이 생겼습니다. 글에 따라
seller배열이 50개일수도 32개 100개일 수도 있습니다.

이경우 대체로 몇개만 수정할거라 변경하려는 위치의 배열만 깔금하게 수정시키려했는데
알려주신 방향으로 하면 나머지 수정되지 않은 배열필드도 있어야 하네요..
그리고 배열갯수가 정해지지 않아 이걸 for문으로 배열필드를 히든으로 만들어주고 해야 하는 문제가 있지 않을까요?
쟁반짜장
4년 전
let seller = $(".seller").map(function() {
return $(this).val();
}).get().join("|");
seller라는 변수에 input.seller인 것들의 값을 모두 한 덩어리로 뭉칩니다.
굳이 신경 안 쓰셔도 되지 않을까 싶네요.
S
SㅣR어드민
4년 전
덕분에 뭉쳐서 넘기는 방법으로 했습니다. 값 변경할 필드 하나두고
이게 변경되면 class로 여러 배열중에 그게 변경되게하고
그런뒤에 말씀하신대로 뭉쳐서 넘기는 거로 했습니다. 시간 내주셔서 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

그누위즈

몇번째 배열을 수정할건지 정해지지도 않았는데

어떻게 특정 배열만 ajax를 업데이트 할수있나요?

"특정 배열만" 이라고 한다면 해당 말씀하시는 "특정"이라는 조건이 반드시 필요합니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

S
SㅣR어드민
4년 전
설명이 부족했습니다.
<?php echo $n-1; ?> 이게 몇번째 배열을 수정할지를 정하게 됩니다.
몇번째인지 이게 알려주게 됩니다.
그누위즈
4년 전
그렇다면 그냥 조건을 넣으면 끝아닐까요?

[code]
var bo_table = $('#bo_table').val();
var wr_id = $('#wr_id').val();
var seller = $("#seller_<?php echo $n-1;?>").val();


// seller 값이 1이면 ajax 실행
if (seller == 1) {

$.ajax({
url: "<?php echo $board_skin_url?>/ajax.update.php",
type: "POST",
data: {

"bo_table": bo_table,
"wr_id": wr_id,
"seller": seller

},

dataType : "json",
cache: false,


error:function(){
alert("error");
},

success:function(data){

sql = data.sql;

}

});

}
[/code]
S
SㅣR어드민
4년 전
감사합니다~~!! ajax구문에는 이상이 없구요

예를들어 n-1=4라면

seller배열중 4번째 |||여기|||
를 지정하는 인풋하고

이것만 업데이트하는 구문을 어떻게 해야 할지 몰라서 그렇습니다.
S
SㅣR어드민
4년 전
감사합니다~~!! ajax구문에는 이상이 없구요

예를들어 n-1=4라면

seller배열중 4번째 |||여기|||
를 지정하는 인풋하고

이것만 업데이트하는 구문을 어떻게 해야 할지 몰라서 그렇습니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인