将关联数组中的代码与硬编码值进行比较


comparing code in Associative Arrays to hard coded values

我有一个文本文件,其中包含以下值,将用作用户名和密码

根=>用户
根=
>密码鼓励性=>月光
帮助我=>

validateUser.php文件中validateUser函数的代码

function validateUser($username, $password)
{
    $filename = 'userCreds.txt';
    $file = fopen($filename, "r");
    if($file==false)
    {
        echo"Error opening file";
        exit();
    }
    $i=0;
    static $Credentials = array();
    foreach (file($filename) as $line)
    {
        list($key,$value) = explode("=>",$line,2) + array(NULL,NULL);
        if($value !== NULL)
        {
            $Credentials[$key] = $value;
        }
    }
    print_r($Credentials);
    echo "<br>";
    //static $Credentials = array("root"=>"user","rtam"=>"password","q"=>"continuum");
    if(array_key_exists($username, $Credentials))
    {
        echo "$Credentials[$username] <br>"; 
        echo "$password <br>";
        if($Credentials[$username] == $password)
        {
            return TRUE;
        }
        else
        {
            echo $Credentials[$username]," is not equal to ",$password,"<br>";
            return FALSE;
        }
    }
    else return FALSE;
}
主文件的代码:
<?php
include_once "validateUser.php";
$username = "root";
$password = "user";
if(validateUser($username,$password))
{
    echo "<h2>Welcome! <br></h2>";
}
else 
{
    echo "Try again <br>";
}
?>

$username和password的值从一开始就硬编码,用于测试。

我遇到的问题是,当我从文本文件中比较用户名和密码并比较两者时,它们不匹配。

即使我打印出两个值,即$password和$Credentials[$username],我在屏幕上得到相等的值,但if语句不能识别它使用if($Credentials[$username] == $password)

我做错了什么?

请尝试修剪validateuser函数中的值-这不是第一次'n或't或简单的空格让我出错。

if($value !== NULL)
    {
        $Credentials[trim($key)] = trim($value);
    }

如果不是这种情况,那么也许你可以使用正则表达式从用户名和密码中删除任何非字母数字字符。

$key = preg_replace('/[^('x20-'x7F)]*/','', $key);
$value = preg_replace('/[^('x20-'x7F)]*/','', $value);