为什么我的代码无法检查用户名是否已被占用?

时间:2014-04-22 10:50:41

标签: php mysqli

$query = ("SELECT * FROM users");
$result = mysqli_query($connection, $query);

if (!empty($_POST)){
while ($row = mysqli_fetch_assoc($result)){
if ($username == $row['username']){
echo "Username Taken, Try again";
}else if (empty($username) || !isset($username)) {
echo "Please enter a valid username";
 } else if (empty($email) || !isset($email)){

我想在更新或注册其详细信息时检查用户名是否已被占用。我注意到我检查用户名字段是否为空并设置在我检查是否已被拍摄之后。我会改变这个。但是,我仍然可以注册已经使用的用户名吗?

1 个答案:

答案 0 :(得分:-1)

正如一些评论所说,让我为你重新说一遍。

理想情况下,您应该检查表中是否存在用户名而不是获取所有用户名并检查每个用户名(这是多余的,不需要)。

所以你应该这样做:

if (!empty($_POST)){
  //get the submitted username cleaned
  $username = mysqli_real_escape_string($connection,$_POST['username']);
  //get username where username=posted username 
  $query = mysqli_query($connection,"SELECT username FROM users WHERE username='{$username}'");
  //get the number of rows returned from above query
  $count = mysqli_num_rows($query);
  //if a row is found, that means the username exists
  //so post the error
  if($count==1){
    echo "Username Taken, Try again";
  }
}

使用 mysqli 查看预备语句。它会自动为您执行mysqli_real_escape_string()功能,并且对注入更安全。我刚开始在PDO上学习它,所以我不熟悉 mysqli 这样做的方法,因此无法用这个答案来解决。