我已经创建了一个注册表单,昨天我创建了一个“管理员”。帐户,但今天早上我注意到了:
我尝试过的事情: 1. GET方法而不是POST,但是这会将帐户详细信息插入到网址中,这是一种不良做法' 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 statement:
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个具有相同名称的用户,如果在我重新启动之前创建了一个用户,如果之后是另一个用户。
答案 0 :(得分:1)
我会选择这样的东西你应该使用mysql i 或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);
?>
答案 1 :(得分:0)
在插入查询之前,您应该检查数据库中是否已存在该用户名。
字段用户名必须是唯一的。
答案 2 :(得分:0)
此时您的验证错误。如果要检查数据库中的用户名是否只应检查用户名而不是用户名和密码,那么此时您正在执行的操作。它也不确定变量$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,不再维护,将为removed个未来。您应该使用PDO或MySQLi更新代码,以确保将来项目的功能并开始使用预准备语句。