중복 확인 | 엑셀 조건부 서식으로 중복된 데이터 쉽게 찾는 방법 – Excel Conditional Formatting | 엑셀러 권현욱 61 개의 자세한 답변

당신은 주제를 찾고 있습니까 “중복 확인 – 엑셀 조건부 서식으로 중복된 데이터 쉽게 찾는 방법 – Excel Conditional Formatting | 엑셀러 권현욱“? 다음 카테고리의 웹사이트 https://you.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://you.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 엑셀러TV | 엑셀, VBA 전문 채널 이(가) 작성한 기사에는 조회수 27,952회 및 좋아요 432개 개의 좋아요가 있습니다.

설정 방법을 보도록 하겠습니다.
  1. 중복 체크 하고 싶은 범위 또는 열을 선택
  2. 홈 – 조건부 서식 클릭
  3. 셀 강조 규칙 – 중복 값 클릭
  4. 확인 클릭 중복되는 부분은 핑크색으로 표시되는 것이 보입니다.

중복 확인 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 엑셀 조건부 서식으로 중복된 데이터 쉽게 찾는 방법 – Excel Conditional Formatting | 엑셀러 권현욱 – 중복 확인 주제에 대한 세부정보를 참조하세요

보다 나은 콘텐츠 제작을 위해 후원 계좌를 오픈하게 되었습니다!
– 우리은행 056-138033-02-509 (대표 예금주: 권현욱)
——————–
하나의 영역에서 중복된 데이터를 찾거나 서로 다른 두 개의 표에서 같은 데이터가 있는지 여부를 찾고자 할 경우 엑셀의 조건부 서식 기능을 이용하면 쉽게 해결할 수 있습니다. 이번 강좌는 다음 내용을 포함하고 있습니다.
– 조건부 서식 (Conditional Formatting)
– 중복된 데이터의 셀 강조 규칙 설정
– 수식을 이용하여 서식을 지정할 셀 결정
– Countif 함수를 사용하여 조건부 서식 지정
– 셀 참조 형식 (절대 주소, 혼합 주소)
엑셀러 권현욱
■ [엑셀러TV] 구독하기
http://bitly.kr/fMTMUteC
■ [엑셀러 권현욱] 책 둘러보기
http://bitly.kr/hH1sLcLh
■ [엑셀러 권현욱] 홈페이지 방문하기
http://www.iExceller
■ [엑셀러 권현욱] SNS
https://m.post.naver.com/iexceller
https://www.facebook.com/iexceller
■ 예제 파일 내려받기
http://www.iexceller.com/MyXls/YouTube/Y019_FindOutDupData_Upload.xlsx
#조건부서식 #중복데이터 #엑셀함수 #엑셀 #엑셀배우기 #Excel #ConditionalFormatting

중복 확인 주제에 대한 자세한 내용은 여기를 참조하세요.

아이디 중복확인

아이디중복검사 폼. 아이디중복검사. 아이디. close.

+ 더 읽기

Source: gcc.kaist.ac.kr

Date Published: 4/19/2022

View: 8233

아이디 중복확인

아이디중복검사 폼. Duplicate username check. ID. close.

+ 여기에 표시

Source: centers.ibs.re.kr

Date Published: 2/14/2022

View: 5738

필터 중복 검사기

요소 숨김 필터는 검사할 수 없어 항상 변경되지 않은 상태로 출력됩니다. 또한 단순 필터에 대한 중복된 정규 표현식이 존재할 때조차도 정규 표현식을 제거할 것인지 …

+ 더 읽기

Source: adblockplus.org

Date Published: 5/9/2022

View: 8423

[javascript] 회원가입 시, 아이디 중복 확인하기 – ajax

중복 검사 버튼을 눌렸을 경우, 동일한 아이디가 있는지 확인하고 없다면 절차를 진행하도록 합니다. html 코드는 다음과 같습니다.  …

+ 여기를 클릭

Source: ssungkang.tistory.com

Date Published: 10/13/2022

View: 5927

[엑셀팁] 중복값을 찾는 4가지 방법 – 효성 블로그

한 번은 여러 번 확인 후 보고한 데이터에 문제가 있다는 지적을 받은 적이 있습니다. 모든 것이 완벽했지만 가장 근본적인 문제 …

+ 더 읽기

Source: blog.hyosung.com

Date Published: 11/14/2021

View: 221

[웹개발] 아이디 중복 검사

아이디 중복 검사를 처리할 check.php를 새로 만들어줬다. 2. 아이디 중복 검사 시나리오 [1] 아이디를 입력한다. [2] 중복 검사 버튼을 누르면 기존 DB에 …

+ 여기에 표시

Source: choco4study.tistory.com

Date Published: 5/14/2021

View: 9194

[jQuery/Ajax] 아이디 중복 체크 확인 구현 – 즐기는 자

안녕하세요 코북입니다. 오늘은 아이디 중복 여부 확인 구현했던 것을 기록하려고 합니다. 비밀번호 일치와는 다르게 아이디 중복 여부는 DB에 접근 …

+ 여기에 보기

Source: cobook.tistory.com

Date Published: 9/14/2021

View: 1351

[JSP] 아이디 중복 체크 기능 구현 <동기 방식> – 내 꿈을 JAVA

이번 혼자서 게시판 웹페이지를 만들면서 내가 생각해본 대로 만든 [아이디 중복 체크 기능]을 업로드하겠습니다. 기능을 만들기에 앞서 <동기 ...

+ 여기에 표시

Source: kang-james.tistory.com

Date Published: 8/7/2022

View: 5564

[JSP개발] 회원가입 – 아이디 중복체크 구현 – 세상의 모든 기록

1. 개요 □ 지난 포스팅 : [JSP개발] 게시판 – 댓글 수정 이번에는 아이디 중복체크 및 회원가입 시 입력값들을 검사하는 기능을 구현할 것이다.

+ 여기에 보기

Source: all-record.tistory.com

Date Published: 8/11/2021

View: 767

주제와 관련된 이미지 중복 확인

주제와 관련된 더 많은 사진을 참조하십시오 엑셀 조건부 서식으로 중복된 데이터 쉽게 찾는 방법 – Excel Conditional Formatting | 엑셀러 권현욱. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

엑셀 조건부 서식으로 중복된 데이터 쉽게 찾는 방법 - Excel Conditional Formatting | 엑셀러 권현욱
엑셀 조건부 서식으로 중복된 데이터 쉽게 찾는 방법 – Excel Conditional Formatting | 엑셀러 권현욱

주제에 대한 기사 평가 중복 확인

  • Author: 엑셀러TV | 엑셀, VBA 전문 채널
  • Views: 조회수 27,952회
  • Likes: 좋아요 432개
  • Date Published: 2020. 3. 12.
  • Video Url link: https://www.youtube.com/watch?v=ezOXBYNHgZY

엑셀 중복 체크 하는 2가지 방법

반응형

엑셀(Excel)에 입력한 값 중 중복하는 값이 있는지 체크하는 방법을 보도록 하겠습니다.

중복 체크를 하는 방법으로 조건 서식을 이용하는 방법과 COUNTIF를 사용하여 체크하는 2가지 방법을 보도록 하겠습니다.

먼저 조건 서식을 이용한 방법을 보겠습니다.

조건 서식 중복 체크

조건 서식을 이용해서 하는 경우에는 중복된 값의 배경색이 핑크색으로 표시됩니다.

설정 방법을 보도록 하겠습니다.

1. 중복 체크 하고 싶은 범위 또는 열을 선택

2. 홈 – 조건부 서식 클릭

3. 셀 강조 규칙 – 중복 값 클릭

4. 확인 클릭

중복되는 부분은 핑크색으로 표시되는 것이 보입니다.

COUNTIF 중복 체크

이번에는 수식을 이용하여 중복되는 부분을 확인하도록 하겠습니다.

사용 수식

=IF(COUNTIF($A$2:$A$10, A2)>1, “중복”, “”)

COUNTIF 함수를 사용하여 결과가 1개보다 클 경우에는 중복이라고 표시하도록 했습니다.

중복되지 않은 값에는 공백을 표시하도록 하고 있습니다.

정리

