我有一个包含登录名和密码(txt)的文件,文件的内容是
admin:1234
jack77:dan1el
从 login.php 页面我将数据发送到 login-request.php 并检查某行中是否有匹配项并将其显示在屏幕上,为此我使用循环,但循环仅检查第一行
$fss = fopen("users/users.txt","r");
while($a = fgets($fss)){
$x = explode(":", $a);
if(trim($_POST['login']) == trim($x[0]) && trim($_POST['password']) == trim($x[1])){
print_r($x);
}
else{
$a = fgets($fss);
}
}
删除 else,您的循环无论如何都会遍历所有行,并且在其中包含 else 的情况下,它会在找到并打印匹配之前跳过所有其他行。
PS:如果您无法在头脑中进行调试,请使用调试来研究程序的行为,以了解您编写的代码的行为。
fgets() 从文件中读取一行,读取下一个数据的指针象征性地移动到第二行,然后在循环结束时,您再次使用 fgets() 读取该行 - 此数据进入 void,因为之后循环再次开始,但文件中的指针已经在第 3 行。
每个 fgets() 读取将指针移动到下一行。
这是正确的代码: