首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP & MySQL用户名验证和存储问题

问PHP & MySQL用户名验证和存储问题
EN

Stack Overflow用户
提问于 2010-05-02 16:50:15
回答 3查看 440关注 0票数 1

由于某些原因,当用户输入一个全新的用户名时,会显示错误消息<p>Username unavailable</p>,并且不会存储该用户名。我想知道是否有人可以帮我找到代码中的缺陷,这样我就可以修复这个错误了?谢谢

以下是PHP代码。

代码语言:javascript
复制
if($_POST['username'] && trim($_POST['username'])!=='') {
    $u = "SELECT * 
          FROM users 
          WHERE username  = '$username'
          AND user_id <> '$user_id'";
    $r = mysqli_query ($mysqli, $u) or trigger_error("Query: $u\n<br />MySQL Error: " . mysqli_error($mysqli));

    if (mysqli_num_rows($r) == TRUE) {
        echo '<p>Username unavailable</p>';
        $_POST['username'] = NULL;
    } else if(isset($_POST['username']) && mysqli_num_rows($r) == 0 && strlen($_POST['username']) <= 255) { 
        $username = mysqli_real_escape_string($mysqli, $_POST['username']);
    } else if($_POST['username'] && strlen($_POST['username']) >= 256) {
        echo '<p>Username can not exceed 255 characters</p>';
    }
}
EN

回答 3

Stack Overflow用户

发布于 2010-05-02 16:53:29

嘿,由于您的查询有效,mysqli_num_rows will always为true。相反,您必须检查它返回的行数,当然,如果您想创建一个新用户,行数应该是零。因此,检查行数是否等于1。

代码语言:javascript
复制
if (mysqli_num_rows($r) == 1) echo "<p>Username unavailable</p>"; $_POST['username'] = NULL;

或者这样做:

代码语言:javascript
复制
if (mysql_i_num_rows($r) == 0 ) {
  // There isn't a user with this username yet, so create new user
} else {
  echo "Username not available";
}
票数 1
EN

Stack Overflow用户

发布于 2010-05-02 17:08:46

无论如何,将它与TRUE进行比较是一种糟糕的做法,因为它总是返回一个int,请改用:

代码语言:javascript
复制
mysqli_num_rows($r) > 0
票数 0
EN

Stack Overflow用户

发布于 2010-05-02 17:09:18

由于您尚未指定$username和$user_id的值,因此您的

代码语言:javascript
复制
$u = "SELECT * 
          FROM users 
          WHERE username  = '$username'
          AND user_id <> '$user_id'";

将计算为

代码语言:javascript
复制
$u = "SELECT * 
              FROM users 
              WHERE username  = ''
              AND user_id <> ''";

我猜这不是您想要的查询,并且您将检索用户名为空的所有条目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2752897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档