특정 배열만 ajax 업데이트

특정 배열만 ajax 업데이트

QA

특정 배열만 ajax 업데이트

본문

<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

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화일에서 삭제

 

 

도사님 가셨나요? ㅎㅎ 그런데 수정이 이를테면 5번째 배열을 수정해도
배열이 사라져버리고
seller이 일반필드처럼 한곳만 수정되어 버리네요..

아 <input type="text" name="seller[]" class='sellerk' value="<?php echo $seller[$n-1];?>" > 이게 하나만 있어서
그런가 봅니다.
어떻게 해야할지..이를테면 (그때그때 변동될 수 있는)특정배열 한개만 수정하려는건데
배열이 60개면
<input type="text" name="seller[]" class='sellerk' 이게 60개나 있어야 할지....

<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' ");

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

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

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

그렇다면 그냥 조건을 넣으면 끝아닐까요?


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;

		}

	});

}

감사합니다~~!! ajax구문에는 이상이 없구요

예를들어 n-1=4라면

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

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

감사합니다~~!! ajax구문에는 이상이 없구요

예를들어 n-1=4라면

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

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

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

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

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

   $.ajax ~~~

});

<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[]" 이걸 어떻게 해야하는지와
이 배열만 업데이트하려고 하는데 업데이트 처리에서 구문을 잘 모르겠씁니다.

개발자검사해보니
<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 번째를 보내고
업데이트는 그냥 배열전체이다보니 야가 정신을 못차리는거 같습니다요 ㅋㅋ

혹시 seller라는 게 디비엔 어떻게 저장이 되어 있나요?
아래에 쓰신 걸 보니 seller라는 input에 있는 값들이 그냥 a|b|c 이런 식으로 저장이 되어 있는 건가요?
이런 식으로 되어 있는 거라면 그냥 name="seller[]"라고 된 input의 값들을 전부 뭉쳐서 전송하는 게 나을 것 같습니다.

<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
      },
      생략
  });
});

감사합니다.!! 그런데 복병이 생겼습니다. 글에 따라
seller배열이 50개일수도 32개 100개일 수도 있습니다.

이경우 대체로 몇개만 수정할거라 변경하려는 위치의 배열만 깔금하게 수정시키려했는데
알려주신 방향으로 하면 나머지 수정되지 않은 배열필드도 있어야 하네요..
그리고 배열갯수가 정해지지 않아 이걸 for문으로 배열필드를 히든으로 만들어주고 해야 하는 문제가 있지 않을까요?

let seller = $(".seller").map(function() {
  return $(this).val();
}).get().join("|");
seller라는 변수에 input.seller인 것들의 값을 모두 한 덩어리로 뭉칩니다.
굳이 신경 안 쓰셔도 되지 않을까 싶네요.

덕분에 뭉쳐서 넘기는 방법으로 했습니다. 값 변경할 필드 하나두고
이게 변경되면 class로 여러 배열중에 그게 변경되게하고
그런뒤에 말씀하신대로 뭉쳐서 넘기는 거로 했습니다. 시간 내주셔서 감사합니다.

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

회원로그인

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