检查用户名是否存在,不工作

Check if username exists, not working

我创建了注册表,昨天我创建了一个 'admin' 帐户,但今天早上我注意到:

  1. 我可以创建另一个管理员帐户,而昨天我不能。
  2. 如果我创建一个名为 '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);
?>