Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.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/55.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-在提交表单之前检查用户名是否已经存在_Php_Mysql - Fatal编程技术网

Php MySQL-在提交表单之前检查用户名是否已经存在

Php MySQL-在提交表单之前检查用户名是否已经存在,php,mysql,Php,Mysql,在提交将触发插入新用户名的表单之前,我试图检查用户名是否存在,以便我可以通知用户所选用户名是否可用 但是我的代码不起作用。问题在哪里?这是我的密码: <?php $servername = "localhost"; $username = "zprestau01u"; $password = "ZPrestau#01U$100"; $dbname = "zprestau01"; // Create connection $conn = new mysqli($servername, $us

在提交将触发插入新用户名的表单之前,我试图检查用户名是否存在,以便我可以通知用户所选用户名是否可用

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

<?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();
?>

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

ALTER TABLE Demotable ADD UNIQUE (Name);
这样,如果尝试插入具有现有名称的行,将创建异常,并且不会插入具有重复用户名的行

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

虽然提供了很多代码,但您可能会特别注意实际的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>

$(文档).ready(函数(){
$(“#txt_uname”).keyup(函数(){
var uname=$(“#txt_uname”).val().trim();
如果(uname!=''){
$(“#取消响应”).show();
$.ajax({
url:'uname_check.php',
键入:“post”,
数据:{uname:uname},
成功:功能(响应){
如果(响应>0){
$(“#uname_response”).html(“*用户名已在使用中”);
}否则{
$(“#uname_response”).html(“可用”);
}
}
});
}否则{
$(“#取消响应”).hide();
}
});
});

如果您想在提交表单之前进行检查,可以只使用ajax。单击“提交”按钮后进行检查,这将起作用。您可以尝试一下

<?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();
?>

为什么不在其上添加一个唯一的键约束?您确定用户名确实存在于该表中吗?“我的代码不起作用”-如何?会发生什么?什么也没找到?抛出异常?如果我们要帮助您,我们需要的不仅仅是“我的代码不起作用”,是的……我确信有一个词需要您研究:
ajax
谢谢……但我正在检查用户名是否存在。因为当用户输入用户名时,我知道它不会保存在数据库中…但是应该通知用户该用户名已经存在。然后你真的需要在问题本身中指定它,在实际提交表单之前尝试检查它的事实是这里的关键,你在标题和描述中都没有提到:)我改进了我的答案,别忘了检查它是否有助于你解决问题@MunemSohan:)