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