[1원짜리팁] 여분필드 쪼개쓰기 간편 방법 > 그누4 팁자료실

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

[1원짜리팁] 여분필드 쪼개쓰기 간편 방법 정보

[1원짜리팁] 여분필드 쪼개쓰기 간편 방법

본문

쓰기폼에 체크박스 및 입력항목이 많아서 기존 여분필드 갯수가 부족한데
필드를 더 이상 추가하지않고 사용하기 위하여 아래와 같은 방법을 사용하는 것을 자주봅니다
input type=txt name=ex1 value='<?=$ex1?>'>
input type=txt name=ex2 value='<?=$ex2?>'>
input type=txt name=ex3 value='<?=$ex3?>'>
~
~

등록할 때
$wr_1=$ex1.'|'.$ex2.'|'.$ex3;
$wr_2=$ex4.'|'.$ex5.'|'.$ex6.'|'.$ex7;
~
~
사용할 때
$wr1 = explode("|",$write[wr_1]);
$ex1 = $wr1[0];
$ex2 = $wr1[1];
$ex3 = $wr1[2];

$wr2 = explode("|",$write[wr_2]);
$ex4 = $wr2[0];
$ex5 = $wr2[1];
$ex6 = $wr2[2];
$ex7 = $wr2[3];
~
~
------------------------------------------
필드를 성격에 맞게 여분필드마다 항목을 합치는 것이 여간 신경 쓰이는 일이 아닙니다
위처럼 일일이 합치고, 쪼개고 할 필요 없이 간단하게 사용하는 방법입니다
-- wr_1 필드에 쪼개서 쓰는 모든 항목을 ex1=값1|ex2=값2 처럼 저장합니다

write_update.head.skin.php

if(!$w){ //--입력 항목이 아주 많은 경우 wr_1 필드 사이즈 변경(필요없으면 삭제)
$qq=sql_fetch("SHOW COLUMNS FROM $write_table like 'wr_1' ");
if($qq[Type]=='varchar(255)')
sql_query(" ALTER TABLE $write_table CHANGE wr_1 wr_1 text NOT NULL default '' ");
}

$wr_1=$deli=''; //------ wr_1에 저장할 항목을 합침
foreach($_POST as $key=>$value){
if( strpos($key, 'ex')===false) continue;
$wr_1 .=$deli.$key.'='.$value; $deli='|';
}
--------------------------
write.skin.php, view.skin.php 상단에서

$tmp=explode("|",$write[wr_1]); //-- wr_1에 저장된 항목을 분리
foreach($tmp as $key=>$value){
list($key, $value2)= explode('=',$value);
$$key= $value2;
}
list.skin.php에서 사용시
for 문 다음 행에 추가

$tmp=explode("|",$list[$i][wr_1]); //-- wr_1에 저장된 항목을 분리
foreach($tmp as $key=>$value){
list($key, $value2)= explode('=',$value);
$$key= $value2;
}


이렇게 하면 아래 처럼 곧바로 사용할 수 있습니다
출력시
echo "$ex1 - $ex2 -$ex3";
수정시
input type='text' name='ex1' value='< ? = $ex1? >'> <-- 띄워쓰기 아님(붙여쓰면 코드가 나오지않네요)

요점은 저장할 항목 합침, 저장된 항목 분리를 필드항목에 따라 신경 쓸 것없이
무작정 합치고 잘라서 다른 설정없이 곧바로 입력한 항목 값으로 사용한다는 점입니다
추천
8

댓글 20개

스크립트단이나 write.update.skin.php 단에서 정규표현식으로 "|" 글자를 입력방지하는것도 추가하는게 좋을듯싶네요
입력 내용중에 수직바(|)가 들어갈 가능성이 있는 경우 구분문자로는
안쓰이는 특수문자를 사용 하세요
♬ <--이런 것...
균이님 좋은 팁 감사합니다.
사용해보니 너무 잘됩니다
본문에서 출력시 <? echo $ex1; ?>-<? echo $ex2; ?>-<? echo $ex3; ?> 이렇게 하니깐 잘 나옵니다만
리스트에서는 본문 출력시처럼 하니깐 안나오네요
리스트에서도 보여주고 싶을땐 어떻게 해야하는지 알려주시면 감사하겠습니다
균이님 좋은정보 감사를 드려요~^^*
기존 닉네임(좋은하루여) 화이팅여 입니다^^*

