用户注册字母数字问题

时间:2014-02-24 19:21:38

标签: php database user-registration

我的用户注册系统存在一些问题 - 即其中的CheckUsername函数。

此代码:

    function checkUsername($username) {
        if ( preg_match('/\s/',$username)) {
            return false;
        }
        if(!preg_match('/^[\w\-]+$/', $username)) {
            return false;
        }
        if(strlen($username) == 0) {
            return false;   
        }
        else {
            $sql = "SELECT count(username) FROM users WHERE username = :username LIMIT 1";
            $que = $this->db->prepare($sql);
            $que->bindParam('username', $username);
            try {
                $que->execute();
                while($row = $que->fetch(PDO::FETCH_BOTH)) {

                    if($row[0] > 0) {
                        return false;
                    }
                    else {
                        return true;
                    }
                }
            }
            catch(PDOException $e) {}
        }
    }

不按设计工作。用户可以注册<script>之类的名称,这显然是我不想要的。

        function registerUser($password, $username)
    {
        if(!$this->checkUsername($username))
        {
            header('location:index.php');
        }
        else
        {
        $password = $this->passwordEncryption($password);
        $sql = "INSERT INTO users(username, password) VALUES (:username, :password);";
        $sql .= "INSERT INTO bank_accounts(balance, fuel_cell, energy_cell) VALUES (100,100, 100);";
        $que = $this->db->prepare($sql);
        $que->bindParam('username', $username);
        $que->bindParam('password', $password);
        try{
             $que->execute(); 
             $que->nextRowset();
             $this->login($username, $password);
             }

             catch(PDOException $e){}
        }
    }

2 个答案:

答案 0 :(得分:1)

这表示如果没有单词字符或 - 所以任何包含单词字符的字符串或 - 以及其他任何内容都可以:

if(!preg_match('/^[\w\-]+$/', $username)) {
    return false;
}

如果有任何字符不是单词字符,您可能需要 -

if(preg_match('/[^\w\-]+$/', $username)) {
    return false;
}

答案 1 :(得分:0)

尝试以下方法:)

function checkUsername($username) {
    $username = trim("$username");

    if ( empty($username) || !preg_match("/^a-z0-9\-]+$/i", $username)) {
        return false;
    }

    $sql = "SELECT count(1) FROM users WHERE username = :username LIMIT 1";
    $que = $this->db->prepare($sql);
    $que->bindParam('username', $username);
    try{ 
        $que->execute(); 
        while($row = $que->fetch(PDO::FETCH_BOTH)) { 
            if($row[0] > 0) {
                return false;
            } else {
            return true;
            }
        }  
    } catch(PDOException $e){}
}