首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查用户登录时的几个条件

检查用户登录时的几个条件
EN

Stack Overflow用户
提问于 2011-01-04 10:34:46
回答 3查看 168关注 0票数 0

我想完成以下工作:

如果用户名或密码字段为空,则通知用户。如果用户名已经存在,请不要在数据库中插入,并通知用户创建其他名称。如果用户名唯一且密码不为空,则将用户名返回给用户。到目前为止,它总是返回“请输入不同的用户名”。我相信这个问题与数据库查询有关,但我不确定。如果有人能看一看我是否犯了错误,我非常感谢,谢谢。

代码语言:javascript
复制
if ($userName or $userPassword = null)
{

  echo "Please enter a user name and password or return to the homepage.";

}

elseif (mysql_num_rows(mysql_query("SELECT count(userName) FROM logininfo WHERE userName = '$userName'")) ==1)

{

  echo "Please enter a different user name.";

}

elseif ($userName and $userPassword != null)

{

  echo "Your login name is: $userName";

}
EN

回答 3

Stack Overflow用户

发布于 2011-01-04 10:52:10

代码语言:javascript
复制
if ($userName or $userPassword = null)

这将检查$userName是否为true (等同于$userName == true),以及您是否正在将 null分配给$userPassword。你想要像$userName == '' || $userPassword == ''这样的东西。

代码语言:javascript
复制
"SELECT count(userName) FROM logininfo WHERE userName = '$userName'"

SQL injection的风险。在将值插入查询之前使用mysql_real_escape_string

此外,mysql_num_rows将始终返回1行,因此此表达式始终为true。您需要查看,即这一行的值

代码语言:javascript
复制
elseif ($userName and $userPassword != null)

如果这个检查是您想要的,那么第一次检查就是多余的。

使用类似如下的内容:

代码语言:javascript
复制
function validateUser($username, $password) {
    if ($username == '' || $password == '') {
        return 'Please enter a user name and password or return to the homepage.';
    }

    $query = sprintf("SELECT COUNT(*) as `count` FROM `logininfo` WHERE `userName` = '%s'",
                     mysql_real_escape_string($username));
    $result = mysql_query($query);
    if (!$result) {
        trigger_error(mysql_error());
        return false;
    }
    $result = mysql_fetch_assoc($result);
    if ($result['count'] > 0) {
        return 'Please enter a different user name.';
    }

    return "Username: $username";
}

$result = validateUser($username, $password);
if (!$result) {
    // something went wrong, deal with it
} else {
    echo htmlentities($result);
}

请注意,这还远不是理想的代码,但我希望您能理解。

票数 1
EN

Stack Overflow用户

发布于 2011-01-04 10:47:50

您可能需要以下内容。不过,这非常基础。

代码语言:javascript
复制
isset($_POST['username']) or die('username not given'); //#1
isset($_POST['password']) or die('password not given'); //#2

$escapedUsername = mysql_real_escape_string($_POST);
$result = mysql_fetch_array(mysql_query("SELECT count(userName) FROM logininfo WHERE     userName = '$escapedUsername'"))

if ($result){
    echo "Hello, $escapedUsername"; //#3
}else{
    echo "Invalid Password"; //#4
}

但我可以提出一些不同的建议。将要求您更改您的应用程序的某些部分。

请将此文件用作某种登录密码,并将此文件用于登录/密码reset/register/etc..

  • have a GET以区分这些请求,并使用AJAX.

  • In大小写替换以下内容:die('{"RESULT":"SUCCESS", "DESC" : "$escapedUsername"}'); // can also use json_encode($result) here.

  • #1:AJAX.

  • In:die('{"RESULT":"ERROR", "DESC" : "USERNAME NOT GIVEN"}');

  • #2:die('{"RESULT":"ERROR", "DESC" : "PASSWORD NOT GIVEN"}');

  • #3:die('{"RESULT":"ERROR", "DESC" : "INVALID USERNAME/PWD"}');

  • #4:die('{"RESULT":"SUCCESS", "DESC" : "$escapedUsername"}'); // can also use json_encode($result) here.

  • #1

这些只是我的建议。我假设mysql不会给你带来任何问题。:-)

票数 0
EN

Stack Overflow用户

发布于 2011-01-04 10:48:42

代码语言:javascript
复制
if ($userName or $userPassword = null)

应该是

代码语言:javascript
复制
if (($userName == null) or ($userPassword == null))

但是,我怀疑您实际上并不想检查这些值是否为null。假设您从输入字段填充这些变量,则空文本字段不是null;它是一个空字符串。您可以执行!empty($userName)来检查空文本域。

如果你想在单个条件中检查两个变量,你必须分别写出每个检查- ($userName and $userPassword != null)不会以你期望的方式工作,它应该是($userName != NULL and $userPassword != null)

此外,当您检查一个变量是否等于某个值时,您必须使用==运算符。否则,您会将变量赋给该值,这几乎不是您想要做的事情。

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

https://stackoverflow.com/questions/4590203

复制
相关文章

相似问题

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