2013-06-09 5 views
1

현재 동적 등록 페이지를 만들려고합니다. 동적으로, 나는 입력 된 사용자 이름과 전자 메일이 DB와 ​​비교하여 존재하는지 확인합니다. 다른 페이지로 리디렉션하지 않고이 작업을 수행하려고합니다. jquery로 아약스를 사용하는 것이 가장 좋습니다.백그라운드에서 DB 쿼리 기능을 실행하십시오.

제 시스템은 그 자체로 작동합니다.

  • 쿼리는
  • 비슷한 쿼리는 사용자 이름이있는 경우 이메일이 존재하는 경우, 문자열 ERROR_USER_EXISTS
  • 을 반환
  • 동일한 이메일 주소의 존재를 확인하기 위해 수행되는 동일한 이름의 존재를 확인하기 위해 수행된다 문자열 ERROR_EMAIL_EXISTS이 반환됩니다.
  • 문자열이없는 경우 USER_ADD_SUCCESS 문자열이 반환되고 등록이 완료됩니다.
  • Regardle 반환 된 상태의 SS, 그것은 배열로 반환되며, 등록이 성공하면, 내가 'ClickUpvote'에 의해 this example answer 찾고 있어요 상태 메시지

나란히 배열 이내에 반환 추가 데이터가있을 것입니다 확장하려고하지만 약간의 문제가 있습니다. 등록 페이지에는 양식이 있으며 단순화를 위해 '제출'버튼을 해당 답변에 제공된 링크로 대체했습니다. 이것은 스크립트에 대한 간단한 확장입니다.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script> 
<script type="text/javascript"> 
    function makeAjaxRequest() 
    { 
     var url="./DoRegister.php"; 
     $.get(url,{},verifyDb); 
    } 

    function verifyDb(response) 
    { 
     if (response=="ERROR_EMAIL_EXISTS") 
     { 
      document.write('Email in use'); 
     } 
     else if (response=="ERROR_USER_EXISTS") 
     { 
      document.write('Username in use'); 
     } 

     else if (response=="USER_ADD_SUCCESS") 
     { 
      document.write('Registration success'); 
     } 
    } 
</script> 
<?PHP 
    echo '<form class="" method="post" action="./DoRegister.php">'; 
    echo '<div>'.EditBox('username','Username', False, True, True).'</div>'; 
    echo '<div>'.EditBox('password','Password', True, False, True) .'</div>'; 
    echo '<div>'.EditBox('email','Email Address', False, False, True, 'email') .'</div>'; 
    echo '<a href="#" onclick="makeAjaxRequest();">Check database</a>'; 
    echo '</form>'; 
    echo '</div></div>'; 
?> 

참고 : 단순히 공급 매개 변수에 따라 미리 포맷 html로 입력 상자를 반환EditBox(). 간단하게 코드를 유지 관리하기가 쉽습니다.

파일 DoRegister은이 스크립트가 실행되는 디렉토리와 동일한 디렉토리에 있습니다.

<?PHP 
    define("base_path", dirname(__FILE__).'/'); 
    include base_path.'/core/CMS_Functions.php';    
    $_pagearray = _registerUser($_POST['username'],$_POST['password'],$_POST['email']); 

    if($_pagearray['msg'] == 'ERROR_EMAIL_EXISTS'){ 
     $msg = 'That email address is already in use. Please enter another.'; 
    } 

    if($_pagearray['msg'] == 'ERROR_USER_EXISTS'){ 
     $msg = 'That username is already in use. Please enter another.'; 
    } 

    if($_pagearray['msg'] == 'USER_ADD_SUCCESS'){ 
     $msg = 'Thankyou for registering <strong>'.$_pagearray['username'].'</strong>!<br>'.'Please click the activation link sent to your email address in order to activate your account.'; 
    } 
    return $msg; 
?> 

참고 :_registerUser() 단순히 계정을 등록하는 데 필요한 3 개 개의 매개 변수를 받아들이고, 상기 상태 문자열 중 하나를 반환합니다. 허용되는 매개 변수는 POST 일 필요는 없습니다.

내 문제는 필드에 세부 정보를 입력 한 후 링크를 ​​클릭하면 '아무 일도 일어나지 않습니다.'입니다. POST를 통해 실제로 제출되지 않은 양식에 이르기까지라고 생각하기 때문에 DoRegister에는 실제로 값이 표시되지 않습니다. 이것은 내가 자바 스크립트, 아약스 또는 jquery에 처음 들어갔을 때 내가 스스로 해결할 수있는 느낌이 아니기 때문이다. (나는 지난 몇 년간 배웠던 모든 언어가 뭔가 이것처럼 간단합니다).

어떻게 '동적'조회를 수행 할 수 있도록 스크립트를 확장/수정 할 수 있습니까?

답변

2

당신은 당신이 자바 스크립트에 보낼 POST 데이터,

자바 스크립트 expertiese의 제 분야가 아니라 내가이 작업을 수행 할 수 있는지 볼 수 있습니다를 얻을 필요가 ...

$("#yourForm").submit(function() { 
    $.ajax({ 
     type: "POST", 
     url: "DoRegister.php", 
     data: "name=" + $("#name").val() + "&mail=" + $("#mail").val() + "&pw=" + $("#pw").val(), 
     success: verifyDb 
    }); 
}); 

는 다음과 같이 양식을 사용

<form action="" id="yourForm" mehod="post"> 
    <input type="text" id="name" name="name" /> 
    <br /> 
    <input type="text" id="mail" name="mail" /> 
    <br /> 
    <input type="password" id="password" name="password" /> 
    <br /> 
    <input type="submit" value="Submit" /> 
</form> 

작동합니다, 나는 충분히이 아직 ..

+0

닫기를 테스트하지 않았다 althoug. 내 구체적인 디자인을 위해 솔루션에서 작동 할 수 있었다 :) –

관련 문제