0

複雑なライブを試みる前に、いくつかの PHP コーディングを練習しています。私の目標は、HTML/JavaScript フォームに入力された単語を検証することです。PHP を使用してテキスト ファイルを開いて解析し、フォームに入力された単語がこのテキスト ファイルの単語と一致するかどうかを確認したいと考えています。これまでのところ、単語がリストにないことを示す唯一のリターンがあるため、コードが2つの文字列を比較しているとは確信していません。私の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>
&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の構文エラーをチェックしましたが、すべて問題ないようです。私が望むように機能していないだけです。何か案は?

4

1 に答える 1

1

ファイル内の最後の文字列の結果のみをチェックするため、ロジックが壊れています。チェックを実際のループに移動して、ループが終了した後の $a の値だけでなく、各行の値を比較するようにします。

$found = false;

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

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

}

.. ループがファイルを検索した後、$found の値を確認します。これも、一致が見つかるとすぐにループを終了します。

また、これは (非常に) 非効率的であると指摘したいと思いますが、学習演習としてはすべて良いことです。

于 2013-11-23T22:27:17.943 に答える