Использование оператора ForEach для хранения значений внутри массива - PullRequest
0 голосов
/ 17 апреля 2019

У меня проблемы при попытке использовать для каждого оператора для хранения значений внутри массива.Поэтому цель моей программы - хранить содержимое текстового файла внутри массива, и таким образом я могу проверить, совпадает ли введенный пользователем контент с содержимым, хранящимся внутри текстового файла.Проблема заключается в том, что при сравнении значений в массиве с пользовательским вводом программа не может определить, совпадает ли пользовательский ввод с содержимым, хранящимся в массиве.Мой вердикт в отношении ситуации заключается в том, что при использовании оператора for для каждого из них для хранения содержимого текстового файла в массиве добавляется пространство между каждым значением.(Мой вердикт может быть неправильным).

Основной код:

<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>

Содержимое, хранящееся внутри текстового файла Dave Password Lucy Password2 Chris Password3

Ниже приведена рабочая обновленная версия вышеуказанной программы без добавления.текстового файла.(Я решил добавить его на случай, если это поможет).

<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 Ответ

1 голос
/ 17 апреля 2019

Ваша проблема в том, что file дает вам значения с присоединенными к ним символами новой строки.Из руководства :

Примечание:
Каждая строка в результирующем массиве будет содержать конец строки, если не используется FILE_IGNORE_NEW_LINES.

Чтобы обойти это, вы можете либо включить в свой вызов опцию FILE_IGNORE_NEW_LINES, например

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

, либо вы можете trim значения досравнение их, т.е.

$Array[] = trim($EachValue);

Использование trim может быть более безопасным, если в файле есть другие неожиданные пробелы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...