我有一个用户输入文件名的表单。它遍历所有成功查找目录以匹配用户搜索输入到相关pdf文件的目录。
当它找到正确的匹配时,它会匹配'并打破了foreach循环。但是,它也正确地说明了“不匹配”。对于在匹配正确文件之前找到的所有文件。所以我得到了一长串“不匹配”的列表。然后是匹配'。
如果我回应" "而不是匹配'它工作正常,并没有显示任何东西,但我只想告诉用户他们输入的内容不匹配。我确信我忽略了一些基本的东西,但是对于如何实现这一目标,我们将非常感激。
这是我的代码。
<?php
if (isset($_POST['submit']) && !empty($_POST['target'])) {
$searchInput = $_POST['target'];
$it = new RecursiveDirectoryIterator("/myDirectory/");
foreach(new RecursiveIteratorIterator($it) as $file) {
$path_info = pathinfo($file);
$extension = $path_info['extension'];
if (strcmp("pdf", $extension) == 0) {
$lowerInput = strtolower($searchInput);
if (!empty($path_info)) {
$string = strtolower($path_info['filename']);
if(preg_match("~\b" . $lowerInput. "\b~", $string)) {
echo "it matches <br>";
break;
} else {
if (!preg_match("~\b" . $lowerInput . "\b~", $string)) {
echo "not a match <br>";
}
}
}
}
} //end foreach
} // end if submit pressed
?>
<html>
<head>
</head>
<body>
<h3>Search Files</h3>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="searchform">
Type the File You Require:<br><br>
<input id="target" type="text" name="target" required >
<br>
<input id="submit" type="submit" name="submit" value="Search" >
</form>
</body>
</html>
答案 0 :(得分:0)
我遗漏了一些代码,只显示了重要的部分。基本上只需设置一个变量,并在foreach
完成时回显一次。
$msg="Not a match <br>" ;
foreach(new RecursiveIteratorIterator($it) as $file) {
...
if(preg_match("~\b" . $lowerInput. "\b~", $string)) {
$msg = "it matches <br>" ;
break ;
}
// no need for an else clause, "not a match" is default finding
}// end of foreach
echo $msg ;