php检查txt文件中的匹配项

时间:2013-03-01 09:03:30

标签: php

您好我正在创建一个简单的登录系统。我知道我做的方式是完全不安全的,但它只是为了学习的目的,因为我是新的PHP。我在验证时遇到问题,现在它没有报告txt文件中是否存在用户名或密码。我还将使用会话(未完全实现)来跟踪用户是否登录。

         <?php 
      session_start(); // session


       if(isset($_POST['register'])) //  Register USER
    {
      $user  = $_POST['username'];
      $password=$_POST['password'].PHP_EOL;
      $fh = fopen("file.txt","a+");
      fwrite($fh,$user." ".$password); //write to txtfile
      fclose($fh);
    }

txt文件中的输出如下所示:

      user1 password1
      user2 password2

这是我需要帮助的地方

      if(isset($_POST['Login']))
      {
      $_SESSION['username']=$user; 
  $_SESSION['password']=$password;

  $file = file_get_contents("file.txt");



 if (strpos($file, "$user $password".PHP_EOL) !== false) 
  {
     // go to login page
  }
  else 
{ 
     //ERROR
}

    ?>

4 个答案:

答案 0 :(得分:3)

file_get_contents()采用文件名,而不是文件指针,因此您应该使用file_get_contents('file.txt')并删除fopen调用。

http://php.net/manual/en/function.file-get-contents.php

然后,$file的值是一个字符串,其中包含文件的所有内容作为单个字符串。因此,您可以使用普通的字符串操作,而不需要任何feof内容。

但是你可能想看看file(),它可能对你有用:

http://php.net/manual/en/function.file.php

编辑:

您的逻辑也存在问题。

您首先检查用户名,然后将密码作为单独的操作。这会将任何用户与任何用户的密码相匹配。假设我们的用户使用密码“foo”,并使用密码“bar”进行操作,以及当前逻辑,alice将能够以“foo”或“bar”作为密码登录。

所以你实际需要的是一个字符串,它是用户名和密码的串联,因为它在文件中找到(例如"alice foo".PHP_EOL):

if (strpos($file, "$user $password".PHP_EOL) !== false) {
    // go to login page
} else {
    // error
}

您需要PHP_EOL的原因是,这是您用来标记记录结尾的内容。如果您没有将它放在搜索字符串中,那么您将匹配真实密码的任何子字符串,包括空密码。 (该文件包含文字"alice foo".PHP_EOL,其中包含文字"alice ",但不包含文字"alice ".PHP_EOL。)

答案 1 :(得分:1)

问题在于:

$fp = fopen ("file.txt", "r"); // read from file
$file = file_get_contents($fp);

使用fopen,您可以逐行读取文件,并使用file_get_contents通过将文件名指定为参数而不是文件句柄,将整个文件内容作为字符串。

你们两个都搞混了。

答案 2 :(得分:1)

引号内的php变量只会像字符串一样  $ _SESSION [ '用户名'] = “$用户”; 像这样使用$ _SESSION ['username'] = $ user;

答案 3 :(得分:0)

因为你正在学习,我不会给你代码,但可以给你逻辑 通过“\ n”爆炸 然后通过空格

爆炸结果数组值

检查数组值0和1是否等于用户名和密码,如果相同则成功

仍有任何疑问可随意提问