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

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

QA

SIR 제작의뢰 - 견적무료/익명보정/호스팅, DB 이전/단기개발. 이젠 ' 의뢰인'이 원하는 '제작자'에게만 연락처를 알릴 수 있습니다.

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만 수정해서 바로 해결 했습니다.

좋은 팁 올려주셔서 다시 한번 감사드립니다.
답변을 작성하시기 전에 로그인 해주세요.
전체 71,094 | RSS
고마운 분의 도움으로 질문을 해결하셨다면, 채택을 눌러서 감사의 마음을 전하세요.
어떻게 질문해야 할지 모른다면 질문하는 방법을 읽어 보신후 질문해 보세요.
QA 내용 검색

회원로그인

진행중 포인트경매

  1. Faker member(가짜 회원) 일괄 등록 솔루션

    참여11 회 시작19.02.14 08:24 종료19.02.21 08:24

(주)에스아이알소프트 (06253) 서울특별시 강남구 도곡로1길 14, 6층 624호 (역삼동, 삼일프라자) 대표메일:admin@sir.kr
사업자등록번호:217-81-36347 대표:홍석명 통신판매업신고번호:2014-서울강남-02098호 개인정보보호책임자:이총

© SIRSOFT