在程序使用ajax检查用户名可用性后插入查询时遇到问题

时间:2016-08-24 03:18:08

标签: php jquery mysql ajax database

在程序使用ajax检查用户名可用性以检查用户名是否可用于注册之后,我无法将查询插入数据库。在检查用户名可用性后,它总是在我的数据库中插入一些空查询。

以下是更多详细信息的示例输出:

enter image description here

但问题是当它显示可用的用户名时,它会自动将空查询插入数据库。

这将在检查用户可用性后插入数据库:

enter image description here

我希望在用户提交或者单击注册按钮时插入插入查询。用户名的可用性仅供检查。我的代码有问题吗?

以下是代码:

Sample.php文件

<!DOCTYPE html>
<html>
<head>
    <title>Sample</title>
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<input type="text" placeholder="Username" id="username" name="username" class="form-control" >
<span id="availability" style="color:green;"></span>
<input class="form-control" placeholder="First Name" name="firstname" type="text" >
<input type="submit" id="signup" name="signupsubmit" class="btn btn-info form-control" value="Register">
</body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script>

<script>
//Check Username availability
$(document).ready(function()
{
    $('#username').blur(function()
    {
        var username = $(this).val();
        $.ajax({
            url:"SampleProcess.php",
            method:"POST",
            data:{username:username},
            dataType:"text",
            success:function(html)
            {
                $('#availability').html(html);
            }
        })
    });
});
</script>
</html>

我在这里使用ajax检查脚本中的用户名可用性:

<script>
    //Check Username availability
    $(document).ready(function()
    {
        $('#username').blur(function()
        {
            var username = $(this).val();
            $.ajax({
                url:"SampleProcess.php",
                method:"POST",
                data:{username:username},
                dataType:"text",
                success:function(html)
                {
                    $('#availability').html(html);
                }
            })
        });
    });
</script>

用于检查用户名和插入查询的流程文件。

SampleProcess.php文件

<?php
   //This is an external file DBController for creating a connection to DB
    require_once("DBController.php");
    //DBHandler handles the DBController class
    $DBHandler = new DBController();

    //Call the function mainConnect()
    $connect = $DBHandler->mainConnect();

    //Check Username Availability
    if(isset($_POST["username"]))
    {
        $sql = "SELECT * FROM tablereminders WHERE username ='".$_POST["username"]."'";
        $result = mysqli_query($connect, $sql);

        if(mysqli_num_rows($result) > 0 )
        {
            echo"<span class=\"text-danger\">Username not available</span>";
            echo'<script>document.getElementById("username").focus();</script>';
        }
        else
        {
            //In this else condition the query will be inserted in the
            //database after the user clicks the register button, but it will insert right 
            //after the program check the availability

            echo"<span class=\"text-success\">Username available</span>";

            //Problem inserting my query here
            $Username = isset($_POST['username']);
            $FirstName = isset($_POST['firstname']);

            //Query Insert into tablereminders
            $query = mysqli_query($connect, "INSERT INTO `tablereminders`(`username` , `firstname`) 
            VALUES ('$Username' , '$FirstName')");

            if($connect->query($query) == TRUE)
            {
                echo "<script type='text/javascript'>alert('New record created successfully');</script> ";
                echo "<script>setTimeout(\"location.href = 'LoginReminder.php'\", 0)</script>";
            }
        }

    }

?>

在检查mysqli_num_rows之后的else条件中,我将插入查询放在那里,以便在用户单击注册按钮时执行。我的if-else条件是否有问题,或者它是关于Sample.php文件中的AJAX函数,我应该使用GET还是POST方法?无论哪种方式,我尝试过,但它不能解决我的问题。请帮忙。

1 个答案:

答案 0 :(得分:1)

试试这个;)

有两件事

  1. 检查用户名可用性。
  2. 提交表单并创建记录。
  3. <强> 1。检查用户名可用性。

    为此,您已经完成了修改代码所需的所有代码:

    <?php
    
    //This is an external file DBController for creating a connection to DB
    require_once("DBController.php");
    //DBHandler handles the DBController class
    $DBHandler = new DBController();
    
    //Call the function mainConnect()
    $connect = $DBHandler->mainConnect();
    
    //Check Username Availability
    if(isset($_POST["username"])){
      $sql = "SELECT * FROM tablereminders WHERE username ='" . $_POST["username"] . "'";
      $result = mysqli_query($connect, $sql);
    
      if(mysqli_num_rows($result) > 0){
        echo '<span class="text-danger">Username not available</span>';
        echo '<script>document.getElementById("username").focus();</script>';
      }else{
        echo '<span class="text-success">Username available</span>';
      }
    }
    

    <强> 2。提交表单并创建记录。 现在创建对其他文件的新ajax调用以插入记录,该记录在某些按钮单击事件上提交表单数据。

    如果用户名可用,您可以这样做。

    要插入记录的代码示例:

    $Username = isset($_POST['username']);
    $FirstName = isset($_POST['firstname']);
    
    //Query Insert into tablereminders
    $query = mysqli_query($connect, "INSERT INTO `tablereminders`(`username` , `firstname`) 
            VALUES ('$Username' , '$FirstName')");
    
    if($connect->query($query) == TRUE){
      echo '<script type="text/javascript">alert("New record created successfully");</script>';
      echo '<script>setTimeout(function(){ location.href = "LoginReminder.php"}, 0);</script>';
    }
    

    在数据库中插入新记录之前记住两件事:

    1. 验证用户数据。
    2. 转义用户数据可以使用此功能mysqli_real_escape_string 您可以使用预准备语句并绑定参数。