DB 필드에 많은 값이 차례대로 들어가고 차레대로 추출하는 법 채택완료
안녕하세요.
초보가 작업중에 도저히 감을 잡지 못하는 것이 있어서 고수님의 도움을 받아볼까 합니다.
우선 게시판을 이용하여 차량등록 서비스 스킨을 만들어 보고 있습니다.
자동차를 등록시키는 게시판인데 자동차에 많은 옵션이 있다보니
이 옵션하나에 필드 하나를 사용하는 것은 무리라고 판단해서 이것저것을 검색하고
비슷한 스킨을 다운 받아 보고 했는데 답이 나오지 않네요 ㅠ_ㅠ
먼저...
write.skin.php 파일에 아래와 같이 체크박스로 입력을 받습니다.
위는 (예로서) 몇가지만 추려서 작성한 것인데 실제는 차량의 옵션 종류가 4~50개에 육박하다보니 썬팅에 하나, 도어잠금에 하나... 이런식으로 디비필드를 주기는 어렵다고 판단해서
c_option 이라는 필드에 체크한 값을 순서대로 주욱 집어 넣으려고 합니다.
썬팅, 파워윈도우, 에어컨 <-- 이런 값으로요.
이렇게 하려면 write_update.skin.php 파일을 어떻게 만들어야 원하는 대로 입력이 될 수 있을까요?
또한 c_option 에 썬팅, 파워윈도우, 에어컨... 이렇게 저장되어 있을 때
view.skin.php 파일은 어떻게 해야 c_option 값에서 , (쉼표)를 제외하고 주욱 나열해서 보여줄 수 있을까요?
고수님들의 도움을 기다립니다.
감사합니다.
답변 1개
답변에 대한 댓글 5개
좋은 팁 주셔서 제가 혼자 어찌 해결을 해보려고 했지만 잘 않되서 죄송스럽게 질문 하나만 더 드리겠습니다.
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에 입력하려면 어떻게 해야 할까요?
한 수만 더 부탁 드립니다.
감사합니다.
$( '#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를 필요에 의해서 아래처럼 수정했는데
혹시 이 부분이 잘 못 되었을까요?
[code]
$.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);
}
[/code]
슈와이님의 원소스의 아래부분을
html += '<input type="' + type + '" name="' + id + '_1' + '" id="' + id_1 +'" value="' + arr[i] + '"' + checked + ' class="' + id + '">';
html += '<label for="' + id_1 + '">' + arr[i] + '</label> ';
이렇게 바꾸었습니다.
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>';
그리고 참고삼아 실제소스는 아래와 같습니다.
체크박스가 여러개라서 부분부분 나누었습니다.
[code]
<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>
[/code]
혹시나 해서 새로 게시판 하나 만들고 기본 스킨에 슈와이님 팁을 수정없이 적용하니 잘 됩니다. ㅠ_ㅠ
제가 수정한 makebox.js 파일이 잘 못된 것이 었네요 ㅠㅠ
그걸 모르고 12시간이 넘도록 고생만 죽도록 했습니다 ㅠㅠ.
makebox.js를 그대로 사용하고
스킨의 css만 수정해서 바로 해결 했습니다.
좋은 팁 올려주셔서 다시 한번 감사드립니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
감사합니다.
잘 활용해 보겠습니다.