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

时间:2014-07-11 13:53:12

标签: php

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

根=>用户
根=>密码
布拉布拉=>月光
帮助=>我

文件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 )。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

请尝试修改validateuser函数中的值 - 这不是第一次\ n或\ t或\ t或简单空间引起我的注意。

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

如果情况并非如此,那么您可以使用正则表达式从用户名和密码中删除任何非字母数字字符。

例如

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