使用ForEach语句将值存储在数组内部

时间:2019-04-17 13:10:36

标签: php arrays foreach

尝试在每个语句中使用a将值存储在数组内部时遇到问题。因此,我的程序的目的是将文本文件的内容存储在数组中,这样我就可以检查用户输入的内容是否与文本文件中存储的内容相同。问题在于,将数组中的值与用户的输入进行比较时,程序无法检测用户的输入是否与数组中存储的内容相同。我对这种情况的判断是,当使用for each语句将文本文件的内容存储到数组中时,将在每个值之间添加空格。 (我的判断可能是错误的)。

主要代码:

<html>
<body>
<form name="LoginForm" method="post">
    <label>Username</label>
    <input type="text" name="Username"/>

    <label>Password </label>
    <input type="Password" name="Password"  />

    <input type="submit"/>
</form>

<?php
$Username = $_POST["Username"];
$Password = $_POST["Password"];

$CollectedDetails = file('UsernamesandPasswords.txt');

$Array = array();

foreach($CollectedDetails as $EachValue)
{
$Array[] = $EachValue;
}

for($Loop = 0; $Loop < 6; $Loop+=2)
{
if($Username == $Array[$Loop] && $Password == $Array[$Loop+1])
{
    echo "Access Permitted";
}
else 
{
    echo "Access Denied";
}
}
?>
</body>
</html>

内容存储在文本文件内部 戴夫 密码 露西 密码2 克里斯 密码3

下面是上面程序的有效更新版本,没有添加文本文件。 (我决定添加它以防万一)。

<html>
<body>
<form name="LoginForm" method="post">
    <label>Username</label>
    <input type="text" name="Username"/>

    <label>Password </label>
    <input type="Password" name="Password"  />

    <input type="submit"/>

</form>

<?php
$Username = $_POST["Username"];
$Password = $_POST["Password"];

$Array = array(Dave,Password,Lucy,Password2,Chris,Password3);

$Successful = false;

for($Loop = 0; $Loop < 6; $Loop+=2)
{
if($Username == $Array[$Loop] && $Password == $Array[$Loop+1])
{
    echo "Access Permitted";
    $Successful = true;
}
else if ($Successful == false)
{
    echo "Access Denied";
}   
}
?>
</body>
</html>

请注意,两个程序都应产生相同的结果。有没有可能解决此问题的方法,我似乎无法解决问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的问题是file给您的值附加了换行符。来自manual

  

注意:
     除非使用FILE_IGNORE_NEW_LINES,否则结果数组中的每一行都将包含行尾。

要解决此问题,您可以在通话中加入FILE_IGNORE_NEW_LINES选项,即

$CollectedDetails = file('UsernamesandPasswords.txt', FILE_IGNORE_NEW_LINES);

或者您可以trim比较之前的值,即

$Array[] = trim($EachValue);

如果文件中还有其他意外的空白,使用trim可能更安全。