Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP、MySQL、jQuery、AJAX:json数据返回正确响应,但前端返回错误_Php_Mysql_Json_Jquery - Fatal编程技术网

PHP、MySQL、jQuery、AJAX:json数据返回正确响应,但前端返回错误

PHP、MySQL、jQuery、AJAX:json数据返回正确响应,但前端返回错误,php,mysql,json,jquery,Php,Mysql,Json,Jquery,我有一张用户登记表。我正在通过AJAX动态地进行服务器端验证。我的问题的快速总结是,在验证两个字段时,第二个字段验证出现错误。如果我对第一个字段进行注释,则第二个字段不会显示任何错误。它有这种奇怪的行为。详情如下: HTML、JS和Php代码如下: HTML表单: <form id="SignupForm" action=""> <fieldset> <legend>Free Signup</legend>

我有一张用户登记表。我正在通过AJAX动态地进行服务器端验证。我的问题的快速总结是,在验证两个字段时,第二个字段验证出现错误。如果我对第一个字段进行注释,则第二个字段不会显示任何错误。它有这种奇怪的行为。详情如下:

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>
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>

<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 //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)); 
}

?>

免费注册
用户名

电子邮件
确认电子邮件

JS:

<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>
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>

<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 //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)); 
}

?>

$(文档).ready(函数(){
$(“#email”).blur(函数(){
var email=$(“#email”).val();
var msgbox2=$(“状态电子邮件”);
如果(email.length>3){
$.ajax({
键入:“POST”,
url:“check_ajax2.php”,
数据:“email=”+email,
数据类型:“json”,
cache:false,
成功:功能(数据){
如果(data.success=='y'){
警报(“可用”);
}否则{
警报(“不可用”);
}
}
});
}
返回false;
});
$(“#确认电子邮件”).blur(函数(){
var confirm_email=$(“#confirm_email”).val();
var email=$(“#email”).val();
var msgbox3=$(“状态确认电子邮件”);
如果(确认电子邮件长度>3){
$.ajax({
键入:“POST”,
url:“check_ajax2.php”,
数据:“确认电子邮件=”+确认电子邮件+”&电子邮件=“+电子邮件,
数据类型:“json”,
cache:false,
成功:功能(数据){
如果(data.success=='y'){
警报(“可用”);
}否则{
警报(“不可用”);
}
},
错误:函数(数据){
警报(“某些错误”);
}
});
}
返回false;
});
});
PHP代码:

<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>
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>

<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 //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)); 
}

?>

如果HTTP状态代码指示错误以及响应解析失败,则调用错误处理程序

我认为您的错误处理程序在收到响应2时被调用,因为
{“success”:“y”,“msg_email”:“email available”}{“success”:“n”,“msg_confirm_email”:“email和confirm email不匹配”。}
不是有效的JSON。您可以在以下位置使用验证程序:

在PHP中,您可以在顶部定义
$response\u对象
数组,并在底部打印
json\u encode($response\u对象)

<?php //check_ajax2.php

$response_object = array('success' => 'y');

if(isset($_POST['email']))
{
    $email = $_POST['email'];


    $res = mysql_query("SELECT uid FROM members WHERE email = '" . mysql_real_escape_string($email)  . "' ");
    $i_exists = mysql_num_rows($res);

    if( 0 == $i_exists )
    {
        $msg_email = 'Email available';
    }
    else
    {
        $response_object['success'] = 'n';
        $msg_email = 'Email is already in use.';
    }

    $response_object['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 = '" . mysql_real_escape_string($confirm_email) . "' ");
    $i_exists = mysql_num_rows($res);


    if( 0 == $i_exists ) 
    {
        if( isset($email) && isset($confirm_email) &&  $email == $confirm_email )
        {
            $msg_confirm_email = 'Email available and match';
        }
        else
        {
            $response_object['success'] = 'n';
            $msg_confirm_email = 'Email and Confirm Email do NOT match.';
        }      
    }
    else
    {
        $response_object['success'] = 'n';
        $msg_confirm_email = 'Email already exists.';
    }

    $response_object['msg_confirm_email'] = $msg_confirm_email; 
}

print json_encode($response_object);

+1。非常感谢你的解决方案,丹尼尔。它就像一个符咒。我还尝试了您为验证json响应而提供的链接,但当我点击validate按钮时,它会在解析失败时提供结果。我给它一个输入{“成功”:“y”,“msg_email”:“email available”}{“成功”:“n”,“msg_confirm_email”:“email和confirm email不匹配”。}。我做的对吗?对不起,我对你给我的链接完全是个新手,因此我提出了这个问题。我很高兴它成功了!是的,你做得对。它表示“解析失败”,因为字符串
{“success”:“y”,“msg_email”:“email available”}{“success”:“n”,“msg_confirm_email”:“email和confirm email不匹配”。}
不是有效的JSON。基本上,如果jsonlint网站说“解析失败”,那么您知道jQuery将调用您的错误处理程序。非常感谢您花时间解释它。谢谢。另外,我想知道您是否知道我可以使用哪些方法来缩短各个字段的php错误检查代码?我的意思是,目前对于我需要验证的每个字段,我必须在JS和PHP处理中添加相应的代码。那么,有没有什么方法可以让JS(首选)和PHP中的代码保持简单,从而不用分别为它们编写代码就可以验证这些代码?如果有,请告诉我。键入单个代码和错误检查已经太麻烦了!对PHP框架可以帮助您减少必须编写的验证代码量。我建议您花点时间学习一些PHP框架:当您的网站是高度数据库驱动的(CRUD:Create、Read、Update和Delete)时使用CakePHP,以及使用CodeIgniter获得全面的好框架。学习和设置它们需要一些时间,但是框架的好处是值得投入时间的,即使您只使用了其中的一些特性。例如,您好,丹尼尔,非常感谢您的链接。PHP验证在某种程度上是可管理的,而我试图真正理清的是JS验证。是否有任何可能引用JS验证代码的链接可用?