0

我正在尝试编写一个代码,将文本文档中的值与表单中发布的值进行比较。

到目前为止,我已经得到了这个,但我绝对肯定我正在做一些事情。

在此先感谢您的帮助!

<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';
        }
}
?>

更新:已修复,现在工作正常!

4

3 回答 3

2

问题出在你的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); 
于 2013-05-16T06:55:34.237 回答
0

阅读文档filehttp ://www.php.net/manual/en/function.file.php

笔记:

结果数组中的每一行都将包含行尾,除非使用 FILE_IGNORE_NEW_LINES,因此如果您不希望出现行尾,您仍然需要使用 rtrim()。

于 2013-05-16T06:54:22.463 回答
-1



/*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';
    } } ?

块引用

数据.txt

迈克尔·特里约翰·菲利普

data.txt 有空格,所以我们使用 trim() 删除它。

于 2013-05-16T07:04:56.727 回答