셀렉트 박스 중복 값 채택완료

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

그누보드 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 문으로 패스 시키는 방법?

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

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

Copy
<? 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&amp;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개

채택된 답변
+20 포인트

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

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

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

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

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

답변에 대한 댓글 1개

댓글 감사합니다 참고해 볼게요

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

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

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

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

 

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

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

답변에 대한 댓글 1개

아 그런 취약점이 있었네요.. 저도 그누 에서 긁어온거라
다른 방식도 검토 해보겠습니다

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

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

로그인
🐛 버그신고