我试图在触发插入新用户名的表单之前检查是否存在用户名,以便我可以通知用户她所选用户名的可用性(或不可用)。
但我的代码不起作用。问题出在哪儿?这是我的代码:
<?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中插入用户名 不存在。
答案 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();
?>