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(), если вы не хотите, чтобы конец строки присутствовал.

Другие вопросы по тегам