셀렉트 박스 중복 값

셀렉트 박스 중복 값

QA

셀렉트 박스 중복 값

답변 2

본문

어제 셀렉트 박스 현재값 표시 질문했었는데

그누보드 QA - 회원정보 셀렉트박스 수정시 초기화 (sir.kr)

Eyekiss님의 도움으로 표시까지는 해결했었습니다.

 

이제 문제가 현재값이랑 테이블의 있는값 두개가 모두 표시 된다는 겁니다

2041531885_1661989707.6648.png

이런식으로 생산부인 회원의 g5_member테이블의 mb_1 값과

g5_part 테이블의 part 값 모두가 표시되고 있습니다

중복 되는건 하나만 표시되도록 하고 싶은데

if문 사용하여 패스하는 방법으로 하면 될것 같은데 

문제는 g5_part 테이블 에서 값을 불러오는 것과 

어디에서 셀렉트박스에 반복문으로 option값을 넣어주는지 모르겠습니다..

 

요약하자면)

1. g5_part 테이블 에서 값을 불러오는 방법

2. 어디에서 셀렉트박스에 반복문으로 option값을 넣어주는지

3. if 문으로 패스 시키는 방법?

도와주시면 진짜 진짜 감사하겠습니다 ㅠㅠ

아래는 어제 질문으로 수정 한 코드 전문 입니다.


<? php //부서 테이블 관련 SQL 쿼리문
$sql = " select * from g5_part ";
$res = sql_query($sql);
for ($i=0; $row = sql_fetch_array($res); $i++) {
      $nm[$i] = $row['company'].'|1|'.$row['part'].'|2|'.$row['team'].'|3|';
} ?>
<!---SQL 셀렉트박스 시작 -->
 
                <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("mb_"+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("mb_"+cmd2+".length = mb_"+cmd2+".length + 1");
                            eval("mb_"+cmd2+".options["+v+"].value = arg ");
                            eval("mb_"+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){
                    mb_2.length = 1;
                    mb_3.length = 1;
                    mb_2.selectedIndex = 0;
                    mb_3.selectedIndex = 0;
                }
                if(cmd == 2){
                    mb_3.length = 1;
                    mb_3.selectedIndex = 0;
                }
                }

 
                </script>
                <tr>
                    <th scope="row"><label for="mb_level">회원 권한</label></th>
                    <td><?php echo get_member_level_select('mb_level', 1, $mb['mb_level'], $mb['mb_level']) ?></td>
                    <!--<th scope="row">포인트</th>
                    <td><a href="./point_list.php?sfl=mb_id&stx=<?php echo $mb['mb_id'] ?>" target="_blank"><?php echo number_format($mb['mb_point']) ?></a> 점</td> -->
                    <th scope="row"><label for="mb_1">회사 구분</label></th>
                    <td>
                        <select name = 'mb_1' id='mb_1' OnChange='javascript:getCataAllId(1)' class="select1">
                        <option value='<?php echo $mb['mb_1'] ?>' selected="selected"><?php echo $mb['mb_1'] ?  $mb['mb_1'] : '회사 선택'  ?></option>
                        </select>
                    </td>
                </tr>
                <tr>
                    <th scope="row"><label for="mb_2">부 구분</label></th>
                    <td>
                        <select name = 'mb_2' id='mb_2' OnChange='javascript:getCataAllId(2)' class="select2">
                        <option value='<?php echo $mb['mb_2'] ?>' selected="selected"><?php echo $mb['mb_2'] ?  $mb['mb_2'] : '부서 선택'  ?></option>
                        </select>
                    </td>
                    <th scope="row"><label for="mb_3">팀 구분</label></th>
                    <td>
                        <select name = 'mb_3' id='mb_3' OnChange='javascript:getCataAllId(3)' class="select3">
                        <option value='<?php echo $mb['mb_3'] ?>' selected="selected"><?php echo $mb['mb_3'] ?  $mb['mb_3'] : '팀 선택'  ?></option>
                        </select>
                    </td>
                </tr>
                <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 ){
                        mb_1.length =  mb_1.length + 1;
                        mb_1.options[z1+1].value = menuArr[m].substring(0, menuArr[m].indexOf("|1|")) ;
                        mb_1.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>
 
                <!-- SQL 셀렉트박스 끝 -->

이 질문에 댓글 쓰기 :

답변 2

자바스크립트가 제겐 너무 난해하네요.

https://www.youtube.com/watch?v=5X0jNVjwuzc&ab_channel=CodexWorld

https://infotuts.com/cascaded-dropdown-jquery-ajax-php/

ajax 방식도 한번 검토해 보세요.

스크립트를 분석해서 중간에 $mb['mb_1'] 값이 없으면 추가해주는 구문을 넣어줘야하는데..

더 중요한건 eval 함수를 사용하면 안됩니다.

ajax 로 다시 만드는게 더 쉬울 것 같네요.

 

https://velog.io/@modolee/javascript-eval-is-evil

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 117
© SIRSOFT
현재 페이지 제일 처음으로