2010-05-15 6 views
1

내가 자바 스크립트를 사용하여 유효성을 검사 할 수있는 방법을 알고 싶습니다. 계정을 만들 때 사용자 이름을 입력하면 이미 데이터베이스에 있으며 사용자에게 다른 사용자 이름을 입력하도록 요청할 수 있습니까?Javascript를 사용하여 사용자 이름을 확인하는 방법은 무엇입니까?

+2

짧은 대답; 자바 스크립트만으로 : –

+0

그렇다면 누군가가 tamperdata를 사용하여 클라이언트 측 자바 스크립트 검사 후 자신의 사용자 이름을 게시하는 것을 막을 수 있습니까? – rook

+0

@ The Rook : 괜찮은 점이지만, 클라이언트 쪽 수표가 무엇이든 최후의 방어선이되어서는 안된다는 것은 말할 나위도 없습니다. 그렇다고해서 클라이언트 측 유효성 검사가 있어서는 안된다는 의미는 아닙니다. 사용자에게 도움이되며 데이터 무결성을위한 것이 아닙니다. –

답변

11
  1. 이벤트의 수신 수신기를 <input /> 요소에 연결합니다. AJAX는 아이디를 부여할지 여부를 서버 측 수표에
  2. (매개 변수 필드 값) 서버에 요청을 전송하여
  3. 서버의 응답 표시 (여부)에 기초
  4. 이 이름은 이미 사용 아닌지 이미 사용 메시지

jQuery를 (I 순수한 JS 너무 게으른) + PHP 샘플 코드 :

<form ...> 
    ... 
    <input type="text" name="username" id="input-username" /> 
    <p class="error"></p> 
    ... 

$("#input-username").blur(function() { 
    $.post("/check-username.php", { username: $(this).val() }, function(data) { 
     if ("0" == data) { /* username in use */ 
      $(this).next("p").text("This username is already in use.</p>"); 
     } else {   /* username is fine */ 
      $(this).next("p").empty(); 
     } 
    }); 
}); 

<?php 

$username = $_POST['username']; 

// check whether given username exists in database 
$usernameExists = ...; 

echo $usernameExists ? '0' : '1'; // 0 if exists, 1 if not. 
4

대답은 AJAX입니다. 데이터베이스에 대해 유효성을 검사해야하는 경우 서버를 호출해야합니다. 페이지를 다시로드하지 않고 (EDIT : 제대로) 수행 할 수있는 유일한 방법은 AJAX입니다. 구현 방법은 사용하고있는 자바 스크립트 라이브러리와 사용중인 서버가 무엇인지에 따라 다릅니다. 나는 당신이 그것을 조금 검색하고 읽을 것을 제안한다 - 이것은 꽤 일반적인 사용 사례이다.

+0

* 페이지를 다시로드하지 않고도 페이지를 다시로드 할 수있는 유일한 방법은 AJAX입니다. * 기술적으로 AJAX는 기술적으로 유일한 솔루션은 아니지만 고려해야 할 가치가 있습니다. – Crozin

+0

@ 크로 신 : 사실입니다. 페이지 또는 무언가가 AJAX-esque 인 모든 사용자 이름을 무의미한 iframe처럼로드하는 것과 같은 작업을 수행 할 수 있습니다. 무한한 방법으로 잘못 할 수 있습니다. –

-2

아약스하지 않을 수도 있습니다 사용자 이름은 일반적으로 공개되므로 유일한 해결책입니다. 간단한 방법은 단지 새로운 사용자가 추가 될 때마다 업데이트되는 RDF/XML 문서를 사이트에있는 모든 사용자의 목록이있는 Javascript DOM으로 쉽게 탐색하여 해당 사용자가 이미 사용 중입니다. 당신은 또한 그들이 당신이 얼마나 유리한가 또는 불리한 점인지에 따라 당신이 아닌 계산 능력을 지불하게합니다.

+2

가능하지만이 솔루션은 상당히 나쁩니다. 검색 비용은 O (n), 대역폭 비용은 엄청나고, 비용이 많이 드는 문서 업데이트 (리소스 경합) 등이 있습니다. 대조적으로 최상의 솔루션은 대역폭을 훨씬 적게 사용하며 모든 곳에서 더 빠르고 효율적입니다. –

+0

문서 업데이트는 null 인수입니다. XML 파일은 요청 될 때마다 동적으로 생성 될 것입니다. 다른 이유로도이 파일을 사용할 수 있습니다. RDF/XML을 제안한 이유입니다.이 페이지에 입력 한 것과 같습니다. 입니다.대역폭도 예상보다 낮습니다. 이 커뮤니티의 모든 사용자 이름을 저장하는 전용 RDF 파일은이 페이지를 표시하기 위해로드하는 데 필요한 크기의 약 1/4 크기입니다. – Zorf

+1

성능이 떨어지는 것 외에도 실제로 AJAX를 사용할지 여부와 직각입니다. 직접 검색 (/ isUsernameTaken? username = foo) 또는 XML 문서 (/allUserNames.xml)에 액세스하기 위해 AJAX 또는 다른 솔루션 (예 : 숨겨진 iframe)을 사용할 수 있습니다. –

1

개인적으로 나는 물건을 단순하게 만들기 위해 JQuery 유효성 검사 플러그인을 사용합니다. http://bassistance.de/jquery-plugins/jquery-plugin-validation/

그러나 일반적으로는 사용자 이름으로 서버에 작은 AJAX 요청 (예. JSON 객체)로 구성하고,이 데이터베이스에 '검색'반환 할 것 중 하나 참/사용자 안타 입력 허위 후 또는 탭 (이벤트 리스너 첨부). 그런 다음 콜백 응답 내에서 선택한 DOM 요소를 변경하여 사용자에게 계정 이름이 이미 데이터베이스에 있는지 여부를 나타냅니다.

관련 문제