새해 복만이 받으세요 ajax 배열인데요

새해 복만이 받으세요 ajax 배열인데요

QA

새해 복만이 받으세요 ajax 배열인데요

본문

  명칭:   <input type="text" name="item" value="<?php echo $list[$i]['item'] ?>" id="item<?php echo $list[$i]['wr_id'] ?>" data-wr_id="<?php echo $list[$i]['wr_id'] ?>" data-bo_table="<?php echo $bo_table?>" size="10"> 

 

    

ajax는 아래구요.

 

       var wr_id = $(this).data("wr_id");
        var bo_table = $(this).data("bo_table");
        var item = $('#item<?php echo $list[$i]['wr_id'] ?>').val();
 

        $.ajax({
            url: g5_bbs_url+"/ajax.update.list.php",
            type: "POST",
            data: {
                "wr_id": wr_id,
                "bo_table": bo_table,
                "item": item
 
            },
            dataType: "json",
            async: false,
            cache: false,
            success: function(data, textStatus) {
                sql = data.sql;


            }
        });

 

이렇게 넘기고

 

$wr_1 = $write['wr_1'].'\n'. $member['mb_name']."".date('Y-m-d H:i:s').'(L)■'; //수정일

$sql = " UPDATE  `g5_write_".$bo_table."` SET  `wr_1` =  '".$wr_1."', `item` =  '".$item."'   WHERE  `wr_id` =".$wr_id." LIMIT 1 ;";
$row = sql_fetch($sql);

 

이렇게 저장하는데 잘됩니다.

 

그런데 $item을 배열로 할때는 어떻게 해야 하는지요?

리스트에서 사용하는겁니다. 

 

도움을 기다려봅니다.

 

이 질문에 댓글 쓰기 :

답변 7

$sql = " UPDATE  `g5_write_".$bo_table."` SET  `wr_1` =  '".$wr_1."', `item` =  '".$item_ary."  WHERE  `wr_id` =".$wr_id." LIMIT 1 ;";

 

에서 $item_ary 에 정확히 어떠한 값이 들어가야 하나요

 

우선 디버깅이 필요한 시점이니 아래와 같이 해보세요

 

$item      =  isset($_POST['item']) ? $_POST['item'] : '';

echo "디비에 입력되는 값 => ".$item;

exit;

 

자바스크립트 단은 다음과 같이 고치세요 

 

        $.ajax({
            url: g5_bbs_url+"/ajax.update.list.php",
            type: "POST",
            data: {
                "wr_id": wr_id,
                "bo_table": bo_table,
                "item": item
 
            },
            dataType: "text",
            async: false,
            cache: false,
            success: function(data, textStatus) {

console.log(item);

console.log(data);
            }
        });

 

위와 같이 작성후

크롬 브라우저에서 f12번키를 누르면 개발자 콘솔창이 뜹니다

위에 메뉴 보면 Elements Console과 같은 메뉴가 보이실거예요

Console을 누르신후 

완료 ( 저장 ) 버튼을 누르시면

디비로 넘기는 item 값과

디비에서 불려지는 $item 값이 나올겁니다

 

그 값을 알려주세요

특히 두번째 칸에 적힌 디비에 저장되는 값이 어떠한 형태인지  

구분자를 이용해서 하나의 문장형 데이터인지 ( 111|222|333 ) 또는

배열형태인지를 알면 될거 같습니다 ( arrray(키:키값, .....); )

 

즉 디버깅해서 나온 값을 토대로 작업을 해야 고생을 덜 하실거 같습니다 

답글 남기세요

 

그리고 5개의 필드에 들어가는 아이템 때문에 

for 문을 활용하신다고 했는데

되도록이면 자바스크립트와 php문은 섞어서 쓰지 않아야 코드 짜실때 불편한 상황이 덜 할것입니다

이부분도 html상에서 어떻게 표시 되는지 같이 적어 주시면

php와 자바스크립트를 분리해서 코드를 짜 드리겠습니다

 

 

 

