检查现有用户名

时间:2017-12-05 01:42:28

标签: php sql pdo

目前正在处理一个应用程序,并对我提交表单后为什么我的脚本进入空白页面感到好奇。当我向我的脚本添加一个应该进入我的数据库的片段时,它开始发生,该脚本检查是否存在用户名,然后如果是这种情况则回复消息,如果不是这样,则回显消息。

这是代码:

function validateUser() {
    global $user, $userErr, $validForm;
    $userErr = "";
    if ($user == "") {
        $userErr = "nothing entered";
        $validForm = false;
    }
else if (!preg_match("/^[a-zA-Z]+(([\'\,\.\- ][a-zA-Z ])?[a-zA-
Z]*)*$/",$user)) {
    $userErr = "invalid characters";
    $validForm = false;
}
elseif (strlen($user) > 1) {
    $stmt = $conn->prepare("SELECT COUNT(username) AS num FROM credentials WHERE 
    username = :username");
    $stmt->bindValue(':username', $user);
    $stmt->execute(array($user));
    $norows = $result->fetchColumn();
    if ($norows > 0 ) {
    $userErr = 'Username already taken';
    }
    else {
      $userErr='User added';
    }
  }
}

给我带来麻烦的是最后一个elseif声明......由于某种原因它没有按照它应该做的那样做。我看过很多不同的来源,我尝试过实现不同的解决方案,但似乎没有任何工作。只有在您想知道的情况下提交表单时才会运行此函数。对任何可能的解决方案都非常开放。因为我无法让它工作......谢谢!

1 个答案:

答案 0 :(得分:0)

不要使用else if(),因为您使用的是不同的比较语句。只需将所有else if()替换为if()。然后使用$userErr变量检查输入是否通过了所有验证。

function validateUser() {
    global $user, $userErr, $validForm;
    $userErr = "";
    if ($user == "") {
        $userErr = "nothing entered";
        $validForm = false;
    }
    if (!preg_match("/^[a-zA-Z]+(([\'\,\.\- ][a-zA-Z ])?[a-zA-Z]*)*$/",$user)) {
        $userErr = "invalid characters";
        $validForm = false;
    }
    if (strlen($user) > 1) {
        $stmt = $conn->prepare("SELECT COUNT(username) AS num FROM credentials WHERE 
        username = :username");
        $stmt->bindValue(':username', $user);
        $stmt->execute(array($user));
        $norows = $result->fetchColumn();
        if ($norows > 0 ) {
            $userErr = 'Username already taken';
        }
    }
    if($userErr == "") {
        $userErr='User added';
    }
}