MySQL - 在提交表单

时间:2018-03-14 09:22:40

标签: php mysql

我试图在触发插入新用户名的表单之前检查是否存在用户名,以便我可以通知用户她所选用户名的可用性(或不可用)。

但我的代码不起作用。问题出在哪儿?这是我的代码:

<?php
$servername = "localhost";
$username = "zprestau01u";
$password = "ZPrestau#01U$100";
$dbname = "zprestau01";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$username=$_POST['Name'];
$email = $_POST['Email'];
$password = $_POST['Password'];

//Query statement with placeholder
$query = "SELECT Name
          FROM demotable 
          WHERE demotable.Name = '$username'";

//Put the parameters in an array
$params = array($username);

//Execute it
try {
    $stmt = $conn->prepare($query);
    $result = $stmt->execute($params);
} catch(PDOException $ex) {
    echo $ex->getMessage());
}

//Now Check for the row count
if($stmt->rowCount > 0) {
    echo "Account Exists";
} else{
                $sql = "INSERT INTO demotable(Name,Email,Password) VALUES ('$username','$email','$password')";

                if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
            }

$conn->close();
?>

N.B:同时我试图在MySQL中插入用户名 不存在。

2 个答案:

答案 0 :(得分:2)

第一件事是在数据库级别添加安全层,以防止插入重复的用户名。假设Name列对应于用户名,则需要配置SQL数据库以将Name理解为唯一键:

ALTER TABLE Demotable ADD UNIQUE (Name);

通过这种方式,如果您尝试插入具有现有名称的行,则将创建一个异常,并且不会插入具有重复用户名的行。

在提交表单之前进行检查是一个很好的改进。如果您在提交表单之前尝试检查用户名的可用性,则出于用户体验和用户信息的目的,那么一个好的解决方案可能是使用集成在PHP代码中的AJAX。其他地方有nice explanation您可能需要检查。

虽然提供了大量代码,但您可能会特别注意实际的AJAX查询,并根据您的需求和项目需求进行调整。使用jQuery进行ajax调用它看起来像这样:

<script>
$(document).ready(function(){

   $("#txt_uname").keyup(function(){

      var uname = $("#txt_uname").val().trim();

      if(uname != ''){

         $("#uname_response").show();

         $.ajax({
            url: 'uname_check.php',
            type: 'post',
            data: {uname:uname},
            success: function(response){

                if(response > 0){
                    $("#uname_response").html("<span class='not-exists'>* Username Already in use.</span>");
                }else{
                    $("#uname_response").html("<span class='exists'>Available.</span>");
                }

             }
          });
      }else{
         $("#uname_response").hide();
      }

    });

 });
</script>

答案 1 :(得分:0)

如果你想在提交表格之前检查一下,你可以只去ajax.check点击提交按钮,这样你就可以试试。

<?php
    $servername = "xxxxxxxxx";
    $username = "xxxxxxxxxx";
    $password = "";
    $dbname = "test";
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);

    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

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

        //Query statement with placeholder
        $query = "SELECT fname
                  FROM person
                  WHERE fname = '$username'";

        // Execute it
        try {
            $stmt = $conn->prepare($query);
            //for you no need to pass parameter inside execute statement
            $result = $stmt->execute();
            //After executing the query store the result like below
            $stmt->store_result();
        } catch(PDOException $ex) {
            echo $ex->getMessage();
        }

        //Now Check for the row count
       //you have to check numrows >0 like this
       if($stmt->num_rows>0) {
           echo "Account Exists";
           die;
       } else {
           $sql = "INSERT INTO person(username,email,password) VALUES ('$username','$email','$password')";

          if ($conn->query($sql) === TRUE) {
             echo "New record created successfully";
          } else {
             echo "Error: " . $sql . "<br>" . $conn->error;
          }
      }
   }
   $conn->close();
?>