首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >提交注册表时使用jQuery显示错误

提交注册表时使用jQuery显示错误
EN

Stack Overflow用户
提问于 2015-10-10 21:26:31
回答 5查看 1.6K关注 0票数 18

我的最后一个问题不清楚,所以我在这里把它和所有的澄清贴在一起。在下面的代码中,我想使用jQuery显示注册表单错误的错误消息。这里的问题是,这段代码只是将数据插入到数据库中,而不检查任何错误或显示错误消息,并重定向到登录页面。那么,我错在哪里呢?

现在我已经更新了我的代码,数据是不提交的,除非所有的条件都满足我想要的,但错误显示在点击提交按钮,register.php页面被重新加载,现在它只显示错误消息和没有注册表,因为没有使用jQuery。我不希望页面被重新加载,它应该显示错误消息。

代码语言:javascript
复制
<?php
if(isset($_POST['reg'])){
 $fn = ucfirst($_POST['fname']);
 $ln = ucfirst($_POST['lname']);
 $un = $_POST['username'];
 $em = $_POST['email'];
 $pswd = $_POST['password'];
 $pswd2 = $_POST['password2'];

 $sql=$db->prepare("SELECT username FROM users WHERE username=:username");
 $sql->execute(array(':username'=>$un));
 $row = $sql->fetch(PDO::FETCH_ASSOC);
 $db_username = $row['username'];
 $usernames = $db_username;

 $data = array();
 if( isset($fn) && isset($ln) ) {
  if( $fn != "" && $ln!="" && $fn == $ln ) {
    $data["flname"] = "cntbempty";
   }
  }
 if( isset($un) ) {
  if $un == $usernames )  {
    $data["username"] = "inuse";
   }
  }
 if( isset($pswd) && isset($pswd2) ) {
  if( $pswd2 != "" && $pswd != $pswd2 ) {
    $data["password"] = "missmatch";
   }
  }
  if( isset( $em ) ) {
   if( $em != "" && !preg_match( "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST["email"] ) ) {
     $data["email"] = "notvalid";
   }
  }
 if(!empty($data))
 {
 echo json_encode($data);
 die;
 }
  else{

  $pswd = password_hash($pswd, PASSWORD_DEFAULT);
  $pswd2 = password_hash($pswd2, PASSWORD_DEFAULT);
  $stmt = $db->prepare("INSERT INTO users (username,first_name,last_name,email,password,password2,) VALUES (:username,:first_name,:last_name,:email,:password,:password2,)");  
  $stmt->execute( array(':username'=>$un,':first_name'=>$fn,':last_name'=>$ln,':email'=>$em,':password'=>$pswd,':password2'=>$pswd2));
  }
  if ($stmt->rowCount() == 1) {
    header("Location: login.php");
  } 
  else {
    echo "error";
  }
}
?>

jquery代码

代码语言:javascript
复制
$(document).ready(function(){
  $("form.register").change(function() {
    $.post("register.php", $("form.register").serialize(), function( data ) {
      if( data.flname == "cntbempty" )
        $("p#name_error").slideDown();
      else
        $("p#name_error").hide();
      if( data.username == "inuse" )
        $("p#username_error").slideDown();
      else
        $("p#username_error").hide();
      if( data.password == "missmatch" )
        $("p#password_error").slideDown();
      else
        $("p#password_error").hide();
      if( data.email == "notvalid" )
        $("p#email_error").slideDown();
      else
        $("p#email_error").hide();
    }, "json");
  });
});
EN

回答 5

Stack Overflow用户

发布于 2015-10-13 16:45:16

正如@Novocaine提到的,这里的问题是在用错误填充$data之后让脚本继续运行。

对我来说,简单的做法是将$data初始化为一个空数组,然后只在确实有错误时才填充它。

代码语言:javascript
复制
//changing the init of the $data array
$data = array();
if( isset($fn) && isset($ln) ) {
 if( $fn != "" && $ln!="" && $fn == $ln ) {
   $data["flname"] = "cntbempty";
  }
}
/* List of all your validation tests */

//Now your test if you have any errors in your $data
if(!empty($data))
{
    echo json_encode($data);
    die;
}

//And only after if the condition is not met, you can insert and redirect
/* Rest of your code here */

您还需要向jQuery代码添加一个条件,以检查是否定义了data.flname和其他字段。

代码语言:javascript
复制
//example
if( data.flname && data.flname == "cntbempty" )
    $("p#name_error").slideDown();

我希望这能帮到你。

票数 5
EN

Stack Overflow用户

发布于 2015-10-13 18:29:32

echo json_encode($data);之前添加header('Content-Type: application/json');

代码语言:javascript
复制
$(document).ready(function(){
  $("form.register").submit(function(e) {
    e.preventDefault();
    $.post("register.php", $("form.register").serialize(), function( data ) {
      if(data.length == 0){
        window.location.href= "login.php";
      }

      if( data.flname == "cntbempty" )
        $("p#name_error").slideDown();
      else
        $("p#name_error").hide();
      if( data.username == "inuse" )
        $("p#username_error").slideDown();
      else
        $("p#username_error").hide();
      if( data.password == "missmatch" )
        $("p#password_error").slideDown();
      else
        $("p#password_error").hide();
      if( data.email == "notvalid" )
        $("p#email_error").slideDown();
      else
        $("p#email_error").hide();
    }, "json");
  });
});

将数组替换为echo(json_encode( header("Location: login.php"); ()

票数 5
EN

Stack Overflow用户

发布于 2015-10-14 16:36:29

只需重写您的代码,如下所示,并尝试一下。

代码语言:javascript
复制
<?php
 if(isset($_POST['reg'])){
   $fn = ucfirst($_POST['fname']);
   $ln = ucfirst($_POST['lname']);
   $un = $_POST['username'];
   $em = $_POST['email'];
   $pswd = $_POST['password'];
   $pswd2 = $_POST['password2'];

   $sql=$db->prepare("SELECT username FROM users WHERE username=:username");
   $sql->execute(array(':username'=>$un));
   $row = $sql->fetch(PDO::FETCH_ASSOC);
   $db_username = $row['username'];
   $usernames = $db_username;

   //$data = array();
     $data = 0;
   if( isset($fn) && isset($ln) ) {
    if( $fn != "" && $ln!="" && $fn == $ln ) {
      // $data["flname"] = "cntbempty";
         $data = 2;
    }
  }
  if( isset($un) ) {
    if $un == $usernames )  {
     // $data["username"] = "inuse";
        $data = 3;
}
}
if( isset($pswd) && isset($pswd2) ) {
  if( $pswd2 != "" && $pswd != $pswd2 ) {
    // $data["password"] = "missmatch";
       $data = 4;
  }
}
if( isset( $em ) ) {
 if( $em != "" && !preg_match( "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST["email"] ) ) {
   // $data["email"] = "notvalid";
      $data = 5;
 }
}
/* if(!empty($data))
{
  header('Content-Type: application/json');
  echo json_encode($data);
  die;
}
else{ */ 

  $pswd = password_hash($pswd, PASSWORD_DEFAULT);
  $pswd2 = password_hash($pswd2, PASSWORD_DEFAULT);
  $stmt = $db->prepare("INSERT INTO users (username,first_name,last_name,email,password,password2,) VALUES (:username,:first_name,:last_name,:email,:password,:password2,)");  
  $stmt->execute( array(':username'=>$un,':first_name'=>$fn,':last_name'=>$ln,':email'=>$em,':password'=>$pswd,':password2'=>$pswd2));
// }
//! Send Success Status to browser for it to understand
if ($stmt->rowCount() == 1) {
  // $data['success'] = true;
     $data = 1;
} 
else {
  // $data['success'] = false;
  $data = -1;
}
// header('Content-Type: application/json');
// echo json_encode($data);

echo $data;

}
?>

和您的jquery脚本

代码语言:javascript
复制
$(document).ready(function(){
  $("form.register").change(function() {

   var data = new FormData(this);

    $.ajax({
        type:"post",
        url: register.php,
        data:data,
        mimeType:"multipart/form-data",
        contentType: false,
        cashe: false,
        processData: false,
        error:function(data){
            alert ("An Error has Occured...");
            return false;
        },
        beforeSend: function() {
            $('#Loading').html('<img src="images/page-loader.gif" />&nbsp;&nbsp;Processing</div>');

        },
        success: function(html){
            switch($html){
                case 1:
                      alert("success");
                       window.location.href="" /* your redirect page*/;
                      break;
                      case 2:
                        $("#error").html('Field cannot be Empty !!!');
                      break;
                      case 3:
                        /* so on...*/
                      break;
                      case 4:
                      break;
                      case 5:
                      break;

            }
        }
    });
  });
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33054513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档