Ich habe ein Formular, in das der Benutzer einen Dateinamen eingibt. Es durchläuft alle Verzeichnisse, die erfolgreich suchen, um die Sucheingabe des Benutzers an die relevante PDF-Datei anzupassen.Ich möchte nicht alle RecursiveDirectoryIterator-Dateien für Benutzer anzeigen
Wenn die Übereinstimmung gefunden wird, stimmt sie korrekt mit der Übereinstimmung überein und bricht aus der foreach-Schleife aus. Es gibt jedoch auch korrekt "keine Übereinstimmung" für alle gefundenen Dateien an, bevor es mit der richtigen Datei übereinstimmt. Also bekomme ich eine lange Liste von "kein Match" gefolgt von "es passt".
Wenn ich "" anstelle von "keine Übereinstimmung" zurückgebe, funktioniert es gut und zeigt nichts an, aber ich möchte dem Benutzer nur einmal sagen, dass das, was sie eingegeben haben, nicht übereinstimmt. Ich bin mir sicher, dass ich etwas Grundlegendes übersehen habe, aber jede Hilfe würde sehr geschätzt werden, um dies zu erreichen.
Hier ist der Code, den ich habe.
<?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>
Danke funktioniert perfekt. Es macht durchaus Sinn, die else-Klausel zu entfernen. Danke noch einmal!!! – Harlin