比较txt文件中的两行字符串

时间:2012-12-11 20:13:50

标签: php

我有一个txt文件,其中包含一些信息,包括其他内容,名称和密码。从表单提交我需要检查密码是否与名称匹配,我真的很喜欢txt文件,但这有效:

    function checkPassword($password, $username){
        $userinfo = file_get_contents(USER_INFO); 
        $uniqueinfo = explode("-", $userinfo);
        if (in_array($password, $uniqueinfo) && in_array($username, $uniqueinfo)) {
            return true;
        } else {
            return false;
        }
    }

现在,您可能已经猜到只要找到有效的用户名和密码,即使它们不属于同一帐户,也会返回true。因此,如果您从其他帐户输入密码,则可以返回true。不好。所以,我试过了:

    function checkPassword($password, $username){
        $userinfo = file_get_contents(USER_INFO); 
        foreach($userinfo as $uniqueinfo) {
            $uniqueinfo = explode("-", $uniqueinfo);
            if (in_array($password, $uniqueinfo) && in_array($username, $uniqueinfo)) {
                return true;
            } else {
                return false;
            }
        }
    }

但即使使用有效的凭据,这也只会返回false。不知道我在哪里错了所以任何帮助将不胜感激。感谢。

3 个答案:

答案 0 :(得分:1)

问题在于,除非密码和用户名与文件中的第一项匹配,否则您的函数将返回false。尝试类似:

function checkPassword($password, $username){
        $userinfo = file_get_contents(USER_INFO);
        if(!$userinfo){
            echo "Failed to open file!";
            return false;
        }
        $bits = explode('-',$userInfo);
        for($x = 0; $x < count($bits);$x+=2){
            $testPass = $bits[$x];
            $testUser = $bits[$x+1];
            if ($username == $testUser && $password == $testPass) {
                return true;
            }
        }
        return false;
    }

如果文件中没有项目匹配,则只返回false。

答案 1 :(得分:1)

A。 file_get_contents返回字符串而不是数组使用file而不是

  $userinfo = file_get_contents(USER_INFO); 
                      ^--------------------- string not array 

因此foreach($userinfo as $uniqueinfo) {也不起作用

B。使用checkPassword($username,$password)而不是checkPassword($ password,$ username)以获得清晰度

C。在验证前使用trim删除空格

修改功能

function checkPassword($username,$password) {
    $userinfo = file(USER_INFO);
    foreach ( $userinfo as $uniqueinfo ) {
        list($user, $pass) = array_map("trim",explode("-", $uniqueinfo));
        if ($username == $user && $password == $pass) {
            return true;
        }
    }
    return false;
}

答案 2 :(得分:0)

好吧,如果你喜欢你的代码,只需添加一个标志并根据它返回。

function checkPassword($password, $username){
    $userinfo = file_get_contents(USER_INFO); 
    $lines = explode("\n", $userinfo);
    foreach($lines as $uniqueinfo) {
        if (strstr($uniqueinfo, $password) && strstr($uniqueinfo, $username)) {
            return true;
        }
    }
    return false;
}