我试图确保当用户在表单中引入用户名时,该用户名不在我的数据库中。
当我介绍已存在的用户名时,收到错误消息:" *用户名已存在"。但是,它在数据库中引入了用户名,因此我的数据库中存在重复。
此外,每当我更新(F5)浏览器时,我的数据库中都会引入一条NULL记录。
非常感谢! :)
以下是我使用的代码:
<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>
<?php
// define variables and set to empty values
$usernameErr = "";
$username = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["username"])) {
$usernameErr = "Username is required";
} else {
$username = test_input($_POST["username"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z0-9 ]*$/",$username)) {
$usernameErr = "Only letters, numbers and white space allowed";
}
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<?php
if ($usernameErr == '')
{
$db = pg_connect('host=localhost dbname=test user=myuser password=mypass');
$username = pg_escape_string($_POST['username']);
$query = "SELECT username FROM host";
$result = pg_query($query);
if (!$result) {
echo "Problem with query " . $query . "<br/>";
echo pg_last_error();
exit();
}
while($myrow = pg_fetch_assoc($result)) {
if ($username == $myrow[username]) {$usernameErr = "Username already exist";}
else { $query = "INSERT INTO host(username) VALUES('" . $username . "')";}
printf ("$myrow[username]>");
}
$result = pg_query($db, $query);
if (!$result) {
$errormessage = pg_last_error();
echo "Error with query: " . $errormessage;
exit();
}
$username = "";
pg_close();
}
?>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<input type="text" name="username" placeholder="User Name" value="<?php echo $username;?>">
<span class="error">* <?php echo $usernameErr;?></span>
<br><br>
<input type="submit" name="submit" value="SAVE">
</form>
</body>
</html>
答案 0 :(得分:3)
问题出在while语句中;当它在数据库中发现一致时,它会打印“用户已存在”消息,但不是停止循环,而是继续将用户名与生成插入记录的其他记录进行比较。将while语句代码更改为:
while($myrow = pg_fetch_assoc($result)) {
if ($username == $myrow[username]) {
$usernameErr = "Username already exist";
break;
}
else {
$query = "INSERT INTO host(username) VALUES('" . $username . "')";
$result = pg_query($db, $query);
if (!$result) {
$errormessage = pg_last_error();
echo "Error with query: " . $errormessage;
exit();
}
$username = "";
}
printf ("$myrow[username]>");
}
这对你有用。您还可以为数据库中的用户名列定义唯一约束。
答案 1 :(得分:0)
好的,这是我找到的解决方案,它正在为我工作。
谢谢
$usernamefound = false;
while($myrow = pg_fetch_assoc($result)) {
if ($username == $myrow[username]) {
$usernameErr = "Username already exist";
$usernamefound = true;
break;
}
}
if ($usernamefound == false) {
$query = "INSERT INTO host(username) VALUES('" . $username . "')";
$result = pg_query($db, $query);
if (!$result) {
$errormessage = pg_last_error();
echo "Error with query: " . $errormessage;
exit();
}
$username = "";
}
printf ("$myrow[username]>");