PHP - Сравнение значения формы со значениями в массиве
Я пытаюсь написать код, который сравнивает значения из текстового документа со значением, которое было отправлено из формы.
Пока у меня есть это, но я абсолютно уверен, что делаю что-то далеко.
Заранее спасибо за помощь!
<form method="POST" action="file.php">
<p>
<br /><input type="text" name="name" ><br />
</p>
<p><input type="submit" value="Check" /></p>
</form>
<?php
if (isset($_POST['name'])) {
$name = $_POST['name'];
/*The text document contains these written names:
Michael
Terry
John
Phillip*/
$lines = file('names.txt');
$names_array = ($lines);
if (in_array($name, $names_array)) {
echo "exists";
} else {
echo 'none';
}
}
?>
ОБНОВЛЕНИЕ: Исправлено и теперь работает нормально!
3 ответа
/*The text document contains these written names: Michael Terry John Phillip*/ $lines = file('data.txt'); //Lets say we got an array with these values //$lines =array('Michael','John','Terry','Phillip'); $i=0; foreach($lines as $line) { $lines[$i] =trim($line); $i++; } if (in_array($name, $lines)) { echo "exists"; } else { echo 'none'; } } ?
Blockquote
data.txt
Майкл Терри Джон Филлип
В data.txt есть пробелы, поэтому мы используем trim() для его удаления.
Проблема с вашим file('names.txt')
функция. Хотя это возвращает массив с каждой строкой в отдельном ключе, он также включает в себя символ новой строки в той же строке.
Итак, ваш массив на самом деле содержит:
$lines[0] = "Michael\n";
$lines[1] = "Terry\n";
$lines[2] = "John\n";
$lines[3] = "Phillip\n";
Чтобы этого не случилось, используйте file('names.txt', FILE_IGNORE_NEW_LINES)
$lines[0] = "Michael";
$lines[1] = "Terry";
$lines[2] = "John";
$lines[3] = "Phillip";
Теперь ваше имя должно совпадать.
Кроме того, почему вы используете следующее?
$lines = file('names.txt');
$names_array = ($lines);
//simply use the following.
$names_array = file('names.txt', FILE_IGNORE_NEW_LINES);
Прочитайте документ о file
: http://www.php.net/manual/en/function.file.php
Замечания:
Каждая строка в результирующем массиве будет включать конец строки, если только не используется FILE_IGNORE_NEW_LINES, поэтому вам все равно нужно использовать rtrim(), если вы не хотите, чтобы конец строки присутствовал.