我创建了一个注册表,昨天我创建了一个"管理员"帐户,但今天早上我注意到:
- 我可以创建另一个管理员帐户,而昨天我不能。 如果我创建一个名为"user"的帐户,我无法创建另一个名为"user"的帐户,
- 但是如果我在重新启动电脑后尝试创建一个名为"user"的帐户,我可以。
事情是我试过了: 1. GET 方法而不是 POST,但这会将帐户详细信息插入 URL 中,这是"不好的做法" 阿拉伯数字。
$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 个同名用户,如果一个是在我重新启动之前创建的,另一个是在我重新启动之后创建的。
我会
选择这样的东西,你确实应该使用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);
?>
在插入查询之前,您应该检查该用户名是否已存在于数据库中。
并且字段用户名必须是唯一的。
此时您的验证是错误的。如果你想检查数据库中是否有用户名,你应该只检查用户名,而不是用户名和密码,此时你正在做的事情。它也不确定$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_*
函数,它们已正式弃用,不再维护,并将在未来删除。您应该使用 PDO 或 MySQLi 更新代码,以确保将来项目的功能,并开始使用预准备语句。