我有一堆密码和用户名存储在txt文件中,我需要检查匹配项。我知道这不是一种安全的方法,而是用于倾斜目的。
此代码将用户名和密码写入txt文件
if(isset($_POST['register'])) //
{
$user = $_POST['username'];
$password=$_POST['password'].PHP_EOL;
$fh = fopen("file.txt","a+");
fwrite($fh,$user." ".$password); //write to txtfile
fclose($fh);
}
这是我遇到问题的代码。
用户名和密码在结果
中存储如下 username1 passwords1 username2 password2 etc.
所以我需要检查result [0] = userinput是否存在,如果存在则检查result [1] = passwordInput等等。
if(isset($_POST['Logg']))
{
//$_SESSION['username']=$user;
//$_SESSION['password']=$password;
$file = file_get_contents("file.txt"); // Returns a string
$result = explode(" ",$file);
$boolC= false;
for($i=0; $i< count($result); $i++)
{
if($result[$i] === $user)
{
$boolC=true;
$i =$i+1;
if($boolC === true)
{
if($result[$i]===$password)
{
echo 'Password and Username Correct';
}
}
}
}
}
答案 0 :(得分:1)
在您继续尝试更正此代码之前,我强烈建议您远离将密码存储在纯文本文件中。这是你系统中一个巨大的安全漏洞。
我可以看到的另一个架构问题是,如果用户名或密码中包含空格,则代码将失败。您可能应该使用行跳转作为分隔符(\ n)。
答案 1 :(得分:1)
考虑在密码中有空格以及任何符号的可能性。也许你应该拆分换行符(“\ n”)。
if( $result[$i] === $user && $result[$i+1] === $password )
声明的第一部分必须适用于要评估的第二部分。 $ i变量永远不会改变
$file = "username1 passwords1 username2 password2";
$result = explode(" ",$file);
$user = "username1";
$password = "passwords1";
for($i=0; $i< count($result); $i++){
if($result[$i] === $user && $result[$i+1] === $password)
{
echo 'Password and Username Correct';
}
}
答案 2 :(得分:0)
我认为原帖的逻辑没有错。
您应该打印所有变量以检查它们是否保持正确的值。
“$ user”和“$ password”变量是全局的,因为它们在另一个if的括号内是不可知的,即在你检查$ _POST ['logg']的块中