您好,我创建了一个简单的登录系统。我知道这样做是完全不安全的,但这只是为了学习的目的,因为我是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
}
?>发布于 2013-03-01 17:06:21
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
编辑:
你的逻辑也有问题。
您将首先检查用户名,然后再检查密码,这是一个单独的操作。这将使任何用户与任何用户的密码匹配。假设用户alice的密码为"foo",bob的密码为"bar",按照当前的逻辑,alice将能够使用"foo“或"bar”作为密码登录。
因此,您实际上要查找的是一个字符串,它是用户名和密码的串联,就像在文件中找到的那样(例如"alice foo".PHP_EOL):
if (strpos($file, "$user $password".PHP_EOL) !== false) {
// go to login page
} else {
// error
}您需要其中的PHP_EOL的原因是,这是您用来标记记录结尾的mark。如果您没有将其放入搜索字符串中,那么您将匹配实际密码的任何子字符串,包括空密码。(该文件包含文本"alice foo".PHP_EOL,还包含文本"alice ",但不包含文本"alice ".PHP_EOL)。
发布于 2013-03-01 17:06:52
问题出在这里:
$fp = fopen ("file.txt", "r"); // read from file
$file = file_get_contents($fp);使用fopen,您可以逐行读取文件;使用file_get_contents,您可以通过将文件名指定为参数而不是文件句柄来获取字符串形式的整个文件内容。
你把两者都搞混了。
发布于 2013-03-01 17:52:35
引号内的php变量将只表现为字符串$_SESSION‘’username‘=“$user”;像这样使用$_SESSION’‘username’=$user;
https://stackoverflow.com/questions/15154011
复制相似问题