Php 检查用户登录时的几种情况
我希望做到以下几点: 如果用户名或密码字段为空,请通知用户。如果用户名已经存在,请不要将其插入数据库并通知用户创建其他名称。如果用户名唯一且密码不为空,请将用户名返回给用户。 到目前为止,它总是返回“请输入其他用户名”。我相信问题与数据库查询有关,但我不确定。如果有人能看看我是否犯了错误,我非常感谢,谢谢Php 检查用户登录时的几种情况,php,mysql,Php,Mysql,我希望做到以下几点: 如果用户名或密码字段为空,请通知用户。如果用户名已经存在,请不要将其插入数据库并通知用户创建其他名称。如果用户名唯一且密码不为空,请将用户名返回给用户。 到目前为止,它总是返回“请输入其他用户名”。我相信问题与数据库查询有关,但我不确定。如果有人能看看我是否犯了错误,我非常感谢,谢谢 if ($userName or $userPassword = null) { echo "Please enter a user name and password or retur
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";
}
您可能需要以下信息。不过非常基本
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
}
但我可以提出一些不同的建议吗。将要求您更改应用程序的某些部分
- 将此文件作为某个login.php
- 用于登录/密码重置/注册等
- 有机会区分这些请求
- 使用AJAX
- 在这种情况下,更换如下部件:
- #1:
die(“{”结果“:”错误“,”描述“:”未给出用户名“}”)代码>
- #2:
die('{“结果”:“错误”,“描述”:“未给出密码”})代码>
- #3:
die(“{”结果“:“错误”,“描述“:“无效用户名/PWD”}”)代码>
- #4:
die(“{”RESULT:“SUCCESS”,“DESC:“$escapedUsername”}”);//也可以在此处使用json_encode($result)。
- #1:
if (($userName == null) or ($userPassword == null))
但是,我怀疑您实际上不想检查这些值是否为null。假设您是从输入字段填充这些变量,则空文本字段不为null;这是一个空字符串。你可以做!empty($userName)
检查空文本字段
如果要在单个条件中检查两个变量,则必须分别写出每个检查-($userName!=null)
不会按您期望的方式工作,它应该是($userName!=null和$userPassword!=null)
此外,在检查变量是否等于某个值时,必须使用=
运算符。否则,您会将变量赋值给该值,这绝不是您想要做的
if ($userName or $userPassword = null)
这将检查$userName
是否为true
(相当于$userName==true
),并且您正在向$userPassword
分配null
。您需要类似于$userName=''的东西| |$userPassword==''
危险。在将值插入查询之前使用
另外,mysql\u num\u rows
将始终返回1行,因此此表达式始终true
。您需要查看这一行的值
elseif ($userName and $userPassword != null)
如果这张支票是你想要的,那么第一张支票是多余的
使用类似以下内容:
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);
}
请注意,这还远远不是理想的代码,但我希望您能理解。只是一个说明-
$userName
是如何转义的?因为您在两种不同的上下文中使用它-SQL和(假设)HTML,这两种上下文都需要不同的转义。如果他是从普通登录表单发送这些内容,isset将始终返回true。一个空表单字段仍然会发送一个空字符串。我建议使用AJAX。这就是我这样做的原因。:-)<代码>$userName可能已经为SQL转义。但是,如果像在字符串中那样插入它,那就没有意义了(参见OP的示例)。有些地方不太对劲:)@alex说实话,我怀疑它逃走了o) 这段代码的作用是检查以确保两个表单字段都不为空,它还可以检查数据库;但是,现在它不会报告有效且已添加到数据库中的用户名。我肯定我缺少了一些简单的东西。@paul,那是因为这里没有向数据库添加内容。祝一切顺利,你必须自己编写应用程序,这只是让你走上正轨的一个例子。
elseif ($userName and $userPassword != null)
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);
}