중복되는 값을 체크하는 방법으로 조건 서식을 이용한 방법과 COUNTIF 함수를 사용한 방법을 알아봤습니다.

문자 결합과 COUNTIF 함수를 같이 사용하며 여러 개의 셀을 조합해서 중복 체크를 하는 수식도 만들 수 있습니다.

반응형

필터 중복 검사기

필터 중복 검사기

이 페이지에서는 중복된 필터를 찾기 위해 필터를 검사할 수 있습니다. http://example.com/ads/* 와 */ads/* 같은 필터가 있을 때 첫번째 필터는 두번째 필터가 존재하기 때문에 중복되어 불필요합니다. 중복 필터 검사기는 중복된 필터가 제거된 필터 목록을 출력합니다.

이 도구는 일정한 제한이 있습니다. 요소 숨김 필터는 검사할 수 없어 항상 변경되지 않은 상태로 출력됩니다. 또한 단순 필터에 대한 중복된 정규 표현식이 존재할 때조차도 정규 표현식을 제거할 것인지 결정할 수 없습니다.

애드블록 플러스 필터 관리 창을 열고, 검사하려는 필터를 선택합니다. 필터를 복사(Ctrl+C)하고 아래의 텍스트 입력란에 붙여넣습니다. 또는 필터를 내보내고, 파일의 필터를 텍스트 입력란에 붙여넣어도 됩니다.

개인 정보에 관한 설명 : 어떠한 데이터도 서버로 전송되지 않습니다. 모든 필요한 계산은 당신의 컴퓨터에서 수행되며, 당신의 데이터는 저장되지 않습니다.

필터 중복 검사

상태 :

중복된 필터 목록은 아래에 출력됩니다. 그것을 복사해서 필터 관리 목록에 붙여넣으십시오(기존 필터 목록을 먼저 제거하십시오). 또는 개별 창으로 필터 목록을 출력하려면 여기를 클릭하십시오. 그리고 파일로서 저장한 후 필터 관리 창에서 그 파일을 불러오십시오.

[javascript] 회원가입 시, 아이디 중복 확인하기

회원가입을 조금 더 완벽하게 하기 위해서 아이디 중복 확인을 구현해보았습니다. 중복 검사 버튼을 눌렸을 경우, 동일한 아이디가 있는지 확인하고 없다면 절차를 진행하도록 합니다.

html 코드는 다음과 같습니다.

아이디를 입력하는 input, 중복 검사를 실시하는 button, 중복 검사가 완료되었을 때 표시 해주는 img 가 있다. 중복 검사전과 후 모습은 아래 이미지와 같습니다.

이제 중복검사 버튼을 클릭할 시, id_overlap_check 라는 함수가 실행되는데 이 함수를 살펴보도록 하겠습니다.

