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


Check if username exists, not working

我创建了一个注册表,昨天我创建了一个"管理员"帐户,但今天早上我注意到:

  1. 我可以创建另一个管理员帐户,而昨天我不能。
  2. 如果我创建一个名为"user"的帐户,我无法创建另一个名为"user"的帐户,
  3. 但是如果我在重新启动电脑后尝试创建一个名为"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 更新代码,以确保将来项目的功能,并开始使用预准备语句。