테스트 사이트 - 개발 중인 베타 버전입니다

DB불러오기 질문드립니다. 채택완료

다나한포션 4년 전 조회 1,992

안녕하세요

회원 DB를 연동 하여

2단 select box를 활용하려 합니다.

https://sir.kr/yc5_tip/806

여기를 참고했습니다.

 

데이터는 g5_member 테이블에서 가져오구요

회원레벨이 4이고 mb_4 값에 따라 아이디가 나오게 하려 합니다.

 

이렇게요..

 

table구조

mb_4 mb_id
a test1
b test2
c test3
a test4
d test5

</p>

<p><?php

include_once('./_common.php');

    $sql = " select * from g5_member where mb_level = '4' and mb_4 != ''";



    $res = sql_query($sql);

    for ($i=0; $row = sql_fetch_array($res); $i++) {

          $nm[$i] = $row['mb_4'].'|1|'.$row['mb_id'].'|2|';

    }

?></p>

<p>

이렇게 하면 잘 나오긴하는데

1단 셀렉트 박스에서

a

b

c

d

이렇게 안나오고

이렇게 나옵니다.ㅠ

DB에 쌓인 순서대로 나오더라구요..

 

그래서 group by로 해보니

mb_4 A값의 아이디가 하나 밖에 안나옵니다..

이런식으로요..

 

여기서 부터 도저히 모르겠습니다. ㅠ

전체 소스 적습니다.. 고수님들의 도움 부탁드립니다.ㅠㅠ

 

</p>

<p><?php

include_once('./_common.php');

    $sql = " select * from g5_member where mb_level = '4' and mb_4 != ''";

    $sql .= " group by mb_4";

    $res = sql_query($sql);

    for ($i=0; $row = sql_fetch_array($res); $i++) {

          $nm[$i] = $row['mb_4'].'|1|'.$row['mb_id'].'|2|';

    }

?>

 

<script type="text/javascript">

 function getCataAllId(cmd){

  cmd = eval(cmd);

  cmd2 = cmd +1;

  initCataID(cmd);

  var ch = "";

  for(var idx = 1; idx < cmd2; idx++){

      ch = ch + eval("document.f1.menu"+idx+".value") + "|"+idx+"|";

  }

  var v = 0;

  var temp = "";

  var tempv = "";

  var arg = "";

  for(var m = 0; m < menuArr.length; m ++) {

      arg = menuArr[m].substring(menuArr[m].indexOf("|"+cmd+"|")+3,menuArr[m].indexOf("|"+cmd2+"|")) ;

      temp = menuArr[m].substring(0, menuArr[m].indexOf("|"+cmd+"|")+3);

      if(temp == ch && tempv != arg ){

            v++;

            eval("document.f1.menu"+cmd2+".length = document.f1.menu"+cmd2+".length + 1");

            eval("document.f1.menu"+cmd2+".options["+v+"].value = arg ");

            eval("document.f1.menu"+cmd2+".options["+v+"].text  = arg ");

      }

      if(temp != ch){

          tempv = "";

      }else{

          tempv = menuArr[m].substring(menuArr[m].indexOf("|"+cmd+"|")+3,menuArr[m].indexOf("|"+cmd2+"|"));

      } 

  }

}

 

 function initCataID(cmd){

 cmd = eval(cmd);

  if(cmd == 1){

      document.f1.menu2.length = 1;

      document.f1.menu2.selectedIndex = 0;

  }

 }</p>

<p></script></p>

<p><form name = 'f1' >

<select name = 'menu1' id='menu1' OnChange='javascript:getCataAllId(1)' class="select1">

 <option value="" selected>선택하세요.</option>

</select>

<select name = 'menu2' id='menu2' OnChange='javascript:gotomenu()' class="select2">

 <option value="" selected>선택하세요.</option>

</select>

</form></p>

<p><script type="text/javascript">

/* JSON encode, parse  */

var stuff = <?php echo json_encode($nm); ?>;

var str = JSON.stringify(stuff);

var menuArr = new Array();

      menuArr= JSON.parse(str);

var z1 = 0;

var temp1 = 0;

  initCataID(1);

  for(var m = 0; m < menuArr.length; m ++) {

      if ( menuArr[m].substring(0, menuArr[m].indexOf("|1|")) != temp1 ){

          document.f1.menu1.length =  document.f1.menu1.length + 1;

          document.f1.menu1.options[z1+1].value = menuArr[m].substring(0, menuArr[m].indexOf("|1|")) ;

          document.f1.menu1.options[z1+1].text = menuArr[m].substring(0, menuArr[m].indexOf("|1|")) ;

          temp1 = menuArr[m].substring(0, menuArr[m].indexOf("|1|"));

          z1++;

      }

      /*  index 1에 중복 제거입니다.  */

  }

</script></p>

<p>

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
4년 전
로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

말씀 하신것 처럼 하려면 위처럼 group by 를쓰시면 안됩니다 (중복되는것은 모두 제외합니다)

 

따라서

1. select box 2개 만들기 (mb_4 만 가져와서 group by 로 뿌려주는 셀렉트 박스 하나 , 하나는 빈값으로 둔 상태)

 

2. mb_4 선택시 onchange 를 통해 ajax 함수 호출 

3. ajax 함수에서 별도 페이지호출 (해당 페이지에서 mb_4 에 해당하는 회원 아이디를 가져와서 option 으로 html 을 만들어줍니다)

 

4. ajax return 부분에서 나온 결과값을 빈공백으로 있는 selectbox 에 add 처리시켜주셔야 합니다

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인