요즈음 여분필드 쪼개서 체크박스 형태로 만들어 쓸려고
노력하고 있었는데 좋은정보 감사합니다


한참전에 만들어주신 지도스킨에서

http://sir.co.kr/bbs/board.php?bo_table=g4_skin&wr_id=138891&sca=&sfl=wr_subject%7C%7Cwr_content&stx=%EB%A9%80%ED%8B%B0+%EB%A7%88%ED%81%AC

텍스트로 저장하고 . 보여주는것은 잘 되는데
 list에서 체크박스로 체크하여 부분적으로 검색부분을 만들어
 검색해봐도 조건 검색이 안나오고 모두가 다 나와버리네요 스킨 이용해서 추가해볼려고하니까 잘 안돼 끙 끙 그리고 있습니당~
에궁~~
좀 더~ 해보다가 안되면 한번 여쭤 보겠습니당~^^

그래도 균이님 만들어주신 스킨 활용해서 잘~ 사용하고 있습니다
항상감사 마음으로 잘~ 사용하고 있어요~ 감사합니다 균이님^^*
아주 좋은팁이네요... 필드를 확장해도 더 많이 필요한 경우가 있는데 기존 방법보다 아주 간단하고 편리하게 사용 할 수 있네요..
감사합니다.
view, write 에서는 정상적으로 동작이 되는데요.
list 에서는 오류가 납니다.
 
$tmp=explode("|",$list[$i][wr_1]);
foreach($tmp as $key=>$value){
list($key, $value2)= explode('=',$value);
$$key= $value2;
}
위의 소스를 list 스킨의 for 문 다음에 넣고
 
<?php if($ex1 == '테스트') { ?>
<?php echo $ex1; ?>
<?php } ?>
위의 소스를 list 스킨에 for 문 다음에 넣었습니다.
 
게시물이 10개 있다고 하자면 그 중 하나의 게시물이라도 $ex1 값이 "테스트" 이면
list 스킨에서 게시물 10개 모두 $ex1 값이 출력됩니다.
 
// 정상적인 결과
  제목        결과
게시물 1    테스트
게시물 2
게시물 3
게시물 4
게시물 5
...
 
// 비정상적 결과
  제목        결과
게시물 1    테스트
게시물 2    테스트
게시물 3    테스트​
게시물 4    테스트​
게시물 5    테스트​
...
 
이거 어떻게 해결을 해야 하는지요?
이 팁을 적용하기 전의 게시물에서는 wr_1에 값이 없기 때문에 그렇게 됩니다
출력할 때 아래처럼 하세요
<? if($list[$i][wr_1] && $ex1 ) echo $ex1; ?>
균이님 안녕하세요.
위 처럼 소스를 넣어도 해결되지 않습니다.