$(‘.username_input’).change(function () { $(‘#id_check_sucess’).hide(); $(‘.id_overlap_button’).show(); $(‘.username_input’).attr(“check_result”, “fail”); })

첫번째로는 아이디를 변경했을 경우에 처리입니다. 중복확인을 했더라도 아이디를 다시 수정한다면, 다시 중복확인 이미지를 숨기고 버튼을 보여줍니다. 또한 check_result 를 fail 로 바꿔서 뒤에서 제출을 못하게 막습니다.

if ($(‘.username_input’).val() == ”) { alert(‘이메일을 입력해주세요.’) return; }

두 번째로 아무런 값도 입력하지 않은 체 중복확인 버튼을 누른 경우입니다. 간단한 알람을 띄워주고 함수는 더 이상 실행할 필요가 없습니다.

id_overlap_input = document.querySelector(‘input[name=”username”]’); $.ajax({ url: “{% url ‘lawyerAccount:id_overlap_check’ %}”, data: { ‘username’: id_overlap_input.value }, datatype: ‘json’,

세 번째는 ajax 로 처리해주는 부분입니다. 먼저 해당 url 로 data 를 넘겨줍니다. 여기서 데이터는 id_overlap_input 에서 가져온 값, 사용자가 아이디 부분에 입력한 값이 될 것입니다.

# views.py def id_overlap_check(request): username = request.GET.get(‘username’) try: # 중복 검사 실패 user = User.objects.get(username=username) except: # 중복 검사 성공 user = None if user is None: overlap = “pass” else: overlap = “fail” context = {‘overlap’: overlap} return JsonResponse(context)

이에 대해서 값을 입력받고 중복 검사를 실시합니다. 중복 검사는 예외 처리를 이용해서 해당 아이디의 user가 없을 경우 pass 를 있을 경우 fail 을 다시 json 으로 넘겨주었습니다.

success: function (data) { if (data[‘overlap’] == “fail”) { alert(“이미 존재하는 아이디 입니다.”); id_overlap_input.focus(); return; } else { alert(“사용가능한 아이디 입니다.”); $(‘.username_input’).attr(“check_result”, “success”); $(‘#id_check_sucess’).show(); $(‘.id_overlap_button’).hide(); return; } } });

data가 성공적으로 넘어왔으면 success 이후를 실행합니다. view 에서 넘어온 데이터가 fail 이라면 알람과 함께 포커스를 다시 아이디 입력창으로 이동하고, pass 라면, check_result 를 success 로 바꿔줘서 후에 submit 시 통과 하도록 해줍니다. 다시 버튼을 누를 일이 없으므로 버튼은 숨기고 중복확인 되었다는 이미지는 띄워주도록 합니다.

function id_overlap_check() { $(‘.username_input’).change(function () { $(‘#id_check_sucess’).hide(); $(‘.id_overlap_button’).show(); $(‘.username_input’).attr(“check_result”, “fail”); }) if ($(‘.username_input’).val() == ”) { alert(‘이메일을 입력해주세요.’) return; } id_overlap_input = document.querySelector(‘input[name=”username”]’); $.ajax({ url: “{% url ‘lawyerAccount:id_overlap_check’ %}”, data: { ‘username’: id_overlap_input.value }, datatype: ‘json’, success: function (data) { console.log(data[‘overlap’]); if (data[‘overlap’] == “fail”) { alert(“이미 존재하는 아이디 입니다.”); id_overlap_input.focus(); return; } else { alert(“사용가능한 아이디 입니다.”); $(‘.username_input’).attr(“check_result”, “success”); $(‘#id_check_sucess’).show(); $(‘.id_overlap_button’).hide(); return; } } }); }

id_overlap_check 의 전체적인 코드는 다음과 같습니다.

if ($(‘.username_input’).attr(“check_result”) == “fail”){ alert(“아이디 중복체크를 해주시기 바랍니다.”); $(‘.username_input’).focus(); return false; }

제출 시, 아이디 중복체크가 되지않았으면 오류 알람 띄워주도록 fail 일 경우에는 알람을 띄우고 submit을 하지 못하도록 return 시키도록 합니다.

[엑셀팁] 중복값을 찾는 4가지 방법

직장인은 숙명적으로 데이터를 다루어야 하는 직업입니다. 100건 이하의 스몰 데이터에서부터 수천, 수만 건에 이르는 빅 데이터를 다루어야 하는 경우도 생기게 되는데요. 불규칙적으로 연속되는 숫자를 분석하며 희열을 느끼는 분들은 잘 모르시겠지만 숫자만 봐도 이마의 고열을 느끼는 일반 직장인들에게는 곤욕이 아닐 수 없습니다.

한 번은 여러 번 확인 후 보고한 데이터에 문제가 있다는 지적을 받은 적이 있습니다. 모든 것이 완벽했지만 가장 근본적인 문제, 원자료(raw data) 가공에 문제가 있었던 것이었어요. 여기저기서 데이터를 끌어다 붙이면 생기는 문제, 바로 중복값 때문에 생긴 오류였습니다. 데이터 량이 많으면 많을수록 중복값을 골라내는 데에는 큰 어려움이 존재하거든요. 그래서 준비했습니다. 완벽하게 중복값을 발견하는 3가지 방법입니다.

※ 주의: 중복값을 완벽히 제거했다는 업무상 자기만족은 느낄 수 있지만 칭찬을 기대하진 마세요. 당연한 일이거든요…추욱

예시를 위해서 효성의 크레오라 제품명으로 방대한 양의 데이터 파일을 만들었습니다. 무려 12가지나 됩니다. Data1과 data2의 숫자들은 난수로 생성한 데이터입니다. 아무 의미 없어요.

중복값을 찾아보세요. 총 3개의 중복 데이터가 포함되어 있습니다.

방법1: 한 번에 다 지워주는 ‘중복된 항목 제거’

많은 분들이 활용하고 있는 방법이죠? 메뉴>데이터>데이터 도구에서 쉽게 중복된 항목 제거 기능을 찾으실 수 있어요. 일단 기능을 실행하고 나면 데이터가 자연적으로 지워지기 때문에 실행을 완료하기 전엔 꼭 삭제해도 되는 데이터가 맞는지 확인해야 합니다.

메뉴의 버튼이 잘 안보이시죠? 데이터도구 메뉴만 크게 볼까요? 어떤 아이콘인지 잘 보이시죠?

실행하기 전에 꼭 중복값을 비교할 열의 셀을 선택한 후에 아이콘을 클릭해주세요. 그럼 실행을 해볼까요?

중복값을 확인할 열을 선택하세요. 하나 이상을 선택하면 됩니다. 저는 제품명에 대한 중복값만을 체크해보겠습니다.

1개의 중복값이 제거 되었습니다. 원자료와 비교해보면 음..제가 지우고 싶었던 것과는 차이가 있습니다. 제거되지 않은 데이터도 보이네요. 이유가 뭘까요?

9번 데이터만 삭제되었군요. 9번은 정확히 지우고 싶은 데이터가 확실합니다. 그런데 혹시 찾으셨어요? 2가지 중복값이 더 있는데요. 11번과 12번이에요. 11번은 ‘creora® highclo™’와 ‘creora®highclo™’, 12번은 ‘creora® eco-soft‘와 ‘creora® eco-soft(공백)’, 즉 띄어쓰기 차이에 의해서 중복값으로 분류되지 않았네요.

여러 사람한테서 얻은 데이터는 제아무리 같은 제품명으로 표기했다 하더라도 조금씩 차이가 있을 수 있으니 바로 적용해서는 안 되겠군요. 그럼 다음 방법으로 이동합니다.

방법2: 눈에 보이는 ‘조건부 서식’

보통 조건부 서식은 특정 값보다 크거나 작은 경우, 또는 같은 경우를 표시하는 기능이죠. 이 중에서 같은 값을 표시하면 중복값을 눈으로 확인할 수 있어 유용합니다.

조건부 서식을 적용할 셀이나 열을 선택하여 기능을 사용하시면 되는데요, 아래 이미지처럼 ‘셀 강조 규칙>중복값’을 선택합니다.

중복값을 표시하는 서식을 지정하는 팝업 창이 하나 뜨면 별다른 변경 없이 확인을 눌러주세요. 찾으면 바로 지울 데이터이니까 표시 서식은 중요하지 않거든요.

아쉽게도 1단계, 중복된 항목 제거 기능과 같은 결과입니다. 하지만 두 가지 기능은 수행 결과를 컨트롤 할 수 있다는 점에서 조금 다릅니다. 조건부 서식의 경우엔 중복되는 값을 모두 표시하기 때문에 위쪽의 데이터를 지울지, 아래쪽의 데이터를 지울지 사용자가 결정을 할 수 있어요. 어찌 되었건 모두 중복값을 모두 거르진 못했으니 다음 방법으로 가보겠습니다.

방법3: 하나하나 확인하리라! ‘필터-오름차순 정렬’

보고 싶은 항목의 데이터만 볼 때 사용하는 필터 기능 중에서 오름차순이나 내림차순 정렬을 활용해서 중복값을 찾을 수 있습니다. 여기까지만 들으셔도 어떻게 하는 줄 아시겠죠? 데이터 상단의 항목을 선택한 후 ‘메뉴-데이터-정렬 및 필터’에서 필터를 클릭하세요. 그리고 제품명으로 오름차순 정렬을 하시면 똑같은 데이터가 보이실 거예요.

지금은 12개뿐이지만 더 많은 데이터일 경우 눈으로만 찾기엔 힘드실 거예요. 이럴 때 위의 2단계 조건부 서식을 함께 사용하시면 더 빠르게 찾을 수 있습니다.

결과를 살펴보면 중복값 3개 중 2가지를 찾은 것을 확인하실 수 있는데요. 그럼 나머지 하나는 어떻게 된 거죠? 1번과 11번 항목의 띄어쓰기 차이는 오름차순 정렬로도 찾아내기가 쉽지 않습니다. 그럼 이제 마지막 방법으로 넘어가 보겠습니다.

방법4: 마무리는 역시 ‘피벗’

드디어 마지막 단계! 확실히 중복값을 찾아보기 위해서 엑셀의 꽃, 피벗 기능을 활용할 예정입니다. 피벗은 각 항목별로 개수나 평균, 합계 등을 한눈에 확인할 수 있는 기능입니다. 가장 기본이 되는 기능만을 활용하여 중복값을 찾아보겠습니다.

먼저 데이터가 있는 위치 아무 곳의 셀을 선택하고 메뉴>삽입에 있는 ‘피벗테이블’을 클릭하세요. 표 또는 범위가 올바르게 설정되었는지 확인하고 새 워크시트에서 열기를 클릭하면 새로운 시트에 피벗테이블이 생길 거예요. 왼쪽 필드에서 제품명을 마우스로 끌어 행에 넣어주시고, 나머지 필드 중 하나를 시그마 값에 끌어넣어주세요.

행 레이블 중 creora®과 그 뒤의 단어 사이에 띄어쓰기가 되지 않은 것이 눈에 확 들어오는군요. 또 creora® eco-soft라는 항목이 두 개나 보이네요. 이상합니다. 우리는 답을 알고 있잖아요. Eco-soft 뒤에 공백이 있었다는 것을요. 원데이터에서 이 두 가지 부분을 찾아서 수정 후 새로고침 해보겠습니다.

이제 좀 확실해진 것 같은데요. 중복값 3가지를 모두 찾으셨나요? 사업분야의 개수가 2로 표시되는 곳 세 곳입니다. 역시 피벗입니다. 비교하기도 쉽고 찾아내기도 쉽네요.

지금까지 데이터에서 중복값을 찾아보았는데요. 역시 중간에 끼인 공백은 찾기가 쉽지 않습니다. 하지만 소개해 드린 4가지 방법을 단계별로 적용하면 세상에 못 찾을 중복값은 없을 거예요. ㅎㅎ 직장인 여러분의 즐거운 엑셀 생활에 도움이 되었으면 좋겠습니다. 다음엔 더 유용한 팁으로 찾아뵐게요~

[웹개발] 아이디 중복 검사

* 개인적인 공부 내용을 기록한 글입니다.

소감

3주차 과제지만 미리 만들어봤다.

주소DB도 만들어야하는데 생각보다 까다로워서 잠시 보류ㅠ

CSS가 중구난방으로(…) 적용되어있으니 코드 보는데 방해가 돼서

기능만 구현할 브랜치를 새로 만들었다.

디자인 정보를 깔끔하게 정리할 수 있도록 CSS 공부도 따로 해보고 싶다.

회원가입 시 아이디 중복 검사

1. 요약

join.php와 join_ok.php를 수정해주고

아이디 중복 검사를 처리할 check.php를 새로 만들어줬다.

2. 아이디 중복 검사 시나리오

[1] 아이디를 입력한다.

[2] 중복 검사 버튼을 누르면 기존 DB에 해당 아이디가 이미 존재하는지 확인한다.

[3] 새 창을 띄워서 확인 결과를 안내한다.

[4-1] 이미 존재한다면 사용할 수 없는 아이디라고 안내한다.

[4-2] [다른 ID 사용] 버튼을 누르면 아이디 폼을 비워준다. (+창꺼짐)

[5-1] 존재하지 않는다면 사용 가능한 아이디라고 안내한다.

[5-2] [이 ID 사용] 버튼을 누르면 아이디 폼을 비활성화하고 [가입하기] 버튼을 활성화한다. (+창꺼짐)

[5-3] 부모창으로 돌아온 상태에서 변심으로 [다른 ID로 변경] 버튼을 누르면 아이디 폼을 활성화+비워주고 [가입하기] 버튼은 다시 비활성화해준다.

* 아이디 폼을 비활성화하면 폼을 통해 받았던 아이디 값이 변수 상에서 사라져버리기 때문에,

비활성화시키기 직전 hidden 처리한 다른 변수에 확정한 아이디를 넘겨주고, 이후 그 값을 POST로 넘겨주는 방향으로 구현했다.

* 아이디를 확정하지 않으면 hidden 변수에 아이디 값이 넘어가지 않기 때문에, POST를 해도 아이디가 DB로 넘어가지 않는다.

* 따라서 아이디를 확정했을 시에만 POST를 진행할 수 있도록 상황에 따른 [가입하기] 버튼의 활성/비활성 여부를 설정해주었다.

3. 최종 화면

흐름에 따라 뜯어보기

1. 다음은 join.php의

태그 내부이다.

이름:

아이디:

ID 중복 여부를 확인해주세요.

비밀번호:

비밀번호 확인:

[1] 아이디 값을 자바스크립트로 다뤄주기 위해 id=”uid” 를 추가해준다.

[2] 확정한 아이디를 임의로 변경할 수 없도록 아이디 폼을 비활성화시키기 전, 아이디 값을 넘겨주기 위해 hidden 타입의 태그를 만들고 name과 id 값을 지정해준다.

[3] 상황에 따라 [ID 중복 여부를 확인해주세요.] 안내 문구도 변경해줄 것이기 때문에 id 값을 지정해주고, 가시성을 위해 빨간색으로 표현해준다.

[4] [ID 중복 검사] 버튼의 value도 상황에 따라 변경해줄 것이기 때문에 id 값을 지정해주고, 클릭했을 시 ID 중복 검사를 수행할 함수를 호출하기 위해 onclick = “checkid();” 을 추가해준다.

[5] [가입하기] 버튼도 id 값을 지정해주고, 초기 상태를 비활성화 상태로 설정해준다.

2. 다음은 [ID 중복 검사] 버튼을 눌렀을 때 수행될 checkid() 함수의 내용이다.

* .js로 분리해도 되고, join.php의 /

2. DAO

회원가입 JSP에서 받아온 ID값과 기존 테이블의 ID값이 일치하는지 여부를

확인하기 위해 Select명령어를 사용해 DAO를 만들었습니다. Select값이 없는 경우 0을 출력하고,

Select값이 있는 경우 1을 출력하도록 설정했습니다.

public int checkId(String id) { // 유저가 입력한 값을 매개변수로 한다 conn(); String sql = "select * from user_info where user_id = ?"; // 입력값이 테이블에 있는지 확인 int idCheck = 0; try { psmt = conn.prepareStatement(sql); psmt.setString(1, id); rs = psmt.executeQuery(); if(rs.next() || id.equals("")) { idCheck = 0; // 이미 존재하는 경우, 생성 불가능 } else { idCheck = 1; // 존재하지 않는 경우, 생성 가능 } } catch (SQLException e) { e.printStackTrace(); } finally { close(); } return idCheck; }

3. Servlet

Servlet에서는 JS를 통해 받은 값을 처리합니다.

받아온 값은 ajax 기본 인코딩 값인 UTF-8로 처리해줍니다.

DAO를 통해 값이 중복하는지 확인한 후, 결과 값을 JSP로 보내줍니다.

request.setCharacterEncoding("UTF-8"); // ajax로 값을 받기 때문에 UTF-8로 인코딩해준다 response.setCharacterEncoding("EUC-KR"); String userId = request.getParameter("userId"); // join.jsp에서 받아온 key값이 userId이고 // value값은 유저가 실제로 적은 값, String userId에는 value값이 들어간다. PrintWriter out = response.getWriter(); MemberDAO dao = new MemberDAO(); int idChcek = dao.checkId(userId); // 성공여부 확인 : 개발자용 if (idChcek == 0) { System.out.println("이미 존재하는 아이디입니다."); } else if (idChcek == 1) { System.out.println("사용 가능한 아이디입니다."); } out.write(idChcek + ""); // --> ajax 결과값인 result가 됨 // --> String으로 값을 내보낼 수 있도록 + "" 를 해준다 }

이렇게 세 단계를 모두 구성하면

사용자가 JSP에서 ID값 입력 시 그 값이 Servlet으로 이동하고

Servlet에서는 dao클래스의 메소드를 통해 처리합니다.

처리한 결과는 다시 JSP를 통해 사용자에게 보이게 됩니다.

실행화면입니다.

ajax 방식을 사용했기 때문에 사용자는 새로고침 없이도

입력한 값에 대한 결과를 바로 확인할 수 있습니다.

지금까지 jQuery와 ajax를 통해 id값 중복 여부를 확인하는 방법에 대해 알아봤습니다.

끝까지 읽어주셔서 감사합니다 : )

[JSP] 아이디 중복 체크 기능 구현 <동기 방식>

반응형

이번 혼자서 게시판 웹페이지를 만들면서

내가 생각해본 대로 만든

[아이디 중복 체크 기능]을 업로드하겠습니다.

기능을 만들기에 앞서 <동기 / 비동기 방식>인 두 가지 방식으로 만들 수 있었습니다.

최근 많은 웹페이지에서 회원 가입 시에

아이디 중복 체크 기능을 비동기 방식으로 진행합니다.

하지만 저는 먼저 동기 방식으로 한번 만들어보았습니다.

추후에 비동기 방식으로 아이디 중복 체크 기능을 구현해보겠습니다.

부족한 부분이 있으면 댓글로 소중한 의견과 조언 부탁드립니다.

실제로 제가 만든 회원가입 창의 UI입니다.

기능 설명

1) ID 입력 없이 [중복 확인] 버튼 클릭 시 아이디를 적으라는 메시지와 오류 표시

2) ID를 적은 후 [중복 확인] 버튼을 클릭하면 아래 이미지와 같이 새로운 창 오픈

- 회원 가입 ID 입력란에 적힌 ID 전달과 서버에 DB 연결을 요청

3) 사용하기 버튼을 클릭하면 사용 가능

4) 중복 확인을 하지 않았을 시 회원 가입 불가능

회원가입 창(JSP)

위 사진은 회원가입 창에서 아이디와 관련된 부분입니다.

아이디를 중복 체크를 하지 않았을 때 회원가입 버튼을 클릭하면

아이디 중복 체크를 하라는 메시지를 전달하기 위해

"hidden" 타입의 input 태그를 넣었습니다.

value로 idUncheck를 주었습니다.

idCheck 상태가 아니라면 위 사진처럼

"아이디 중복체크를 해주세요."라는 알림이 뜹니다.

아이디를 입력 후 버튼을 클릭 시에는

dbCheckId.do로 controller에 요청을 합니다.

MemberController

Controller(servlet)

요청을 받고 Service와 DAO를 통해 DB와 연결 후 아이디 중복 여부를 받아옵니다.

저는 Int 데이터 형식으로 결과를 받아왔습니다.

회원가입에서 /dbCheckId.do로 요청하면서 전달한 Id 값을 idCheck라는 메서드에 같이 전달했습니다.

memberService의 idCheck(String id) 메서드

MemberDAO

MemberDAO의 selectAllId(String id)

아이디가 있을 시에는 result 값으로 1 전달

없을 시에는 0을 전달합니다.

아이디 중복 체크(JSP)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %> <% request.setCharacterEncoding("UTF-8"); Integer result = (Integer) session.getAttribute("result"); %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> ID 중복 확인 ID 중복 확인

이미 사용 중인 아이디입니다.

사용가능한 아이디입니다.

오류 발생(-1)


session으로 받아온 결괏값에 따라

"hidden" 타입인 input 태그로 값 N/Y을 전달합니다.

[사용하기]를 클릭 시

hidden의 값이 Y일 경우

회원가입 창의 아이디 중복 체크 시 hidden 값이었던 "idUnCheck"를

"idCheck"로 변경해줍니다.

중복 체크가 되었다는 뜻입니다.

중복 체크가 완료가 되면 아래 사진과 같이 [중복 체크] 버튼은 비활성화가 됩니다.

만약 id를 중복 체크를 하고 다른 아이디로 변경하여 입력했을 때

중복 체크를 다시 해야 하기 때문에

(행여 중복체크를 하지 않아도 회원가입이 되는 예외 방지)

id input 태그에 onkeydown이라는 함수를 넣어주었습니다.

onkeydown의 함수

만약 id-input 칸에 문자가 입력된다면 "idCheck"가 되었던 hidden 태그는 다시 idUncheck로 바뀌게 됩니다.

그럼 중복확인 버튼도 다시 활성화가 됩니다.

버튼이 다시 활성화가 된 모습

지금까지 스스로 만들어본 아이디 중복 체크 기능이었습니다.

조금은 복잡하고 부족한 점 양해 부탁드립니다.

아쉬운 점은 class나 변수명 설정을 너무 통일성 없게 한 것이 아닐까라는 생각이 듭니다.

다음에는 ajax를 이용한 비동기 방식으로 아이디 중복 체크를 진행해보겠습니다.

감사합니다.

728x90

반응형

세상의 모든 기록 :: [JSP개발] 회원가입

1. 개요

이번에는 아이디 중복체크 및 회원가입 시 입력값들을 검사하는 기능을 구현할 것이다. 핵심적인 부분들의 구현이 우선이어서 미뤄두고 있었던 부분인데, 이번 포스팅에서 모두 구현을 할 것이다.

아이디 중복체크에서 알아야 될 것은 부모창 ↔ 자식창의 데이터 전달이다. 이 부분에 대한 설명은 소스 코드 설명에서 자세히 할 것이다.

■ JSP JoinForm.jsp : 회원가입 화면에는 중복체크 창을 띄우는 코드 및 입력된 값들을 검사하는 코드를 추가한다.

IdCheckForm.jsp : 아이디 중복체크 화면이다.

■ Java MemberIdCheckAction.java : 아이디 중복체크를 처리하는 Action이다.

MemberDAO .java : 기존에 만들어둔 아이디 중복체크 메서드를 사용할 것이다. 추가로 구현할 부분은 없다.

2. 소스 코드

■ JoinForm.jsp

회원가입 화면에서는 아이디를 입력하는 와 중복확인 버튼에 이벤트를 추가한다. 그리고 중복체크를 했는지 판단하기 위해 hidden을 추가한다.

139줄 : 아이디 입력란에는 키보드 입력시 발생하는 onkeydown 이벤트를 추가했다. 이 이벤트를 사용하는 것은 만약 사용자가 중복체크를 하고 난 뒤 아이디 입력란에 사용 가능한 아이디를 지우고 새로운 아이디를 입력했을 경우에 대처하기 위함이다. 이렇게 하면 중복체크가 되지 않은 것으로 처리되도록 한다. 140줄 : 중복확인 클릭 시 아이디 중복확인 창을 띄운다.

141줄 : 아이디 중복체크를 했는지 판단하기 위한 부분이다. 의 value가 idUncheck 이면 중복체크를 하지 않은 것이다.

checkValue( )는 가입버튼 클릭 시 실행되는 함수이다. 여기에서는 회원가입 화면에 값들이 입력되었는지를 검사한다. 입력되지 않은 값이 있다면 경고 창을 띄운다.

checkValue( )를 보면 isNaN( )이란 함수를 사용한 부분이 있다. isNaN( )은 숫자인지 문자인지 검사하는 함수이다. 검사 결과는 boolean으로 반환한다.

isNaN(입력값) → true : 입력값은 문자이다.

isNaN(입력값) → false : 입력값은 숫자이다.

중복확인 버튼 클릭 시 호출되는 함수이다. openIdChk( )는 아이디 중복체크 화면을 띄운다.

아이디 입력란에서 키보드로 값을 입력 시 호출되는 함수이다. 중복체크 후 아이디 입력란에 사용 가능한 아이디가 입력되어 있을 때 입력된 아이디를 지우고 새로운 아이디를 입력하면 문제가 발생할 수 있다.

이와 같은 경우를 방지하기 위해 아이디를 입력하게 되면 일단, 의 value를 idUncheck로 변경하여 중복체크가 실행되지 않은 것으로 처리한다.

소스코드 더보기

접기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 <% @ page language = "java" contentType = "text/html; charset=EUC-KR" pageEncoding = "EUC-KR" %> < html > < head > < title >회원가입 화면 < style type = "text/css" > table { margin-left : auto ; margin-right : auto ; border : 3px solid skyblue ; } td { border : 1px solid skyblue } #title { background-color : skyblue } < script type = "text/javascript" > // 회원가입 화면의 입력값들을 검사한다. function checkValue() { var form = document .userInfo; if ( ! form.id.value){ alert ( "아이디를 입력하세요." ); return false ; } if (form.idDuplication.value ! = "idCheck" ){ alert ( "아이디 중복체크를 해주세요." ); return false ; } if ( ! form.password.value){ alert ( "비밀번호를 입력하세요." ); return false ; } // 비밀번호와 비밀번호 확인에 입력된 값이 동일한지 확인 if (form.password.value ! = form.passwordcheck.value ){ alert ( "비밀번호를 동일하게 입력하세요." ); return false ; } if ( ! form. name .value){ alert ( "이름을 입력하세요." ); return false ; } if ( ! form.birthyy.value){ alert ( "년도를 입력하세요." ); return false ; } if ( isNaN (form.birthyy.value)){ alert ( "년도는 숫자만 입력가능합니다." ); return false ; } if (form.birthmm.value = = "00" ){ alert ( "월을 선택하세요." ); return false ; } if ( ! form.birthdd.value){ alert ( "날짜를 입력하세요." ); return false ; } if ( isNaN (form.birthdd.value)){ alert ( "날짜는 숫자만 입력가능합니다." ); return false ; } if ( ! form.mail1.value){ alert ( "메일 주소를 입력하세요." ); return false ; } if ( ! form.phone.value){ alert ( "전화번호를 입력하세요." ); return false ; } if ( isNaN (form.phone.value)){ alert ( "전화번호는 - 제외한 숫자만 입력해주세요." ); return false ; } if ( ! form.address.value){ alert ( "주소를 입력하세요." ); return false ; } } // 취소 버튼 클릭시 첫화면으로 이동 function goFirstForm() { location .href = "MainForm.do" ; } // 아이디 중복체크 화면open function openIdChk(){ window . name = "parentForm" ; window .open( "member/IdCheckForm.jsp" , "chkForm" , "width=500, height=300, resizable = no, scrollbars = no" ); } // 아이디 입력창에 값 입력시 hidden에 idUncheck를 세팅한다. // 이렇게 하는 이유는 중복체크 후 다시 아이디 창이 새로운 아이디를 입력했을 때 // 다시 중복체크를 하도록 한다. function inputIdChk(){ document .userInfo.idDuplication.value = "idUncheck" ; } < body > < br >< br > < b >< font size = "6" color = "gray" >회원가입 < br >< br >< br > < form method = "post" action = "MemberJoinAction.do" name = "userInfo" onsubmit = "return checkValue()" > < table > < tr > < td id = "title" >아이디 < td > < input type = "text" name = "id" maxlength = "50" onkeydown = "inputIdChk()" > < input type = "button" value = "중복확인" onclick = "openIdChk()" > < input type = "hidden" name = "idDuplication" value = "idUncheck" > < tr > < td id = "title" >비밀번호 < td > < input type = "password" name = "password" maxlength = "50" > < tr > < td id = "title" >비밀번호 확인 < td > < input type = "password" name = "passwordcheck" maxlength = "50" > < tr > < td id = "title" >이름 < td > < input type = "text" name = "name" maxlength = "50" > < tr > < td id = "title" >성별 < td > < input type = "radio" name = "gender" value = "남" checked >남 < input type = "radio" name = "gender" value = "여" >여 < tr > < td id = "title" >생일 < td > < input type = "text" name = "birthyy" maxlength = "4" placeholder = "년(4자)" size = "6" > < select name = "birthmm" > < option value = "00" >월 < option value = "01" >1 < option value = "02" >2 < option value = "03" >3 < option value = "04" >4 < option value = "05" >5 < option value = "06" >6 < option value = "07" >7 < option value = "08" >8 < option value = "09" >9 < option value = "10" >10 < option value = "11" >11 < option value = "12" >12 < input type = "text" name = "birthdd" maxlength = "2" placeholder = "일" size = "4" > < tr > < td id = "title" >이메일 < td > < input type = "text" name = "mail1" maxlength = "50" >@ < select name = "mail2" > < option >naver.com < option >daum.net < option >gmail.com < option >nate.com < tr > < td id = "title" >휴대전화 < td > < input type = "text" name = "phone" / > < tr > < td id = "title" >주소 < td > < input type = "text" size = "50" name = "address" / > < br > < input type = "submit" value = "가입" / > < input type = "button" value = "취소" onclick = "goFirstForm()" > Colored by Color Scripter cs 접기

■ IdCheckForm.jsp

아이디 중복체크 화면의 html이다.

115줄 : 중복체크 화면이 열리면 onload 이벤트에 의해 pValue( )라는 함수가 호출된다.

124줄 : 중복확인 버튼 클릭 시 중복체크를 하는 idCheck( )가 호출된다.

128줄 : 취소 클릭 시 현재창을 닫도록 한다.

129줄 : 사용하기를 클릭하면 sendCheckValue( )가 실행되어 입력된 값이 회원가입 화면으로 전달된다.

중복체크 화면이 열리면 제일 먼저 실행되는 함수이다. pValue( )는 부모창, 즉 회원가입 화면의 값을 가져와서 중복체크 화면에 아이디 입력란에 세팅한다.

※ 부모창에 접근하려면 opener를 사용해서 접근해야 한다.

idCheck( )는 아이디 중복체크를 하는 함수이다. 여기서는 먼저 아이디 입력 여부와 한글이나 특수문자를 입력했는지를 검사한다. 이후 Ajax를 이용해 중복체크를 한다. Ajax 부분에 대한 설명은 다른 포스팅에서 몇 번 언급했기에 생략한다.

61줄 : 아이디 입력란에서 입력된 값을 가져온다.

63~65줄 : 아이디 입력 여부를 검사한다. 아이디 미입력시 경고 창을 띄운다.

67~69줄 : 한글 및 특수문자 입력 여부를 검사한다. 한글이나 특수문자가 입력되었다면 경고 창을 띄운다.

서버로 데이터 전달 후 정상적으로 서버에서 데이터를 받을 경우 실행되는 부분이다. 0의 값을 받으면 중복된 아이디가 있는 것이고, 1의 값을 받으면 입력한 아이디는 사용할 수 있는 아이디이다.

여기서 visible와 hidden 이렇게 두 가지 CSS 속성이 사용된 것을 볼 수 있다. 이것은 소스 코드 128~129줄의 취소, 사용하기 버튼을 상황에 따라 보여주거나 보여주지 않거나 하기 위해서이다.

88~90줄 : 아이디가 중복되었을 경우 사용하기 버튼은 보여주지 않는다. 그리고 innerHTML을 이용하여

안에 입력된 텍스트를 공백으로 바꾼다. 93~95줄 : 입력한 아이디가 사용 가능할 경우 사용하기 버튼을 보여준다. 그리고 innerHTML을 이용하여

에 사용 가능하다는 텍스트를 보여준다.

사용하기 버튼 클릭 시 호출되는 함수이다. 여기서는 부모창인 회원가입 화면에 2가지 값을 전달한다.

103줄 : opener을 이용해 부모창에 있는 에 값을 전달한다. idCheck가 전달되면 부모창에서는 중복체크를 한 것으로 판단한다. 105줄 : 현재 중복체크 창에 입력된 아이디를 부모창에 아이디 입력란에 세팅한다.

107~109줄 : 값 전달 후 중복체크 창을 닫는다.

소스코드 더보기

접기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 <% @ page language = "java" contentType = "text/html; charset=EUC-KR" pageEncoding = "EUC-KR" %> < html > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=EUC-KR" > < title >아이디 중복 체크 < style type = "text/css" > #wrap { width : 490px ; text-align : center ; margin : 0 auto 0 auto ; } #chk { text-align : center ; } #cancelBtn { visibility : visible ; } #useBtn { visibility : hidden ; } < script type = "text/javascript" > var httpRequest = null ; // httpRequest 객체 생성 function getXMLHttpRequest(){ var httpRequest = null ; if ( window .ActiveXObject){ try { httpRequest = new ActiveXObject( "Msxml2.XMLHTTP" ); } catch (e) { try { httpRequest = new ActiveXObject( "Microsoft.XMLHTTP" ); } catch (e2) { httpRequest = null ; } } } else if ( window .XMLHttpRequest){ httpRequest = new window .XMLHttpRequest(); } return httpRequest; } // 회원가입창의 아이디 입력란의 값을 가져온다. function pValue(){ document . getElementById ( "userId" ).value = opener. document .userInfo.id.value; } // 아이디 중복체크 function idCheck(){ var id = document . getElementById ( "userId" ).value; if ( ! id) { alert ( "아이디를 입력하지 않았습니다." ); return false ; } else if ((id < "0" | | id > "9" ) & & (id < "A" | | id > "Z" ) & & (id < "a" | | id > "z" )){ alert ( "한글 및 특수문자는 아이디로 사용하실 수 없습니다." ); return false ; } else { var param = "id=" + id httpRequest = getXMLHttpRequest(); httpRequest.onreadystatechange = callback; httpRequest.open( "POST" , "MemberIdCheckAction.do" , true ); httpRequest.setRequestHeader( 'Content-Type' , 'application/x-www-form-urlencoded' ); httpRequest.send(param); } } function callback(){ if (httpRequest.readyState = = 4 ){ // 결과값을 가져온다. var resultText = httpRequest.responseText; if (resultText = = 0 ){ alert ( "사용할수없는 아이디입니다." ); document . getElementById ( "cancelBtn" ).style.visibility = 'visible' ; document . getElementById ( "useBtn" ).style.visibility = 'hidden' ; document . getElementById ( "msg" ).innerHTML = "" ; } else if (resultText = = 1 ){ document . getElementById ( "cancelBtn" ).style.visibility = 'hidden' ; document . getElementById ( "useBtn" ).style.visibility = 'visible' ; document . getElementById ( "msg" ).innerHTML = "사용 가능한 아이디입니다." ; } } } // 사용하기 클릭 시 부모창으로 값 전달 function sendCheckValue(){ // 중복체크 결과인 idCheck 값을 전달한다. opener. document .userInfo.idDuplication.value = "idCheck" ; // 회원가입 화면의 ID입력란에 값을 전달 opener. document .userInfo.id.value = document . getElementById ( "userId" ).value; if (opener ! = null ) { opener.chkForm = null ; self. close (); } } < body onload = "pValue()" > < div id = "wrap" > < br > < b >< font size = "4" color = "gray" >아이디 중복체크 < hr size = "1" width = "460" > < br > < div id = "chk" > < form id = "checkForm" > < input type = "text" name = "idinput" id = "userId" > < input type = "button" value = "중복확인" onclick = "idCheck()" > < div id = "msg" > < br > < input id = "cancelBtn" type = "button" value = "취소" onclick = "window.close()" >< br > < input id = "useBtn" type = "button" value = "사용하기" onclick = "sendCheckValue()" > Colored by Color Scripter cs 접기

■ MemberIdCheckAction.java

아이디 중복체크 Action에서는 중복체크 화면에서 넘겨받은 id를 검사하는 작업을 한다. 그리고 검사 결과에 따라 0 또는 1의 값을 화면으로 전달한다.

18줄 : 파라미터에서 id값을 가져온다.

21줄 : DAO로 전달하여 id 중복체크를 한다.

26~27줄 : 중복된 아이디라면 0을 사용 가능한 아이디라면 1을 화면으로 전달한다.

소스코드 더보기

접기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 package jsp.member.action; import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jsp.common.action.Action; import jsp.common.action.ActionForward; import jsp.member.model.MemberDAO; public class MemberIdCheckAction implements Action { @Override public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception { String id = request.getParameter( "id" ); MemberDAO dao = MemberDAO.getInstance(); boolean result = dao.duplicateIdCheck(id); response.setContentType( "text/html;charset=euc-kr" ); PrintWriter out = response.getWriter(); if (result) out . println ( "0" ); // 아이디 중복 else out . println ( "1" ); out .close(); return null ; } } Colored by Color Scripter cs 접기

■ MemberDAO .java

DAO에서는 기존에 구현해둔 중복체크 메서드를 사용하면 된다.

소스코드 더보기

접기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 package jsp.member.model; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Date; import java.util.ArrayList; import javax.naming.NamingException; import jsp.common.util.DBConnection; /** * JSP_MEMBER 테이블과 연관된 DAO로 * 회원 데이터를 처리하는 클래스이다. *

* Data Access Object - 테이블 당 한개의 DAO를 작성한다. */ public class MemberDAO { private static MemberDAO instance; // 싱글톤 패턴 private MemberDAO(){} public static MemberDAO getInstance(){ if (instance = = null ) instance = new MemberDAO(); return instance; } /** * String -> java.sql.Date로 변경하는 메서드 *

 * 문자열로된 생년월일을 Date로 변경하기 위해 필요하다. * java.util.Date클래스로는 오라클의 Date형식과 연동할 수 없다. * Oracle의 date형식과 연동되는 java의 Date는 java.sql.Date 클래스이다. 

* @param member 회원정보를 담고있는 TO * @return java.sql.Date */ public Date stringToDate(MemberBean member) { String year = member.getBirthyy(); String month = member.getBirthmm(); String day = member.getBirthdd(); Date birthday = null ; if (year ! = null & & month ! = null & & day ! = null ) birthday = Date. valueOf (year + "-" + month + "-" + day); return birthday; } // end stringToDate() /** * 회원정보를 JSP_MEMBER 테이블에 저장하는 메서드 * @param member 가입할 회원정보를 담고있는 TO * @throws SQLException */ public void insertMember(MemberBean member) throws SQLException { Connection conn = null ; PreparedStatement pstmt = null ; try { // 커넥션을 가져온다. conn = DBConnection.getConnection(); // 자동 커밋을 false로 한다. conn.setAutoCommit( false ); // 쿼리 생성한다. // 가입일의 경우 자동으로 세팅되게 하기 위해 sysdate를 사용 StringBuffer sql = new StringBuffer(); sql.append( "insert into JSP_MEMBER values" ); sql.append( "(?, ?, ?, ?, ?, ?, ?, ?, sysdate)" ); stringToDate(member); /* * StringBuffer에 담긴 값을 얻으려면 toString()메서드를 * 이용해야 한다. */ pstmt = conn.prepareStatement(sql. toString ()); pstmt.setString( 1 , member.getId()); pstmt.setString( 2 , member.getPassword()); pstmt.setString( 3 , member.getName()); pstmt.setString( 4 , member.getGender()); pstmt.setDate( 5 , stringToDate(member)); pstmt.setString( 6 , member.getMail1() + "@" + member.getMail2()); pstmt.setString( 7 , member.getPhone()); pstmt.setString( 8 , member.getAddress()); // 쿼리 실행 pstmt.executeUpdate(); // 완료시 커밋 conn.commit(); } catch (ClassNotFoundException | NamingException | SQLException sqle) { // 오류시 롤백 conn.rollback(); throw new RuntimeException(sqle.getMessage()); } finally { // Connection, PreparedStatement를 닫는다. try { if ( pstmt ! = null ){ pstmt.close(); pstmt = null ; } if ( conn ! = null ){ conn.close(); conn = null ; } } catch (Exception e){ throw new RuntimeException(e.getMessage()); } } } // end insertMember() /** * 아이디를 이용해 현재 회원정보를 가져온다. * @param id 회원 아이디 * @return MemberBean */ public MemberBean getUserInfo( String id) { Connection conn = null ; PreparedStatement pstmt = null ; ResultSet rs = null ; MemberBean member = null ; try { // 쿼리 StringBuffer query = new StringBuffer(); query.append( "SELECT * FROM JSP_MEMBER WHERE ID=?" ); conn = DBConnection.getConnection(); pstmt = conn.prepareStatement(query. toString ()); pstmt.setString( 1 , id); rs = pstmt.executeQuery(); if (rs.next()) // 회원정보를 DTO에 담는다. { // DB의 생년월일정보 -> 년, 월, 일로 문자열 자른다. String birthday = rs.getDate( "birth" ). toString (); String year = birthday. substring ( 0 , 4 ); String month = birthday. substring ( 5 , 7 ); String day = birthday. substring ( 8 , 10 ); // 이메일을 @ 기준으로 자른다. String mail = rs.getString( "mail" ); int idx = mail. indexOf ( "@" ); String mail1 = mail. substring ( 0 , idx); String mail2 = mail. substring (idx + 1 ); // 자바빈에 정보를 담는다. member = new MemberBean(); member.setId(rs.getString( "id" )); member.setPassword(rs.getString( "password" )); member.setName(rs.getString( "name" )); member.setGender(rs.getString( "gender" )); member.setBirthyy(year); member.setBirthmm(month); member.setBirthdd(day); member.setMail1(mail1); member.setMail2(mail2); member.setPhone(rs.getString( "phone" )); member.setAddress(rs.getString( "address" )); member.setReg(rs.getTimestamp( "reg" )); } return member; } catch (Exception sqle) { throw new RuntimeException(sqle.getMessage()); } finally { // Connection, PreparedStatement를 닫는다. try { if ( pstmt ! = null ){ pstmt.close(); pstmt = null ; } if ( conn ! = null ){ conn.close(); conn = null ; } } catch (Exception e){ throw new RuntimeException(e.getMessage()); } } } // end getUserInfo /** * 모든 회원정보를 가져온다. * @return ArrayList : 회원 List를 리턴한다. */ public ArrayList < MemberBean > getMemberList() { ArrayList < MemberBean > memberList = new ArrayList < MemberBean > (); Connection conn = null ; PreparedStatement pstmt = null ; ResultSet rs = null ; MemberBean member = null ; try { StringBuffer query = new StringBuffer(); query.append( "SELECT * FROM JSP_MEMBER" ); conn = DBConnection.getConnection(); pstmt = conn.prepareStatement(query. toString ()); rs = pstmt.executeQuery(); while (rs.next()) { member = new MemberBean(); member.setId(rs.getString( "id" )); member.setPassword(rs.getString( "password" )); member.setName(rs.getString( "name" )); member.setGender(rs.getString( "gender" )); member.setBirthyy(rs.getDate( "birth" ). toString ()); member.setMail1(rs.getString( "mail" )); member.setPhone(rs.getString( "phone" )); member.setAddress(rs.getString( "address" )); member.setReg(rs.getTimestamp( "reg" )); memberList. add (member); } return memberList; } catch (Exception sqle) { throw new RuntimeException(sqle.getMessage()); } finally { // Connection, PreparedStatement를 닫는다. try { if ( pstmt ! = null ){ pstmt.close(); pstmt = null ; } if ( conn ! = null ){ conn.close(); conn = null ; } } catch (Exception e){ throw new RuntimeException(e.getMessage()); } } } // end getMemberList /** * 회원정보를 수정한다. * @param member 수정할 회원정보를 담고있는 TO * @throws SQLException */ public void updateMember(MemberBean member) throws SQLException{ Connection conn = null ; PreparedStatement pstmt = null ; try { StringBuffer query = new StringBuffer(); query.append( "UPDATE JSP_MEMBER SET" ); query.append( " PASSWORD=?, MAIL=?, PHONE=?, ADDRESS=?" ); query.append( " WHERE ID=?" ); conn = DBConnection.getConnection(); pstmt = conn.prepareStatement(query. toString ()); // 자동 커밋을 false로 한다. conn.setAutoCommit( false ); pstmt.setString( 1 , member.getPassword()); pstmt.setString( 2 , member.getMail1() + "@" + member.getMail2()); pstmt.setString( 3 , member.getPhone()); pstmt.setString( 4 , member.getAddress()); pstmt.setString( 5 , member.getId()); int flag = pstmt.executeUpdate(); if (flag > 0 ){ conn.commit(); // 완료시 커밋 } } catch (Exception sqle) { conn.rollback(); // 오류시 롤백 throw new RuntimeException(sqle.getMessage()); } finally { try { if ( pstmt ! = null ){ pstmt.close(); pstmt = null ; } if ( conn ! = null ){ conn.close(); conn = null ; } } catch (Exception e){ throw new RuntimeException(e.getMessage()); } } } // end updateMember /** * 회원정보를 삭제한다. * @param id 회원정보 삭제 시 필요한 아이디 * @param pw 회원정보 삭제 시 필요한 비밀번호 * @return x : deleteMember() 수행 후 결과값 */ @SuppressWarnings( "resource" ) public int deleteMember( String id, String pw) { Connection conn = null ; PreparedStatement pstmt = null ; ResultSet rs = null ; String dbpw = "" ; // DB상의 비밀번호를 담아둘 변수 int x = - 1 ; try { // 비밀번호 조회 StringBuffer query1 = new StringBuffer(); query1.append( "SELECT PASSWORD FROM JSP_MEMBER WHERE ID=?" ); // 회원 삭제 StringBuffer query2 = new StringBuffer(); query2.append( "DELETE FROM JSP_MEMBER WHERE ID=?" ); conn = DBConnection.getConnection(); // 자동 커밋을 false로 한다. conn.setAutoCommit( false ); // 1. 아이디에 해당하는 비밀번호를 조회한다. pstmt = conn.prepareStatement(query1. toString ()); pstmt.setString( 1 , id); rs = pstmt.executeQuery(); if (rs.next()) { dbpw = rs.getString( "password" ); if (dbpw. equals (pw)) // 입력된 비밀번호와 DB비번 비교 { // 같을경우 회원삭제 진행 pstmt = conn.prepareStatement(query2. toString ()); pstmt.setString( 1 , id); pstmt.executeUpdate(); conn.commit(); x = 1 ; // 삭제 성공 } else { x = 0 ; // 비밀번호 비교결과 - 다름 } } return x; } catch (Exception sqle) { try { conn.rollback(); // 오류시 롤백 } catch (SQLException e) { e.printStackTrace(); } throw new RuntimeException(sqle.getMessage()); } finally { try { if ( pstmt ! = null ){ pstmt.close(); pstmt = null ; } if ( conn ! = null ){ conn.close(); conn = null ; } } catch (Exception e){ throw new RuntimeException(e.getMessage()); } } } // end deleteMember /** * 로그인시 아이디, 비밀번호 체크 메서드 * @param id 로그인할 아이디 * @param pw 비밀번호 * @return x : loginCheck() 수행 후 결과값 */ public int loginCheck( String id, String pw) { Connection conn = null ; PreparedStatement pstmt = null ; ResultSet rs = null ; String dbPW = "" ; // db에서 꺼낸 비밀번호를 담을 변수 int x = - 1 ; try { // 쿼리 - 먼저 입력된 아이디로 DB에서 비밀번호를 조회한다. StringBuffer query = new StringBuffer(); query.append( "SELECT PASSWORD FROM JSP_MEMBER WHERE ID=?" ); conn = DBConnection.getConnection(); pstmt = conn.prepareStatement(query. toString ()); pstmt.setString( 1 , id); rs = pstmt.executeQuery(); if (rs.next()) // 입려된 아이디에 해당하는 비번 있을경우 { dbPW = rs.getString( "password" ); // 비번을 변수에 넣는다. if (dbPW. equals (pw)) x = 1 ; // 넘겨받은 비번과 꺼내온 비번 비교. 같으면 인증성공 else x = 0 ; // DB의 비밀번호와 입력받은 비밀번호 다름, 인증실패 } else { x = - 1 ; // 해당 아이디가 없을 경우 } return x; } catch (Exception sqle) { throw new RuntimeException(sqle.getMessage()); } finally { try { if ( pstmt ! = null ){ pstmt.close(); pstmt = null ; } if ( conn ! = null ){ conn.close(); conn = null ; } } catch (Exception e){ throw new RuntimeException(e.getMessage()); } } } // end loginCheck() /** * 아이디 중복체크를 한다. * @param id 아이디 * @return x : 아이디 중복여부 확인값 */ public boolean duplicateIdCheck( String id) { Connection conn = null ; PreparedStatement pstm = null ; ResultSet rs = null ; boolean x = false ; try { // 쿼리 StringBuffer query = new StringBuffer(); query.append( "SELECT ID FROM JSP_MEMBER WHERE ID=?" ); conn = DBConnection.getConnection(); pstm = conn.prepareStatement(query. toString ()); pstm.setString( 1 , id); rs = pstm.executeQuery(); if (rs.next()) x = true ; //해당 아이디 존재 return x; } catch (Exception sqle) { throw new RuntimeException(sqle.getMessage()); } finally { try { if ( pstm ! = null ){ pstm.close(); pstm = null ; } if ( conn ! = null ){ conn.close(); conn = null ; } } catch (Exception e){ throw new RuntimeException(e.getMessage()); } } } // end duplicateIdCheck() } Colored by Color Scripter cs 접기

■ MemberCommand.properties

프로퍼티 파일에는 중복체크 관련 명령어를 추가한다.

소스코드 더보기

접기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # Form Change MainForm.do=jsp.member.action.MemberFormChangeAction LoginForm.do=jsp.member.action.MemberFormChangeAction JoinForm.do=jsp.member.action.MemberFormChangeAction UserInfoForm.do=jsp.member.action.MemberFormChangeAction ModifyFrom.do=jsp.member.action.MemberFormChangeAction DeleteForm.do=jsp.member.action.MemberFormChangeAction ResultForm.do=jsp.member.action.MemberFormChangeAction MemberListForm.do=jsp.member.action.MemberFormChangeAction # Action MemberLoginAction.do=jsp.member.action.MemberLoginAction MemberLogoutAction.do=jsp.member.action.MemberLogoutAction MemberJoinAction.do=jsp.member.action.MemberJoinAction MemberInfoAction.do=jsp.member.action.MemberInfoAction MemberModifyFormAction.do=jsp.member.action.MemberModifyFormAction MemberModifyAction.do=jsp.member.action.MemberModifyAction MemberDeleteAction.do=jsp.member.action.MemberDeleteAction MemberListAction.do=jsp.member.action.MemberListAction MemberIdCheckAction.do=jsp.member.action.MemberIdCheckAction cs 접기

3. 실행 결과

aaa라는 값을 입력 후 중복확인 버튼을 누른다. 그러면 아이디 중복체크 창이 뜨면서 aaa란 값이 입력되어 있는 것을 볼 수 있다.

중복확인을 누르면 중복 여부를 알 수 있다. 아이디가 중복되어 있을 경우 위와 같은 경고 창을 띄운다.

아이디가 사용 가능할 경우 위와 같은 메시지가 화면에 표시된다.

아이디 중복체크 창에서 사용하기 버튼을 누르면 자동적으로 사용 가능한 아이디가 회원가입 화면에 입력 된다.

여기서 가입 버튼을 클릭하면 비밀번호를 입력하라는 경고 창이 뜬다. 다른 부분도 마찬가지로 입력하지 않았다면 경고 창이 뜬다.

4. 소스코드 다운로드 (war 파일)

JSP_DEV.war

키워드에 대한 정보 중복 확인

다음은 Bing에서 중복 확인 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 엑셀 조건부 서식으로 중복된 데이터 쉽게 찾는 방법 - Excel Conditional Formatting | 엑셀러 권현욱

  • 엑셀
  • VBA
  • Excel
  • 매크로
  • VBA코딩
  • 엑셀코딩
  • 권현욱
  • Macro
  • iexceller
  • 엑셀러
  • 엑셀 강의
  • 엑셀 기초
  • VBA 기초
  • VBA 입문
  • 조건부 서식
  • 조건부서식
  • 조건부 서식 활용
  • 중복 데이터 찾기
  • 중복 찾기
  • 중복 표시

엑셀 #조건부 #서식으로 #중복된 #데이터 #쉽게 #찾는 #방법 #- #Excel #Conditional #Formatting #| #엑셀러 #권현욱


YouTube에서 중복 확인 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 엑셀 조건부 서식으로 중복된 데이터 쉽게 찾는 방법 - Excel Conditional Formatting | 엑셀러 권현욱 | 중복 확인, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment