2013-11-23 25 views
0

我在嘗試任何複雜的活動之前正在練習一些PHP編碼。我的目標是驗證在HTML/JavaScript表單中輸入的單詞。我想用PHP打開並解析一個文本文件,看看在表單上輸入的單詞是否與該文本文件中的單詞匹配。到目前爲止,我得到的唯一回報表明該單詞不在列表中,所以我不確定代碼是否在比較兩個字符串。 我的HTML/JS代碼:使用PHP驗證文本文件中的單詞

<!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> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
<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檢查器的任何語法錯誤,一切看起來不錯。它只是不像我想要的那樣運作。有任何想法嗎?

+1

一分貝會百萬次更容易 – 2013-11-23 21:57:33

+0

「沒有像我想要的功能」 - 當我們不確定你想要什麼時,並不真正幫助我們理解發生了什麼問題。也許你可以更具體一些,並提供例子。 – symcbean

回答

1

您的邏輯被破壞,因爲您只檢查文件中最後一個字符串的結果。您希望將支票移到實際的循環中,以便比較每行的值,而不是在循環完成後比較$ a的值。

$found = false; 

while (!feof($fh)) 
{ 
    $line = trim(fgets($fh)); 

    if ($line == $s) 
    { 
     $found = true; 
     break; 
    } 

} 

..然後檢查循環搜索文件後發現的$值。一旦找到匹配,這也將結束循環。

我也想指出這是(非常)低效的,但作爲一種學習練習,這一切都很好。