我正在尝试编写一个代码,用于将文本文档中的值与从表单中发布的值进行比较。
到目前为止,我已经有了这个,但我绝对肯定我正在做点什么。
提前感谢您的帮助!
<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';
}
}
?>
更新:已修复,现在工作正常!
答案 0 :(得分: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);
答案 1 :(得分:0)
阅读有关file
:http://www.php.net/manual/en/function.file.php
注意:
结果数组中的每一行都包含行结尾,除非使用了FILE_IGNORE_NEW_LINES,因此如果您不希望行结束,则仍需要使用rtrim()。
答案 2 :(得分:-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'; } } ?
块引用
data.txt中
迈克尔特里约翰菲利普data.txt包含空格,因此我们使用trim()将其删除。