我有麻烦使用PHP来验证存储在文件中的用户名和密码


I am having trouble using PHP to verify the Username and Password that are stored in a file

我试图验证用户输入的用户名和密码存储在文件中,而不是数据库中。我只写了几个用户名和密码,并把它们放在一个名为testPass的文件中。

我的代码似乎工作,如果我测试它显示的用户名或密码的值,我得到了使用爆炸函数的文件。然而,每当我试图检查用户在登录页面上输入的用户名和密码与存储在文件中的用户名和密码时,它就会给我带来麻烦。我尝试使用echo语句来验证它,它给了我什么似乎是完全相同的字符串,但它不执行"If"语句,检查它们是否相等。抱歉,如果有一个愚蠢或令人困惑的问题,我一直在这个工作一段时间,我只知道一点PHP。我会把代码贴在下面,谢谢你的帮助。

<?php
  $userName=$_POST['userName'];
  $userPass=$_POST['userPass'];
  $correctPass=0;
  $file=fopen("testPass.fil","r");
  $record=fgets($file);
  while(!feof($file))
  {
    $fileData=explode("'t",$record);
    //echo "$fileData[0] <br> $userName <br><br> $fileData[1] <br> $userPass<br><br>";
    //this line was used to make sure that the username entered and my stored username were the same.
    if($userName==$fileData[0])
    {
      if($userPass==$fileData[1])
      {       
        $correctPass=1;
        break;
      }
    }
    $record=fgets($file);
  }
if($correctPass == 1)
{
  echo "UserName and Password are present";  
}
else
{
  echo "The UserName or Password you entered is incorrect.";
}
fclose($file);

?>

您可能需要删除用户名和密码中的空白。

正如Sinan所说,您可能需要在比较字符串(例如使用trim()函数)之前从字符串中去掉空白。您可能还会发现通过strtolower()同时运行源用户名字符串和比较用户名字符串以使登录检查不区分大小写非常有用。

嗯,创建一个基本的ini文件,然后在上面调用parse_ini_file,这会少很多麻烦。

fgets返回整行,包括末尾的换行符,您没有删除它,因此您正在比较不相等的"password""password'n"

您可以通过每次调用fgets:

时用rtrim()剥离换行符来修复它。
$record = rtrim(fgets($file));

如果你想在密码中允许空格,你也可以指定它只删除回车和换行:

$record = rtrim(fgets($file, "'r'n"));