Ajax 注册失败不会回显结果


Ajax failed registration do not echo result

我有一个ajax post方法,如果成功,将提醒"帐户已成功创建"。 我的问题是,当它没有创建时,它应该提醒帐户已经存在,但是它仍然提醒什么问题。

脚本代码:

$(document).ready(function(){
    $("#btn-register").click(function(){
        var regaccount = $("#regaccount").val();
        var regpass = $("#regpass").val();
        if((regaccount == "") || (regpass == "")){
           alert("Information required!");
        }else {
          $.ajax({
            type: "POST",
            url: "register.php",
            data: "regaccount="+regaccount+"&regpass="+regpass,
            success: function(data){    
                 alert("account successfully created!");
            },
            error:function(){
                 alert("account already exists");
            }
          });
        }
        $("#regaccount").val('');
        $("#regpass").val('');
        return false;  
    });
});

注册.php

<?php 
    include 'function.php';
    session_start();
    ob_start(); 
    $userid = rand(100000, 999999);
        $regaccount = $_POST['regaccount'];
        $regpass = $_POST['regpass'];
        $regaccount = stripslashes($regaccount);
        $regpass = stripcslashes($regpass);
        $salt = "dctech2015ABcRXd";
        $regpass = md5($regpass) . $salt;
        $regpass = sha1($regpass);
        $con = new Functions();
        $con = $con->db;
        $stmt = $con->query("SELECT * FROM users WHERE username = '$regaccount'");
        $count = $stmt->rowCount();
        if($count != 1){
            $con = new Functions();
            $con = $con->db;
            $status="Offline";
            $stmt = $con->prepare("INSERT INTO users(user_id, username, password, status)VALUES(:userid, :account, :password, :status)");
            $stmt->bindValue(':userid', $userid);
            $stmt->bindValue(':account', $regaccount);
            $stmt->bindValue(':password', $regpass);
            $stmt->bindValue(':status', $status);
            $stmt->execute();
        }else{
            echo '<script>alert("account name already exists");</script>'; 
        }
    ob_end_flush();
?>

您需要执行以下更改才能完成此操作:

1)在你的PHP代码中,不要写任何警报。

2)无论用户存在于数据库中还是新插入,AJAX请求都将仅获取数据。我们必须处理逻辑。

3) 仅当 AJAX 请求

失败(请求未发送或响应状态不是 200 OK)时,才会调用 AJAX error方法。

4)在您的情况下error,如果用户已经存在,甚至插入用户,则永远不会调用该方法,因为数据正在从JavaScript正确传输到PHP。

if($count != 1){
  $con = new Functions();
  $con = $con->db;
  $status="Offline";
  $stmt = $con->prepare("INSERT INTO users(user_id, username, password, status)VALUES(:userid, :account, :password, :status)");
  $stmt->bindValue(':userid', $userid);
  $stmt->bindValue(':account', $regaccount);
  $stmt->bindValue(':password', $regpass);
  $stmt->bindValue(':status', $status);
  $stmt->execute();
  echo 'success';
}
else{
  echo 'exists'; 
}

$.ajax({
  type: "POST",
  url: "register.php",
  data: "regaccount="+regaccount+"&regpass="+regpass,
  success: function(data){    
    if (data == 'success') {
      alert("account successfully created!");
    }
    else if (data == 'exists') {
      alert("account already exists");
    }
  },
  error:function(){
    alert("Unknown problem occured.");
  }
});

在这里,您正在尝试将消息提示到错误的AJAX错误部分。您需要将两者处理到成功部分。

非常简单的例子是,返回$count并检查该值,如果大于 0 表示存在记录。

寄存器.php代码的更改:

if($count != 1){
    $con = new Functions();
    $con = $con->db;
    $status="Offline";
    $stmt = $con->prepare("INSERT INTO users(user_id, username, password, status)VALUES(:userid, :account, :password, :status)");
    $stmt->bindValue(':userid', $userid);
    $stmt->bindValue(':account', $regaccount);
    $stmt->bindValue(':password', $regpass);
    $stmt->bindValue(':status', $status);
    $stmt->execute();
}
echo $count;

我删除了不需要的其他部分。并使用$count进行 AJAX 响应。

并对 AJAX 部分进行相应的更改:

$.ajax({
  type: "POST",
  url: "register.php",
  data: "regaccount="+regaccount+"&regpass="+regpass,
  success: function(data){ 
        //If record exist...
      if(data > 0){
        alert("account name already exists");
      }
      else {
        alert("account successfully created!");
      }
  },
  error:function(){
       alert("There is some error, Please try after some time OR contact site admin.");
  }
});

希望这很容易理解并对其他用户也有帮助。