[http://i.imgur.com/fZEyGNt.png]
위의 스샷을 보시면 3번째 게시물은 급처분, 신상품, 미개봉에 대한 값이 없습니다.
이 상태에서는 1, 2, 3 게시물 모두 정상적으로 표시되고 있습니다.

[http://i.imgur.com/OmzhdRK.png]
두번째 스샷을 보시면 알겠지만 4번째 게시물에서 급처분, 신상품, 미개봉에 대해서 값을 줬습니다.
그런데 아까전에는 정상적이던 2번째, 3번째 게시물에도 급처분, 신상품, 미개봉 값이 표시되고 있습니다.

이것은 무엇이 문제인지요?
균이님~
꼭 부탁드립니다 ㅠㅠ
정말 좋은 팁인데 list 만 정상적이면
활용할 방법이 무긍무진 하여서요.
정말 부탁드립니다.
균이님 안녕하세요.
지금 테스트를 해보니까 basic 스킨에서는 정상적으로 됩니다.
지금 아미나 스킨에서 문제가 발생을 하는데요.
<?php for ($i=0; $i < $list_num; $i++) {

//첫페이지만 공지사항 나오도록
if($list[$i]['is_notice'] && $page > 1) continue;

//링크 재설정
$href_target = $thumb_target = '';
if($set['list_href_blank']) {
$thumb_target = '_blank';
$href_target = ' target="_blank"';
} else {
$list[$i]['href'] = $list[$i]['href'].$frame_opt;
}

//xp 및 모바일 아이콘
$wr_post = amina_array_write($list[$i]['wr_10']);
$wr_icon = amina_array_icon($list[$i]['wr_5']);

//목록타입
$s_name = $icon_post = '';
if($set['list_qa'] && !$list[$i]['is_notice']) { //질답형
if($list[$i]['icon_secret']) {
$s_name = 's';
$list[$i]['icon_secret'] = '';
}
$icon_post = $list[$i]['icon_reply'] ? ' <img src="'.$list_skin_url.'/img/icon_'.$s_name.'a.gif" alt="" /> ' : ' <img src="'.$list_skin_url.'/img/icon_'.$s_name.'q.gif" alt="" /> ';
}

//블라인드
$is_blind = ($list[$i]['wr_9'] == "lock" || $list[$i]['wr_9'] == "shingo") ? true : false;

//글제목
$list[$i]['wr_subject'] = amina_get_html($list[$i]['wr_subject'],'char');
if($is_blind) {
$list[$i]['wr_subject'] = '블라인드 처리된 글입니다.';
$list[$i]['subject'] = '<span class="blind">'.amina_cut($list[$i]['wr_subject'], $list_subj_len).'</span>';
$icon_post = '<img src="'.$list_skin_url.'/img/icon_shingo.gif" alt="" />';
} else {
if(!$list[$i]['is_notice'] && $is_catesubj) $list[$i]['wr_subject'] = '['.$list[$i]['ca_name'].'] '.$list[$i]['wr_subject'];
$list[$i]['subject'] = amina_cut($list[$i]['wr_subject'], $list_subj_len);
if($wr_post['subj_s']) $list[$i]['subject'] = '<del>'.$list[$i]['subject'].'</del>';
if($wr_post['subj_b']) $list[$i]['subject'] = '<b>'.$list[$i]['subject'].'</b>';
if($wr_post['subj_i']) $list[$i]['subject'] = '<i>'.$list[$i]['subject'].'</i>';
if($wr_post['subj_color']) $list[$i]['subject'] = '<span style="color:'.$wr_post['subj_color'].';">'.$list[$i]['subject'].'</span>';
if(!$is_cmt && $list[$i]['comment_cnt']) $list[$i]['subject'] .= ' <span class="cmt-cnt">'.$list[$i]['comment_cnt'].'</span>';
}

if($list[$i]['is_notice']) { //공지글
if($is_category) {
$list[$i]['num'] = '*';
$list[$i]['ca_name'] = '<img src="'.$list_skin_url.'/img/icon_notice.gif" alt="알림" />';
} else {
$list[$i]['num'] = '<img src="'.$list_skin_url.'/img/icon_notice.gif" alt="알림" />';
}
$bg = ' class="notice"';
$list[$i]['subject'] = '<b>'.$list[$i]['subject'].'</b>';
} else {
$bg = ($set['shell_color'] && $n%2) ? ' class="list"' : '';

$n++;

if($list[$i]['wr_id'] == $wr_id) { //현재글
$bg = ' class="now"';
$list[$i]['subject'] = '<span class="now-post">'.$list[$i]['subject'].'</span>';
$list[$i]['num'] = '<span class="now-post">'.$list[$i]['num'].'</span>';
}
}

//이름
$list[$i]['name'] = $is_sideview ? amina_sideview($list[$i]['mb_id'], $list[$i]['wr_name'], $list[$i]['wr_email'], $list[$i]['wr_homepage']) : $list[$i]['name'];

?>

아미나는 for 문이 이렇게 되어 있습니다.
어떻게 처리를 해야 하는지요?
echo 문을 어떻게 만들어 넣고 있는지를 보아야 알 수 있겠네요
위 소스에서는 특별히 다를게 없어보입니다
혹시 아미나스킨에서 wr_1에 필드 합친 내용아닌 어떤 값을 기본으로 저장하고 잇는 것은 아닌가요?
for문 밖에서 print_r($list) 해서 wr_1에 무엇이 들어가는지 확인부터 해보세요
균이님 답변 감사합니다.
먼저 아미나스킨에서 wr_1 에는 다른값는 들어가지 않고 있습니다.

http://man9565.dothome.co.kr/source.txt

위 주소가 지금 echo 문이 포함되어 있는 list 스킨의 모든 소스입니다.
전체 20 |RSS
그누4 팁자료실 내용 검색
  • 개별 목록 구성 번호 제목 작성자 작성일 추천 조회
  • 게시물이 없습니다.

회원로그인

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