DB 필드에 많은 값이 차례대로 들어가고 차레대로 추출하는 법

DB 필드에 많은 값이 차례대로 들어가고 차레대로 추출하는 법

QA

DB 필드에 많은 값이 차례대로 들어가고 차레대로 추출하는 법

본문

안녕하세요.

초보가 작업중에 도저히 감을 잡지 못하는 것이 있어서 고수님의 도움을 받아볼까 합니다.

 

 

우선 게시판을 이용하여 차량등록 서비스 스킨을 만들어 보고 있습니다.

자동차를 등록시키는 게시판인데 자동차에 많은 옵션이 있다보니

이 옵션하나에 필드 하나를 사용하는 것은 무리라고 판단해서 이것저것을 검색하고

비슷한 스킨을 다운 받아 보고 했는데 답이 나오지 않네요 ㅠ_ㅠ

 

먼저...

write.skin.php 파일에 아래와 같이 체크박스로 입력을 받습니다.

 

<label for='c_option_썬팅'><input type='checkbox' name='c_option[]' value='썬팅' id='c_option_썬팅'> 썬팅</label>

<label for='c_option_자동도어잠금'><input type='checkbox' name='c_option[]' value='자동도어잠금' id='c_option_자동도어잠금' > 자동도어잠금</label>

<label for='c_option_파워핸들'><input type='checkbox' name='c_option[]' value='파워핸들' id='c_option_파워핸들' > 파워핸들</label>

<label for='c_option_파워윈도우'><input type='checkbox' name='c_option[]' value='파워윈도우' id='c_option_파워윈도우' > 파워윈도우</label>

<label for='c_option_알루미늄휠'><input type='checkbox' name='c_option[]' value='알루미늄휠' id='c_option_알루미늄휠' > 알루미늄휠</label>

<label for='c_option_에어컨'><input type='checkbox' name='c_option[]' value='에어컨' id='c_option_에어컨' > 에어컨</label>

<label for='c_option_광폭 타이어'><input type='checkbox' name='c_option[]' value='광폭 타이어' id='c_option_광폭 타이어' > 광폭 타이어</label>

 

위는 (예로서) 몇가지만 추려서 작성한 것인데 실제는 차량의 옵션 종류가 4~50개에 육박하다보니 썬팅에 하나, 도어잠금에 하나... 이런식으로 디비필드를 주기는 어렵다고 판단해서

c_option 이라는 필드에 체크한 값을 순서대로 주욱 집어 넣으려고 합니다.

 

썬팅, 파워윈도우, 에어컨  <-- 이런 값으로요.

 

이렇게 하려면 write_update.skin.php 파일을 어떻게 만들어야 원하는 대로 입력이 될 수 있을까요?

 

 

 

또한 c_option 에 썬팅, 파워윈도우, 에어컨... 이렇게 저장되어 있을 때

view.skin.php 파일은 어떻게 해야 c_option 값에서 , (쉼표)를 제외하고 주욱 나열해서 보여줄 수 있을까요?

 

 

고수님들의 도움을 기다립니다.

감사합니다. 

 

 

 

 

 

 

 

 

이 질문에 댓글 쓰기 :

답변 1

슈와이님.
좋은 팁 주셔서 제가 혼자 어찌 해결을 해보려고 했지만 잘 않되서 죄송스럽게 질문 하나만 더 드리겠습니다.

1. write.skin.php에 아래와 같이 적용했습니다.

<script type="text/javascript" src="<?php echo $board_skin_url;?>/makebox.js"></script>
<input type="text" name="c_option" id="c_option" value="<?php echo $write['c_option']; ?>">
<script>
$( '#c_option' ).makeBox( '썬팅,자동도어잠금,파워핸들,파워윈도우,알루미늄휠,에어컨,광폭 타이어', 'checkbox' );
</script>

2. write_update.skin.php 에 아래와 같이 적용했습니다.
sql_query(" update {$write_table} set c_option = '{$c_option}' where wr_id = '{$wr_id}' ");

위처럼 적용하고 체크박스를 여러개 한 선택한 후에 (예를 들어 썬팅, 파워윈도우, 에어컨)
DB의 c_option 필드를 보면 마지막에 선택체크한 에어컨 하나만 입력되어 있습니다.

선택된 값을 다 DB에 입력하려면 어떻게 해야 할까요?

한 수만 더 부탁 드립니다.
감사합니다.

// makeBox.js 는 그누원본에서는 정상작동되는 코드입니다.
$( '#c_option' ).makeBox( '썬팅,자동도어잠금,파워핸들,파워윈도우,알루미늄휠,에어컨,광폭 타이어', 'checkbox' );
$("#c_option").prop("type", "text"); // 추가해서 체크시 값이 제대로 나오나 보세요

답변주셔서 감사합니다.

어젯밤부터 이것에 매달려보고 있는데 영 않되네요 ㅠ_ㅠ
일단 제가 해본 것은 아래와 같습니다.

말씀하신대로 혹시 c_option 이라는 필드가 문제가 있나해서
wr_1에도 적용을 해보았습니다.

<input type="text" name="wr_1" id="wr_1" value="<?php echo $wr_1 ?>">

<script>
$( '#wr_1' ).makeBox( '썬팅,자동도어잠금,파워핸들,파워윈도우,알루미늄휠,에어컨,광폭 타이어', 'checkbox' );
$("#wr_1").prop("type", "text"); // 추가해서 체크시 값이 제대로 나오나 보세요
</script>

