在尝试任何复杂的实时之前,我正在练习一些PHP编码。我的目标是验证在HTML / JavaScript表单上输入的单词。我想使用PHP打开并解析文本文件,看看表单上输入的单词是否与此文本文件中的单词匹配。到目前为止,我得到的唯一回报表明这个词不在列表中,所以我不确定代码是在比较这两个字符串。 我的HTML / JS代码是:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Using this html document</title>
<script language="JavaScript">
function trim(s) {
while (s.charAt(0) == ' ')
s = s.substring(1);
while (s.charAt(s.length - 1)== ' ')
s = s.substring(0, s.length - 2);
return s;
}
function check(lname)
{
var x = document.getElementById(lname);
var s = new String(x.value);
s = trim(s);
if(s == "")
{
alert("Please enter a word");
javascript:history.go(0);
}
else
x.value = s;
}
</script>
</head>
<body>
<form action="http://localhost/Exercise13.php" method="post">
<label for="fname">Name: </label>
<input type="text" name="lname" id="lname" size="20"><br><br>
<input type="submit" name="submit" id="submit" value=" Submit "onclick = "check ('lname');">
</form>
</body>
</html>
我的PHP代码是这样的:
<?php
$fh = fopen("a.txt","r")or die("Can't open file");
$s = $_POST["lname"];
while(!feof($fh))
{
$line = fgets($fh);
$a = trim($line);
}
if (strcmp($s,$a) == 0)
print ("<h1>" . $s . " is in the list</h1><br>");
fclose($fh);
print ("<h1>" . $s . " is not in the list</h1><br>");
?>
我的.txt文件只是一个随机单词列表,列表中有一些我试图通过修剪删除的字符。我已经使用PHP检查器检查了我的PHP的任何语法错误,一切看起来都不错。它只是没有像我想要的那样运作。有什么想法吗?
答案 0 :(得分:1)
您的逻辑已损坏,因为您只检查文件中最后一个字符串的结果。您需要将检查移动到实际循环中,以便比较每行的值,而不仅仅是循环结束后$ a的值。
$found = false;
while (!feof($fh))
{
$line = trim(fgets($fh));
if ($line == $s)
{
$found = true;
break;
}
}
..然后在循环搜索完文件后检查$ found的值。一旦找到匹配,这也将结束循环。
我还想指出这是(非常)低效的,但作为一项学习练习,这一切都很好。