Tip & Tech/php
iframe을 이용한 중복체크
변기환
2012. 4. 27. 07:52
중복체크를 위해 새창을 띄우자니 사용자입장에서 불편하고 폼을 넘긴 뒤 중복체크를 하니 이것도 문제가 많다. 특히 history.go() 함수를 사용하여 이전 페이지로 되돌리는 과정에 입력된 자료가 사라지는 등 브라우져 종류와 버전에 따라 다양한 문제가 발생하였다
그래서 눈에 보이지 않게 iframe을 생성하고 거기에 사용자가 입력한 자료를 보내고 체크하는 방법을 사용했다. IE는 물론 FireFox, Safari에서 확인 하니 잘된다.
<script> function id_check() { var f = document.member_form; if (f.id.value == "") { alert("회원 아이디를 입력하세요."); f.id.focus(); return; } hiddenframe.location.href="./check.php?id="+document.member_form.id.value; } function Form_Send() { var f = document.member_form; if(f.mb_id_enabled.value == '') { alert("아이디 중복 체크를 하세요."); return; } if(f.mb_id_enabled.value == -1) { alert("중복된 아이디가 있어서 가입할 수 없습니다."); return; } document.member_form.submit(); } </script> <input name="mb_id_enabled" value="" type="hidden"> <input maxlength="20" size="20" name="id">
<a href="javascript:id_check();">중복체크</a> <input value="전송" onclick="Form_Send();" type="button"> <iframe name="hiddenframe" width="0" height="0">
javascript로 넘겨온 변수를 가지고 DB에 접속해서 중복된 자료가 있고 없음에 따라 부모창의 mb_id_enabled 값을 변경되게 했다.
mb_id_enabled 값이 -1이면 폼을 넘길 수 없도록했지만, 중복체크 후 다시 입력을 변경한 경우 체크해야 하는 알고리즘은 이를 이용하는 사용자에게 숙제로 남겨 놓는다.
[check.php]
<? // DB 접속 및 검색문은 생략 $row = mysql_fetch_object($result); if($row) { ?> <script> alert("<?=$id?>은(는) 이미 가입된 아이디 이므로 사용하실 수 없습니다."); parent.document.getElementById("mb_id_enabled").value = -1; </script> <? } else { ?> <script> alert("<?=$id?>은(는) 중복된 아이디가 없습니다. 사용하셔도 좋습니다."); parent.document.getElementById("mb_id_enabled").value = 1; </script> <? } ?>