위처럼 하고 각 체크박스를 선택하면 선택한 값이 박스(?)같은 곳에 잘 나옵니다.

하지만 작성롼료를 클릭하고 DB를 보면 여전히 마지막에 선택된 하나의 값만 입력되어 있습니다.
(c_option 필드와 wr_1 여분필드가 똑같은 상황입니다.)


제가 makebox.js를 필요에 의해서 아래처럼 수정했는데
혹시 이 부분이 잘 못 되었을까요?


$.fn.makeBox = function (text, type) {
    var  html = '', arr = text.split(','), i, checked, id = $(this).attr( 'id' ), val = $(this).val(), id_1, obj = $( '#' + id ); 
    $( obj ).prop('type', 'hidden');
    if (type == 'select') {    
        id_1 = id + '_1';
        html = '<select id="' + id_1 +'">';
        for (i in arr) {        
            checked = val.indexOf(arr[i]) + 1 ? 'selected' : '';
            html += '<option value="' + arr[i] + '" ' + checked + '>' + arr[i] + '</option>';
        }
        html += '</select>';
        $( 'body' ).on('change', '#' + id_1, function() {            
            $( '#' + id ).val( this.value ); 
        });
    } else {    
         for (i in arr) {        
            checked = val.indexOf(arr[i]) + 1 ? ' checked' : '';
            id_1 = id  + '_' + i;
            html += '<label for="' + id + '_' + arr[i] + '">';
            html += '<input type="' + type + '" name="' + id + '"  id="' + id + '_' + arr[i] + '" value="' + arr[i] + '"' + checked + ' class="' + id + '">';
            html +=  ' '+ arr[i] + '</label>';
         } 
        $( 'body' ).on( 'click', '.' + id, function() {
            var ar = [];
            $( '.' + id ).each( function() {
                if (this.checked) ar.push(this.value); 
            });
            obj.val( ar.join(',') ); 
        });
     }
    $( '#' + id ).after(html); 
}



슈와이님의 원소스의 아래부분을

html += '<input type="' + type + '" name="' + id + '_1' + '" id="' + id_1 +'" value="' + arr[i] + '"' + checked + ' class="' + id + '">';
html += '<label for="' + id_1 + '">' + arr[i] + '</label>&nbsp;';

이렇게 바꾸었습니다.

html += '<label for="' + id + '_' + arr[i] + '">';
html += '<input type="' + type + '" name="' + id + '"  id="' + id + '_' + arr[i] + '" value="' + arr[i] + '"' + checked + ' class="' + id + '">';
html +=  ' '+ arr[i] + '</label>';



그리고 참고삼아 실제소스는 아래와 같습니다.
체크박스가 여러개라서 부분부분 나누었습니다.


<dl>
	<dt>옵션/튜닝</dt>
	<dd>
	<input type="text" name="c_option" id="c_option" value="<?php echo $write['c_option']; ?>">
	
	<script>
	$( '#c_option' ).makeBox( '썬팅,자동도어잠금,파워핸들,파워윈도우,알루미늄휠,에어컨,광폭 타이어', 'checkbox' );
	</script>

</dl>
<dl>
	<dt>외관</dt>
	<dd>
	<input type="text" name="d_option" id="d_option" value="<?php echo $write['d_option']; ?>">
	<script>
	$( '#d_option' ).makeBox( '접이식백미러,제논/HID라이트,썬루프,파노라마썬루프,루프캐리어,크롬 휠,사제휠,전/후방 감지기,전방카메라,후방감지 카메라,리어스포일러', 'checkbox' );
	</script>
	</dd>
</dl>
<dl>
	<dt>내장</dt>
	<dd>
	<input type="text" name="e_option" id="e_option" value="<?php echo $write['e_option']; ?>">
	<script>
	$( '#e_option' ).makeBox( '무선도어 리모컨,ECM룸미러,가죽시트,전동시트,열선시트,열선시트(뒷좌석),통풍시트,메모리시트,우드그레인,메탈그레인,스타트버튼', 'checkbox' );
	</script>			
	</dd>
</dl>
<dl>
	<dt>안전</dt>
	<dd>
	<input type="text" name="f_option" id="f_option" value="<?php echo $write['f_option']; ?>">
	<script>
	$( '#f_option' ).makeBox( '운전석 에어백,조수석 에어백,측면 에어백,커튼에어백,ABS,TCS,ECS,EPS,4륜 구동', 'checkbox' );
	</script>
	</dd>
</dl>
<dl>
	<dt>편의</dt>
	<dd>
	<input type="text" name="g_option" id="g_option" value="<?php echo $write['g_option']; ?>">
	<script>
	$( '#g_option' ).makeBox( '스마트 키,네비게이션,뒷좌석 TV,블랙박스,파워트렁크,크루즈컨트롤,도난 경보기,원격시동장치', 'checkbox' );
	</script>
	</dd>
</dl>

ㅠㅠ 해결했습니다.
혹시나 해서 새로 게시판 하나 만들고 기본 스킨에 슈와이님 팁을 수정없이 적용하니 잘 됩니다. ㅠ_ㅠ

제가 수정한 makebox.js 파일이 잘 못된 것이 었네요 ㅠㅠ
그걸 모르고 12시간이 넘도록 고생만 죽도록 했습니다 ㅠㅠ.

makebox.js를 그대로 사용하고
스킨의 css만 수정해서 바로 해결 했습니다.

좋은 팁 올려주셔서 다시 한번 감사드립니다.

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

회원로그인

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