사용자 등록 양식이 있습니다. 나는 AJAX를 통해 즉시 서버 측 유효성 검사를하고있다. 내 문제에 대한 요약은 두 필드의 유효성을 검사 할 때 두 번째 필드 유효성 검사에 오류가 발생합니다. 첫 번째 필드에 주석을 달면 두 번째 필드에 오류가 표시되지 않습니다. 이 이상한 행동이 있습니다. 아래 자세한 내용은 :PHP, MySQL, jQuery, AJAX : json 데이터가 올바른 응답을 반환하지만 프론트 엔드가 오류를 반환합니다.
HTML, JS와 PHP 코드는 다음과 같습니다 :
HTML 양식 :
<form id="SignupForm" action="">
<fieldset>
<legend>Free Signup</legend>
<label for="username">Username</label>
<input name="username" type="text" id="username" /><span id="status_username"></span><br />
<label for="email">Email</label>
<input name="email" type="text" id="email" /><span id="status_email"></span><br />
<label for="confirm_email">Confirm Email</label>
<input name="confirm_email" type="text" id="confirm_email" /><span id="status_confirm_email"></span><br />
</fieldset>
<p>
<input id="sbt" type="button" value="Submit form" />
</p>
</form>
JS :
<script type="text/javascript">
$(document).ready(function()
{
$("#email").blur(function()
{
var email = $("#email").val();
var msgbox2 = $("#status_email");
if(email.length > 3)
{
$.ajax({
type: 'POST',
url: 'check_ajax2.php',
data: "email="+ email,
dataType: 'json',
cache: false,
success: function(data)
{
if(data.success == 'y')
{
alert('Available');
}
else
{
alert('Not Available');
}
}
});
}
return false;
});
$("#confirm_email").blur(function()
{
var confirm_email = $("#confirm_email").val();
var email = $("#email").val();
var msgbox3 = $("#status_confirm_email");
if(confirm_email.length > 3)
{
$.ajax({
type: 'POST',
url: 'check_ajax2.php',
data: 'confirm_email='+ confirm_email + '&email=' + email,
dataType: 'json',
cache: false,
success: function(data)
{
if(data.success == 'y')
{
alert('Available');
}
else
{
alert('Not Available');
}
}
, error: function (data)
{
alert('Some error');
}
});
}
return false;
});
});
</script>
PHP 코드 :
<?php //check_ajax2.php
if(isset($_POST['email']))
{
$email = $_POST['email'];
$res = mysql_query("SELECT uid FROM members WHERE email = '$email' ");
$i_exists = mysql_num_rows($res);
if(0 == $i_exists)
{
$success = 'y';
$msg_email = 'Email available';
}
else
{
$success = 'n';
$msg_email = 'Email is already in use.</font>';
}
print json_encode(array('success' => $success, 'msg_email' => $msg_email));
}
if(isset($_POST['confirm_email']))
{
$confirm_email = $_POST['confirm_email'];
$email = (isset($_POST['email']) && trim($_POST['email']) != '' ? $_POST['email'] : '');
$res = mysql_query("SELECT uid FROM members WHERE email = '$confirm_email' ");
$i_exists = mysql_num_rows($res);
if(0 == $i_exists)
{
if(isset($email) && isset($confirm_email) && $email == $confirm_email)
{
$success = 'y';
$msg_confirm_email = 'Email available and match';
}
else
{
$success = 'n';
$msg_confirm_email = 'Email and Confirm Email do NOT match.';
}
}
else
{
$success = 'n';
$msg_confirm_email = 'Email already exists.';
}
print json_encode(array('success' => $success, 'msg_confirm_email' => $msg_confirm_email));
}
?>
인한 문제 :이
만큼 내가 check_ajax2.php 파일의 $_POST['email']
뿐만 아니라 $_POST['confirm_email']
의 유효성을 검사하고 같이 이메일 확인 필드에 대한 유효성 검사가 항상 오류를 반환합니다.
응답 : 1 : { "성공": "Y", "msg_email 나는 분야에서 이메일과 이메일 확인을 입력 할 때 방화범의 내 제한된 지식, 그러나, 나는 다음은 응답을했다 알아낼 않았다 ":"이메일 사용 가능 "}
응답 2 : {"성공 ":"Y ","msg_email ":"이메일 사용 가능 "} {"성공 ":"N ","msg_confirm_email ":"이메일 확인 이메일이 일치하지 않습니다. "}
응답 2는 msg_confirm_email을 통해 올바른 메시지를 수신하고 있음을 나타냅니다. nt end, 'Some error'라는 경고가 나타납니다 (디버깅을 위해 경고를 활성화했습니다). 가능한 한 코드의 모든 부분을 변경하려고 48 시간을 보냈지 만 성공은 거의 없습니다. 이상한 점은 $_POST['email']
필드의 유효성 검증을 완전히 주석 처리하면 $_POST['confirm_email']
필드의 유효성 검증이 오류없이 올바르게 표시된다는 것입니다. 다시 활성화하면 전자 메일 필드의 유효성을 올바르게 검사하지만 confirm_email 필드의 유효성 검사 시점에 도달하면 다시 오류를 표시합니다.
또한 check_ajax2.php 페이지에서 성공 변수 이름을 $_POST['email']
및 $_POST['confirm_email']
에 대한 다른 이름으로 바꾸려고 시도했지만 성공하지 못했습니다. 폼에 더 많은 필드를 추가하고 check_ajax2.php 페이지에서 유효성을 검사 할 것입니다. 따라서 각 필드의 유효성을 검사하기 위해 서로 다른 아약스 페이지를 사용할 계획이 아닙니다. 그런 식으로 그렇게하는 것이 현명하지 않다고 생각합니다. 나는 jquery 또는 AJAX 전문가가 아니기 때문에이 문제를 해결하는 데 도움을 주실 수 있습니다.
미리 감사드립니다.
+1. 해결책을 가져 주셔서 고맙습니다, 대니얼. 그것은 매력처럼 작동했습니다. 또한 json 응답의 유효성을 검사하기 위해 나에게 준 링크를 시도했지만 유효성 검사 단추를 누르면 파싱에 실패하여 결과가 나에게 표시됩니다. { "success": "y", "msg_email": "Email available"} { "success": "n", "msg_confirm_email": "이메일과 이메일 확인이 일치하지 않습니다."}. 나는 옳은 일을합니까? 미안 해요, 당신이 저에게 준 링크에 대한 총 초보자입니다. 따라서 질문을 던집니다. – Devner
나는 그것이 기뻤다. 네, 옳은 일을하고 있습니다. { "success": "y", "msg_email": "Email available"} { "success": "n", "msg_confirm_email": "전자 메일 및 전자 메일 확인은 일치하지 않으므로 구문 분석에 실패했습니다" "}'은 (는) 유효한 JSON이 아닙니다. 기본적으로 jsonlint 웹 사이트에서 "Parsing failed"라고 표시되면 jQuery가 오류 처리기를 호출한다는 것을 알 수 있습니다. –
설명해 주셔서 감사합니다. 고맙습니다. 또한 개별 필드에 대한 PHP 오류 검사 코드를 단축하는 데 사용할 수있는 방법을 알고 있는지 궁금합니다. 이것이 의미하는 바는 현재 유효성을 검사해야하는 각 필드에 대해 JS 및 PHP 처리에 해당 코드를 추가해야한다는 것입니다. 그렇다면 각각의 코드를 별도로 작성하지 않고 JS (선호) 및 PHP에서 코드를 간단하게 유지할 수있는 방법이 있습니까? 어떤 것이 있는지 알려주세요. 이미 개별 코드 및 오류 검사를 입력하는 데 너무 많은 문제가 있습니다! – Devner