我想完成以下工作:
如果用户名或密码字段为空,则通知用户。如果用户名已经存在,请不要在数据库中插入,并通知用户创建其他名称。如果用户名唯一且密码不为空,则将用户名返回给用户。到目前为止,它总是返回“请输入不同的用户名”。我相信这个问题与数据库查询有关,但我不确定。如果有人能看一看我是否犯了错误,我非常感谢,谢谢。
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";
}发布于 2011-01-04 10:52:10
if ($userName or $userPassword = null)这将检查$userName是否为true (等同于$userName == true),以及您是否正在将 null分配给$userPassword。你想要像$userName == '' || $userPassword == ''这样的东西。
"SELECT count(userName) FROM logininfo WHERE userName = '$userName'"SQL injection的风险。在将值插入查询之前使用mysql_real_escape_string!
此外,mysql_num_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);
}请注意,这还远不是理想的代码,但我希望您能理解。
发布于 2011-01-04 10:47:50
您可能需要以下内容。不过,这非常基础。
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..
die('{"RESULT":"SUCCESS", "DESC" : "$escapedUsername"}'); // can also use json_encode($result) here.
die('{"RESULT":"ERROR", "DESC" : "USERNAME NOT GIVEN"}');
die('{"RESULT":"ERROR", "DESC" : "PASSWORD NOT GIVEN"}');
die('{"RESULT":"ERROR", "DESC" : "INVALID USERNAME/PWD"}');
die('{"RESULT":"SUCCESS", "DESC" : "$escapedUsername"}'); // can also use json_encode($result) here.:
这些只是我的建议。我假设mysql不会给你带来任何问题。:-)
发布于 2011-01-04 10:48:42
if ($userName or $userPassword = null)应该是
if (($userName == null) or ($userPassword == null))但是,我怀疑您实际上并不想检查这些值是否为null。假设您从输入字段填充这些变量,则空文本字段不是null;它是一个空字符串。您可以执行!empty($userName)来检查空文本域。
如果你想在单个条件中检查两个变量,你必须分别写出每个检查- ($userName and $userPassword != null)不会以你期望的方式工作,它应该是($userName != NULL and $userPassword != null)。
此外,当您检查一个变量是否等于某个值时,您必须使用==运算符。否则,您会将变量赋给该值,这几乎不是您想要做的事情。
https://stackoverflow.com/questions/4590203
复制相似问题