我在使用PHP验证存储在文件中的用户名和密码时遇到问题

时间:2011-07-12 21:59:09

标签: php passwords username

我正在尝试验证用户输入的用户名和密码是否存储在文件中,而不是数据库中。我只编写了几个用户名和密码,并将它们放在名为testPass.fil的文件中,并用tab(\ t)分隔用户名和密码。

如果我测试它以显示我使用explode函数从文件中获取的用户名或密码的值,我的代码似乎有效。但是,每当我尝试检查用户在登录页面上输入的用户名和密码与存储在文件中的用户名和密码时,就会给我带来麻烦。我尝试使用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);

&GT;

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

嗯,创建一个基本的ini文件,只需在其上调用parse_ini_file就不那么麻烦了。

答案 3 :(得分:0)

fgets会返回整行,包括最后一行的换行符,您不会将其删除,因此您要比较不相等的"password""password\n"

每次拨打rtrim()时,您都可以通过使用fgets删除换行符来解决此问题:

$record = rtrim(fgets($file));

如果要在密码中允许空格,您还可以指定它只删除回车符和新行:

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