用户名检查后的不一致返回消息

时间:2017-04-08 12:44:23

标签: php sql username

我是新来的,所以我希望我做得对。 我有一些问题,从我的PHP发送正确的消息到我的 HTML

在这里,您可以看到如果用户名无效(如果使用#$%^&等等),可以回复消息的PHP部分。

$validUsername = $CurrentUser->ValidateUsername($username);

//if the input isn't filled send a message back
    if(!$validUsername)
{
    $messageError = "Please fill in a valid username";
    header("location: ../public/index.php?messageError=$messageError");
}

另一个应检查用户名是否唯一的

    $uniqueUsername = $CurrentUser->CheckAvailableUsername($validUsername);

    if (!$uniqueUsername)
{
    $messageError = "Please fill in a unique username";
    header("location: ../public/index.php?messageError=$messageError");
}

现在奇怪的是如果使用#$%^&等。作为用户名,它会给我回复,请填写一个唯一的用户名,而不是请填写有效的用户名,我找不到原因。

哦顺便说一下我用这些方法创建了一个名为User的类,我将在下面显示它们。

        public function ValidateUsername($username)
    {
        if (!empty($username))
        {
            if (isset($username))
            {
                if (!preg_match("/^[a-zA-Z ]*$/", $username))
                {
                    return false;
                }
                return $this->username = $username;
            }
            return false;
        }
        return false;
    }

另一个。

        public function CheckAvailableUsername($username)
    {
        $sql = "SELECT * FROM `tbl_todolist`
            WHERE `username` = '$username';";

        $result = $this->dataBase->query($sql)->rowCount();
        if ($result == 1)
        {
            return false;
        }
        return $this->username = $username;
    }

我真的希望你们可以帮助我。

1 个答案:

答案 0 :(得分:0)

header(...);之后,你需要在return;exit;之后退出,否则它会继续超出该标题。

附加说明

您对CheckAvailableUsername中的SQL注入持开放态度,您需要在访问该函数之前清理该值,并且还要将值bind转义为您的查询。看起来你已经在使用PDO了。