Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我的代码无法检查用户名是否已被使用?_Php_Mysqli - Fatal编程技术网

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

Php 为什么我的代码无法检查用户名是否已被使用?,php,mysqli,Php,Mysqli,我想检查他们更新或注册详细信息时是否已使用用户名。我注意到,我检查用户名字段是否为空,并在检查是否已使用用户名字段后进行设置。我会改变这个。但是,我仍然可以注册一个已经使用过的用户名?正如一些评论所说,让我为您重新表述一下 理想情况下,您应该检查表中是否存在用户名,而不是获取所有用户名,并检查每个用户名是否冗余且不需要 所以你应该做: $query = ("SELECT * FROM users"); $result = mysqli_query($connection, $query); i

我想检查他们更新或注册详细信息时是否已使用用户名。我注意到,我检查用户名字段是否为空,并在检查是否已使用用户名字段后进行设置。我会改变这个。但是,我仍然可以注册一个已经使用过的用户名?

正如一些评论所说,让我为您重新表述一下

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

所以你应该做:

$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)){

使用mysqli查看准备好的语句。它会自动为您执行mysqli_real_escape_string函数,并且更安全地防止注入。我刚开始在PDO上学习,所以我不熟悉mysqli的学习方式,因此无法忍受这个答案。

你真的这样做吗?您应该使用mysqli_num_rows来执行此操作,例如,选择username from table_name,其中username=$the_posted_username,然后使用mysqli_num_rows函数来比较行数。不管您怎么想,从mytable选择*并不是您需要学习的唯一SQL。说真的。你是怎么得到$username的?您考虑过从username=:username的用户中选择username吗?所以您对所有用户进行选择,因为没有WHERE子句。然后检查它是否是POST请求。所以,每当这个脚本运行时,你都会浪费宝贵的资源。我很想听听DV!
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";
  }
}