셀렉트 박스 중복 값
관련링크
본문
어제 셀렉트 박스 현재값 표시 질문했었는데
그누보드 QA - 회원정보 셀렉트박스 수정시 초기화 (sir.kr)
Eyekiss님의 도움으로 표시까지는 해결했었습니다.
이제 문제가 현재값이랑 테이블의 있는값 두개가 모두 표시 된다는 겁니다
이런식으로 생산부인 회원의 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 로 다시 만드는게 더 쉬울 것 같네요.
답변을 작성하시기 전에 로그인 해주세요.