我正在尝试使用php来验证用户登录信息。用户信息以格式名称:密码保存在文本文件中。如果文本文件中的姓氏与传递的名称和密码匹配,则我的代码返回true。但是,如果传递的名称和密码组合包含在文本文件的中间,则代码返回false。我是php新手,java是我的主要语言。
<?php
$users = file("users.txt");
#this line is just here for testing reasons
echo check_user("isabel", "washington12", $users);
function check_user($name, $password, $users) {
$users_size = count($users);
for($i = 0; $i < $users_size; $i++) {
$curr_user = explode(":", $users[$i]);
if($curr_user[0] == $name && $curr_user[1] == $password) {
return TRUE;
}
}
return FAlSE;
}
?>
示例文本文件
bob:firework
krista:blueheart
jason:hatcap
isabel:washington12
andrew:chalkboard
答案 0 :(得分:0)
文件中的每一行都有一个换行符。 file
默认情况下不会删除换行符。您必须trim
与之比较的数据:
<?php
$users = file("users.txt");
#this line is just here for testing reasons
echo check_user("isabel", "washington12", $users);
function check_user($name, $password, $users) {
$users_size = count($users);
for($i = 0; $i < $users_size; $i++) {
$curr_user = explode(":", $users[$i]);
if(trim($curr_user[0]) == $name && trim($curr_user[1]) == $password) {
return TRUE;
}
}
return FALSE;
}
?>
或者,您可以使用FILE_IGNORE_NEW_LINES
标记而不是file
trim
答案 1 :(得分:0)
为简单起见,您可以使用:
$valid = (rtrim($curr_user[0]) == trim($name)) && (rtrim($curr_user[1]) == trim($password));
return $valid;
您是否有代码打开文件并使用文件句柄逐行读取?您可以找到here的示例。