Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php检查txt文件中的匹配项_Php - Fatal编程技术网

php检查txt文件中的匹配项

php检查txt文件中的匹配项,php,Php,嗨,我正在创建一个简单的登录系统。我知道我这样做是完全不安全的,但它只是为了学习的目的,因为我是新的php。我在验证方面遇到了问题,现在它没有报告txt文件中是否存在用户名或密码。我还将使用会话(未完全实现)来跟踪用户是否登录 <?php session_start(); // session if(isset($_POST['register'])) // Register USER { $user = $_POS

嗨,我正在创建一个简单的登录系统。我知道我这样做是完全不安全的,但它只是为了学习的目的,因为我是新的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);
    }
这就是我需要帮助的地方

      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
}

    ?>
file\u get\u contents()
采用文件名,而不是文件指针,因此您应该使用
file\u get\u contents('file.txt')
并摆脱
fopen
调用

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

但是,您可能需要查看
文件()
,它可能对您有用:

编辑:

你的逻辑也有问题

作为一项单独的操作,您首先检查用户名,然后检查密码。这将使用任何用户的密码匹配任何用户。假设用户alice的密码为“foo”,bob的密码为“bar”,按照当前逻辑,alice可以使用“foo”或“bar”作为密码登录

因此,您实际上要查找的是一个字符串,它是用户名和密码的串联,如文件中所示(例如,
“alice foo”.PHP_EOL
):

这里需要
PHP\u EOL
的原因是,这是您用来标记记录结尾的内容。如果不将其放入搜索字符串中,则将匹配真实密码的任何子字符串,包括空密码。(该文件包含文本
“alice foo”.PHP_EOL
,它包含文本
“alice”
,但它不包含文本
“alice”.PHP_EOL
)。

文件获取内容()
采用文件名,而不是文件指针,因此应该使用
文件获取内容('file.txt'))
并摆脱
fopen
呼叫

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

但是,您可能需要查看
文件()
,它可能对您有用:

编辑:

你的逻辑也有问题

作为一项单独的操作,您首先检查用户名,然后检查密码。这将使用任何用户的密码匹配任何用户。假设用户alice的密码为“foo”,bob的密码为“bar”,按照当前逻辑,alice可以使用“foo”或“bar”作为密码登录

因此,您实际上要查找的是一个字符串,它是用户名和密码的串联,如文件中所示(例如,
“alice foo”.PHP_EOL
):

这里需要
PHP\u EOL
的原因是,这是您用来标记记录结尾的内容。如果不将其放入搜索字符串中,则将匹配真实密码的任何子字符串,包括空密码。(该文件包含文本
“alice foo”.PHP_EOL
,它包含文本
“alice”
,但不包含文本
“alice”.PHP_EOL
)。

问题在于:

$fp = fopen ("file.txt", "r"); // read from file
$file = file_get_contents($fp);
使用
fopen
可以逐行读取文件,使用
file\u get\u contents
可以通过将文件名指定为参数而不是文件句柄,将整个文件内容作为字符串获取

你把两者都弄混了。

问题在于:

$fp = fopen ("file.txt", "r"); // read from file
$file = file_get_contents($fp);
使用
fopen
可以逐行读取文件,使用
file\u get\u contents
可以通过将文件名指定为参数而不是文件句柄,将整个文件内容作为字符串获取


你把两者都弄混了。

既然你在学习,我就不给你代码,但可以给你逻辑 通过“\n”爆炸 然后在空间中分解结果数组值

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


仍然有任何疑问请随时提问

因为您正在学习,我不会给您代码,但可以给您逻辑 通过“\n”爆炸 然后在空间中分解结果数组值

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


仍然有任何疑问请随意询问

引号内的php变量将充当唯一的字符串 $\会话['username']=“$user”;
像这样使用$\u会话['username']=$user

引号内的php变量的行为将类似于字符串 $\会话['username']=“$user”;
像这样使用$\u会话['username']=$user

永远不要将密码存储在纯文本或可通过文档根访问的文本文件中!永远不要将密码存储在纯文本或可通过文档根访问的文本文件中!我已经根据你的建议更新了代码。验证仍然不起作用。如果用户名或密码不正确,请不要报告,感谢帮助。也许我需要拆分字符串($results=explode(“,$file));然后检查0和1是否等于用户名和密码。我已根据您的建议更新了代码。验证仍不起作用。感谢帮助,直到不报告用户名或密码是否不正确为止。可能我需要拆分字符串($results=explode(“,$file));然后检查0和1是否等于用户名和密码。感谢您清除。我已更新了代码,但仍然存在相同的问题。感谢您清除。我已更新了代码,但仍然存在相同的问题。如果遇到问题,我将尝试并向您报告=)这看起来正确吗$result=explode(“\n”,$file);foreach($result as$on)
$fp = fopen ("file.txt", "r"); // read from file
$file = file_get_contents($fp);