var item1 = $('#item<?php echo $list[$i]['wr_id'] ?>_0').val();
        var item2 = $('#item<?php echo $list[$i]['wr_id'] ?>_1').val();
        var item3 = $('#item<?php echo $list[$i]['wr_id'] ?>_2').val();

        var item  = item1 + "|" + item2 + "|" + item3 ;  이렇게 하니

값을 전달하는거 같습니다. 리스트에 글이 많은데..해당글의 아이디값때문에 그런거 였네요,

11111111111|22222222222|3333333333
board.php?bo_table=acco:4836 디비에 입력되는 값 => 11111111111|22222222222|3333333333

 "$item을 배열로 할때는"  좀더 설명 부탁해도 될까요

ajax에서 배열로 넘겨  저장되는 php부분에서 배열을 받고 싶다는 뜻인가요

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

ajax의 

 dataType: "json", 이부분을 우선 

 dataType: "text",   로 고치시고

 

            success: function(data, textStatus) {
                sql = data.sql;

 위의 부분을

            success: function(data, textStatus) {

alert(data); // 추가된 부분
                sql = data.sql;

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

위와 같이 고쳐서 테스트 해보세요

ajax의 데이터 타입을  텍스트 형태로 고쳐서 우선 받아지는 부분에서 어떻게 처리되는지 알러트로

확인할 수 있습니다 

 

제이슨 타입으로도 확인 가능하지만 텍스트 타입으로 우선 고쳐서 확인하시면 디버깅하기가 편합니다

 

짐작으로는 아작스에서 배열을 만들어   ajax.update.list.php 파일로 넘겨 사용하고 싶으신거 아닌가 싶은데 만약 그렇다면

 

자바스크립트의 
        var item0 = $('#item<?php echo $list[0]['wr_id'] ?>').val();
        var item1 = $('#item<?php echo $list[1]['wr_id'] ?>').val();
        var item2 = $('#item<?php echo $list[2]['wr_id'] ?>').val();

 

        var item  = [item0,  item1, item2]; // 값을 배열로 받음 

 

위와 같이 몇개 안되면  item을 배열로 넘기구 

ajax.update.list.php 에서는

받은 배열을 기준으로 풀어서 아래와 같이 사용합니다

 

$item  = isset($_POST['item']) ? $_POST['item'] : ''; // ajax에서 post로 받은 $item 배열을 변수에 저장

 

$item[0] 으로 호출하면  자바스크립트의 item0의 값이 들어 있습니다

$item[1] 으로 호출하면  자바스크립트의 item1의 값이 들어 있습니다

$item[2] 으로 호출하면  자바스크립트의 item2의 값이 들어 있습니다

 

$item으로 쓰면 배열 전체를 말하는 거므로 입려등에서는 오류가 날수 있으므로 위와 같이 배열을 지정해야 합니다

 

 

 

 

배열 값이 한두개면 위와 같이 풀어써도 되지만 다량의 값이면 일일이 써주는것도 힘이 드니

for문을 활용해서 불러들이고 출력하면 됩니다 

var item_len =전체갯수;

var item  = [ ]; // 값을 배열로 받음 

for(vari=0; i<item_len ; i++){

    item[i] = 아이템의 값; // item의 값을 item 배열에 넣음

}

 

for($i=0; $i<count($item); $i++){

    echo $item[$i];  // $item[0] ~  $item[2] 까지 출력

}

 

 

 

 

 

 

 

 

대략은 이해가 되는데 적용하려니 어려움이 많습니다.
item이라는 필드가 분할 필드입니다. $item = explode("|", $write['item']);
그래서 리스트페이지에서 아작스로 바로 수저가능하게 모달창에 인풋으로 띄웠습니다.
<? for($k=0; $k<5; $k++ { ?>
 <input type="text" name="item[]" value="<?php echo $item[$k] ?>" id="item<?php echo $list[$i]['wr_id'] ?>_<?=$k?>" data-wr_id="<?php echo $list[$i]['wr_id'] ?>" data-bo_table="<?php echo $bo_table?>" >
<? } ?>

인풋기입하고
아작스 거쳐서 g5_bbs_url+"/ajax.update.list.php 에서
저장을 하려는데 어떻게 해야 item필드의 분할로 저장될지 해서요,,
현재 item필드를 분할로 하지 않고 단일 필드로 하면 잘 저장되거든요..

" name="item[ ]"    <=  인풋에서 이미 배열로 받을수 있도록 선언했으므로

 

 g5_bbs_url+"/ajax.update.list.php 에서 

$item  = isset($_POST['item']) ? $_POST['item'] : '';// $item이란 변수에 post로 넘겨받은 $_POST['item'] 값저장

echo $item;

으로 찍으면 아마 배열 자체라 오류메세지가 나올겁니다

echo"<pre>";

print_r($item);

echo"</pre>";

 

위와 같이 print_r을 이용해서 $item변수를 출력해 보면 배열에 들어간 값을 보실수 있습니다

 

$item 자체가 배열이므로 아래와 같이 접근하면 될듯합니다

 

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

$item      =  isset($_POST['item']) ? $_POST['item'] : '';

$item_ary = ""; // $item 배열을 구분자를 통한 형태로 넣기 위한 변수

$item_len = count($item);

for($i=0; $i<$item_len; $i++){

    $item_ary .= $item[$i]."|";

}

 

$wr_1 = $write['wr_1'].'\n'. $member['mb_name']."".date('Y-m-d H:i:s').'(L)■'; //수정일

 

$sql = " UPDATE  `g5_write_".$bo_table."` SET  `wr_1` =  '".$wr_1."', `item` =  '". $item_ary."'   WHERE  `wr_id` =".$wr_id." LIMIT 1 ;";

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

 

$item_ary 에는   

인풋의 첫번째 값 | 인풋의 두번째 값 |인풋의 세번째 값 |인풋의 네번째 값 |인풋의 다섯번째 값  

위의 형태로 파이프라인을 기준으로 값이 들어가 있을것입니다

 

 

 

 

 

 

 

 

뭔가 변화가 있습니다.
분할필드에
1111
2222
3333 이렇게 넣고 했더니

item 필드에 1| 이렇게만 들어가네요
테스트라고 기입하면

?| 이렇게 저장되구요

<?
$item = explode("|", $write['item']); //아이템
for ($k=0; $k<5; $k++) { ?>

  <div style="padding:5px"> 
  명칭:  <input type="text" name="item[]" value="<?php echo $item[$k] ?>" id="item<?php echo $list[$i]['wr_id'] ?>_<?=$k?>" data-wr_id="<?php echo $list[$i]['wr_id'] ?>" data-bo_table="<?php echo $bo_table?>" size="10">
 </div>
<? } ?>
이렇구요 버튼은 이렇게 했습니다.

<span  id="button_<?php echo $list[$i][wr_id]; ?>" data-wr_id="<?php echo $list[$i][wr_id]; ?>" data-bo_table="<?php echo $bo_table?>" data-item="<?php echo $item; ?>" >저장</span>

item 필드에 정확히 어떠한 값이 들어가야 하나요

 

1111|2222|3333

 

위와 같이 값이 들어가야 하나요

 

글을 실컷 쓰고 컴퓨터가 꺼지는 바람에 다시 씁니다

 

입력 받는 곳에서 필드에 저장될 값이 1111|2222|3333 와 같이 들어가야 한다면

넘겨주는 곳에서 1111|2222|3333 와 같이 만들어서 넘겨주면 됩니다

필드 = 1111|2222|3333

만약 각각의 필드에   필드1=111   필드2=222 필드3=333 와 같이 쪼개서 들어가야 한다면

explode를 이용해서 쪼개서 넣어주면 되겠죠

 

그럼 넘겨주는 값만 만들어주면 되므로  아래와 같이 하면 될거 같습니다


        var item1 = $('#item<?php echo $list[0]['wr_id'] ?>').val();
        var item2 = $('#item<?php echo $list[1]['wr_id'] ?>').val();
        var item3 = $('#item<?php echo $list[2]['wr_id'] ?>').val();

        var item  = item1 + "|" + item2 + "|" + item2 ;

 

위와 같이 하면  

       var item = 아이템1의 값 | 아이템2의 값 | 아이템3의 값; 

와 같이 item 변수에 값이 들어갈거 같습니다

 

 

사족을 붙이면

var item 의 변수값에 하나의 아이템값만 들어가서 넘겨지고 하나의 값을 쪼개다 보니

1| 혹은 글일 경우 물음표등의 깨진 글자로 보여지게 돕니다

 

안되면 다시 댓글 다세요

 

 

 

 

여러가지로 해보았는데 역시 마찬가지네요 1| 이정도만 나옵니다...

1)리스트에서 분할로 띄우려니 <?
$item = explode("|", $list[$i]['item']);
for ($k=0; $k<5; $k++) { ?>
이렇게 해야 하구요,,, $i로 하면 리스트가 1개만 출력되서요,,

2)리스트다보니 버튼누른때 값을 전달해야 하는데  data-wr_id="<?php echo $list[$i][wr_id]; ?>" data-bo_table="<?php echo $bo_table?>" data-item="<?php echo $item; ?>" 이런식으로 안하면
데이터가 전송이 안되구요..

추정컨데 전달과정이나, 받아서 디비에 쓰는 과정이 뭔가 문제가 있는거 같습니다.

<?php
include_once('./_common.php');


$item      =  isset($_POST['item']) ? $_POST['item'] : '';
$item_ary = ""; // $item 배열을 구분자를 통한 형태로 넣기 위한 변수
$item_len = count($item);

for($i=0; $i<$item_len; $i++){

    $item_ary .= $item[$i]."|";


$wr_1 = $write['wr_1'].'\n'. $member['mb_name']."".date('Y-m-d H:i:s').'(L)■'; //수정일


$sql = " UPDATE  `g5_write_".$bo_table."` SET  `wr_1` =  '".$wr_1."', `item` =  '".$item_ary."  WHERE  `wr_id` =".$wr_id." LIMIT 1 ;";
$row = sql_fetch($sql);

}

//die("{\"sql\":\"$sql\"}");
?>

업데이트는 알려주신대로 이렇게 햇습니다.

값 자체가 만들어져 있지를 않은거 같은데요

즉 자바스크립트의 

var item=$('#item<?php echo $list[$i]['wr_id'] ?>').val();

 

위의 $('#item<?php echo $list[$i]['wr_id'] ?>').val(); 에 값이 들어 있지 않은듯 싶은데요

 

 

 

 

소스를 원래대로 돌려 놓고

아래와 같이 자바스크립트를 만들어서 값이 디비에 입력되는지 보세요

 

 var wr_id = $(this).data("wr_id");
        var bo_table = $(this).data("bo_table");
  //      var item = $('#item<?php echo $list[$i]['wr_id'] ?>').val();

        var item = "아이템1|아이템2|아이템3";

        $.ajax({
            url: g5_bbs_url+"/ajax.update.list.php",
            type: "POST",
            data: {
                "wr_id": wr_id,
                "bo_table": bo_table,
                "item": item
            },
            dataType: "json",
            async: false,
            cache: false,
            success: function(data, textStatus) {
                sql = data.sql;


            }
        });

 

 

디비 필드에 아래와 같이 입력이 되어 있는지 확인하세요

 

아이템1|아이템2|아이템3

 

 

 

 

 

 

 

 

감사합니다! 성공했습니다...
시간 많이 뺏어 미안하고 또 고맙습니다.
이거 만2일 동안 삽질하던거였는데...휴
1개필드할때는 되는데..분할필드라 그것도 리스트에서 하다보니 많이 어렵네요..
즐거운 설날되십시오,

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

회원로그인

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