새해 복만이 받으세요 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와 자바스크립트를 분리해서 코드를 짜 드리겠습니다
"$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] 까지 출력
}
" 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 에는
인풋의 첫번째 값 | 인풋의 두번째 값 |인풋의 세번째 값 |인풋의 네번째 값 |인풋의 다섯번째 값
위의 형태로 파이프라인을 기준으로 값이 들어가 있을것입니다
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| 혹은 글일 경우 물음표등의 깨진 글자로 보여지게 돕니다
안되면 다시 댓글 다세요
값 자체가 만들어져 있지를 않은거 같은데요
즉 자바스크립트의
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
정상 입력된다니 다행이네요
즐거운 설날되세요 : )