检查用户名是否存在,不工作
Check if username exists, not working
我创建了注册表,昨天我创建了一个 'admin' 帐户,但今天早上我注意到:
- 我可以创建另一个管理员帐户,而昨天我不能。
- 如果我创建一个名为 'user' 的帐户,我无法创建另一个名为 'user' 的帐户,但是如果我尝试在重新启动我的电脑后创建一个名为 'user' 的帐户,我可以。
我试过的东西:
1. GET 方法而不是 POST,但这会将帐户详细信息插入 URL,这是 'bad practice'
2.
$queryc = mysql_query("SELECT `naam` FROM `account` WHERE `naam`='" . $dumpname."'");
if ($wachtwoord == $wachtwoord2 && mysql_num_rows($queryc) == 0) {
我试过上面的代码,但还是不行。
我的代码:
使代码更好的变量:
$strlow = strtolower($naam);
$dumpname = filter_var($strlow,FILTER_SANITIZE_SPECIAL_CHARS);
$dumpww = filter_var($wachtwoord,FILTER_SANITIZE_SPECIAL_CHARS);
$dumpe = filter_var($email,FILTER_SANITIZE_SPECIAL_CHARS);
$naam = filter_input(INPUT_POST, 'name');
$wachtwoord = filter_input(INPUT_POST, 'wachtwoord');
$wachtwoord2 = filter_input(INPUT_POST, 'wachtwoord2');
$email = filter_input(INPUT_POST, 'email');
if 语句:
if ($wachtwoord == $wachtwoord2 && $Checknaam['naam'] != $dumpname) {
$query = "INSERT INTO `account`(`naam`, `wachtwoord`, `email`) VALUES ('$dumpname','$dumpww','$dumpe')";
$database = $db->query($query);
$print = "<h2 id='regigoed'>Succesvol geregistreerd je kan nu <a href='reducation.php' class='link'>inloggen!</a></h2>";
} else { //anders print een fout, zonder te veel informatie te geven over de database
$print = "<div id='regifout'>
<h2>Fout het account is niet gemaakt probeer het opnieuw.</h2>
<form action='registeraccept.php' method='post'>
<p id='paddingregi'> *Account naam: <input id='paddingform' type='text' class='margin' name='name' maxlength='16'></p>
<p id='paddingregi'> *Wachtwoord: <input id='paddingform' type='password' class='margin' name='wachtwoord' maxlength='20'></p>
<p id='paddingregi'> *Vul je wachtwoord opnieuw in: <input id='paddingform' type='password' class='margin' name='wachtwoord2' maxlength='20'></p>
<p id='paddingregi'> *E-mail: <input id='paddingform' type='text' class='margin' name='email' maxlength='50'></p>
<input type='submit' value='Registreer' style='margin-left: 10px;'><br>
</form>
<p id='req'> Velden met * moeten worden ingevuld, u kunt maximaal 20 karakters gebruiken voor uw wachtwoord. </p>
</div>";
}
形式:
<form action='registeraccept.php' method='post'>
<p id='paddingregi'> *Account naam: <input id='paddingform' type='text' class='margin' name='name' maxlength="16"></p>
<p id='paddingregi'> *Wachtwoord: <input id='paddingform' type="password" class='margin' name='wachtwoord' maxlength="20"></p>
<p id='paddingregi'> *Vul je wachtwoord opnieuw in: <input id='paddingform' type='password' class='margin' name='wachtwoord2' maxlength="20"></p>
<p id='paddingregi'> *E-mail: <input id='paddingform' type="text" class='margin' name='email' maxlength="50"></p>
<input type='submit' value='Registreer' style='margin-left: 15px'><br>
</form>
有谁知道为什么我可以创建 2 个具有相同名称的用户,如果一个是在我重新启动之前创建的,另一个是在我重新启动之后创建的。
在插入查询之前,您应该检查该用户名是否已存在于数据库中。
并且字段用户名必须是唯一的。
此时您的验证有误。如果你想检查数据库中的用户名,你应该只检查用户名而不是用户名和密码,这是你正在做的事情。它也不确定变量 $password
和 $password2
来自哪里。
简而言之,您需要将代码调整为:
$queryc = mysql_query("SELECT count(*) FROM `account` WHERE `naam`='" . $dumpname."'");
if (mysql_num_rows($queryc) == 0) {
//username is not taken
//do logic here
}
旁注:
不再支持 mysql_*
函数,它们 officially deprecated, no longer maintained and will be removed in the future. You should update your code with PDO or MySQLi 以确保您的项目在未来的功能并开始使用准备好的语句.
我会选择这样的东西,你确实应该使用 mysqli 或 PDO。
<?php
$con=mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// Make variables here
$sql="SELECT naam FROM account WHERE naam=$dumpname";
if ($result=mysqli_query($con,$sql))
{
$rowcount=mysqli_num_rows($result);
if($rowcount==1){
die("a user already exists with this username");
}
else {
// proceed with inserting data here
}
}
mysqli_free_result($result);
mysqli_close($con);
?>
我创建了注册表,昨天我创建了一个 'admin' 帐户,但今天早上我注意到:
- 我可以创建另一个管理员帐户,而昨天我不能。
- 如果我创建一个名为 'user' 的帐户,我无法创建另一个名为 'user' 的帐户,但是如果我尝试在重新启动我的电脑后创建一个名为 'user' 的帐户,我可以。
我试过的东西: 1. GET 方法而不是 POST,但这会将帐户详细信息插入 URL,这是 'bad practice' 2.
$queryc = mysql_query("SELECT `naam` FROM `account` WHERE `naam`='" . $dumpname."'");
if ($wachtwoord == $wachtwoord2 && mysql_num_rows($queryc) == 0) {
我试过上面的代码,但还是不行。
我的代码:
使代码更好的变量:
$strlow = strtolower($naam);
$dumpname = filter_var($strlow,FILTER_SANITIZE_SPECIAL_CHARS);
$dumpww = filter_var($wachtwoord,FILTER_SANITIZE_SPECIAL_CHARS);
$dumpe = filter_var($email,FILTER_SANITIZE_SPECIAL_CHARS);
$naam = filter_input(INPUT_POST, 'name');
$wachtwoord = filter_input(INPUT_POST, 'wachtwoord');
$wachtwoord2 = filter_input(INPUT_POST, 'wachtwoord2');
$email = filter_input(INPUT_POST, 'email');
if 语句:
if ($wachtwoord == $wachtwoord2 && $Checknaam['naam'] != $dumpname) {
$query = "INSERT INTO `account`(`naam`, `wachtwoord`, `email`) VALUES ('$dumpname','$dumpww','$dumpe')";
$database = $db->query($query);
$print = "<h2 id='regigoed'>Succesvol geregistreerd je kan nu <a href='reducation.php' class='link'>inloggen!</a></h2>";
} else { //anders print een fout, zonder te veel informatie te geven over de database
$print = "<div id='regifout'>
<h2>Fout het account is niet gemaakt probeer het opnieuw.</h2>
<form action='registeraccept.php' method='post'>
<p id='paddingregi'> *Account naam: <input id='paddingform' type='text' class='margin' name='name' maxlength='16'></p>
<p id='paddingregi'> *Wachtwoord: <input id='paddingform' type='password' class='margin' name='wachtwoord' maxlength='20'></p>
<p id='paddingregi'> *Vul je wachtwoord opnieuw in: <input id='paddingform' type='password' class='margin' name='wachtwoord2' maxlength='20'></p>
<p id='paddingregi'> *E-mail: <input id='paddingform' type='text' class='margin' name='email' maxlength='50'></p>
<input type='submit' value='Registreer' style='margin-left: 10px;'><br>
</form>
<p id='req'> Velden met * moeten worden ingevuld, u kunt maximaal 20 karakters gebruiken voor uw wachtwoord. </p>
</div>";
}
形式:
<form action='registeraccept.php' method='post'>
<p id='paddingregi'> *Account naam: <input id='paddingform' type='text' class='margin' name='name' maxlength="16"></p>
<p id='paddingregi'> *Wachtwoord: <input id='paddingform' type="password" class='margin' name='wachtwoord' maxlength="20"></p>
<p id='paddingregi'> *Vul je wachtwoord opnieuw in: <input id='paddingform' type='password' class='margin' name='wachtwoord2' maxlength="20"></p>
<p id='paddingregi'> *E-mail: <input id='paddingform' type="text" class='margin' name='email' maxlength="50"></p>
<input type='submit' value='Registreer' style='margin-left: 15px'><br>
</form>
有谁知道为什么我可以创建 2 个具有相同名称的用户,如果一个是在我重新启动之前创建的,另一个是在我重新启动之后创建的。
在插入查询之前,您应该检查该用户名是否已存在于数据库中。
并且字段用户名必须是唯一的。
此时您的验证有误。如果你想检查数据库中的用户名,你应该只检查用户名而不是用户名和密码,这是你正在做的事情。它也不确定变量 $password
和 $password2
来自哪里。
简而言之,您需要将代码调整为:
$queryc = mysql_query("SELECT count(*) FROM `account` WHERE `naam`='" . $dumpname."'");
if (mysql_num_rows($queryc) == 0) {
//username is not taken
//do logic here
}
旁注:
不再支持 mysql_*
函数,它们 officially deprecated, no longer maintained and will be removed in the future. You should update your code with PDO or MySQLi 以确保您的项目在未来的功能并开始使用准备好的语句.
我会选择这样的东西,你确实应该使用 mysqli 或 PDO。
<?php
$con=mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// Make variables here
$sql="SELECT naam FROM account WHERE naam=$dumpname";
if ($result=mysqli_query($con,$sql))
{
$rowcount=mysqli_num_rows($result);
if($rowcount==1){
die("a user already exists with this username");
}
else {
// proceed with inserting data here
}
}
mysqli_free_result($result);
mysqli_close($con);
?>