2016-04-14 11 views
-2

Dies ist file1.php:PHP Suche mit mehreren Treffern

<?php 
// Start the session 
session_start(); 
?> 
<?php 
$path_to_check = ''; 
$needle = $_POST['query']; 

foreach(glob($path_to_check . '*.xml') as $filename) 
{ 
    foreach(file($filename)as $fl) 
    { 
    if(strpos($fl, $needle)!==false) 
    { 
     $_SESSION["hit"] = $filename; 
    } 
    } 
} 
header('Location: file2.php'); 
?> 

Die Suche funktioniert und den Namen der Datei zurückkehrt, wo Suchbegriff als eine Variable $ _SESSION gefunden wird [ „Hit“] = $ Dateiname;

Wenn das Suchwort jedoch in mehreren Dateien gefunden wird, funktioniert es nicht. Dann müsste ich zu einer anderen Seite file1b.php (oder file1b.html) gehen, wo die verschiedenen Dateien aufgelistet werden. Dann von dort aus eine Wahl zu file2.php zu bekommen.

Wie könnte es getan werden?

+0

Sie können ein Array in Sitzung speichern. Erstellen Sie einfach ein leeres Array auf $ _SESSION ["hit"] und drücken Sie jeden Treffer auf dieses Array :) – Luke

+0

Verwenden Sie ein Array und durchlaufen Sie es in der nächsten Datei: '$ _SESSION [" hit "] [] = $ filename;' – AbraCadaver

Antwort

0

Machen Sie $_SESSION['hit'] ein Array aller Dateinamen mit einer Übereinstimmung.

$_SESSION['hit'] = array(); 
foreach(glob($path_to_check . '*.xml') as $filename) 
{ 
    foreach(file($filename)as $fl) 
    { 
     if(strpos($fl, $needle)!==false) 
     { 
      $_SESSION["hit"][] = $filename; 
      break; 
     } 
    } 
} 

Sie können die Dateinamen dann mit einer einfachen Schleife drucken.

foreach ($_SESSION['hit'] as $filename) { 
    echo $filename . "<br>"; 
} 
+0

Ich würde hinzufügen, dass seine Overkill durch alle Zeilen der Datei durchlaufen. Einfach 'strpos' auf' file_get_contents' vielleicht. – AbraCadaver

+0

Guter Punkt. Ich habe 'Pause' benutzt, damit es aufhört zu suchen, sobald es eine passende Linie findet. Die optimale Methode wäre 'while ($ f1 = fgets ($ fp))', damit Sie nicht zuerst die gesamte Datei in den Speicher schreiben müssen. – Barmar

+0

Wenn ich 'echo $ _SESSION ["hit"] [];' Am Ende gibt es nur einen Dateinamen zurück - nicht alle Dateinamen - obwohl das Suchwort in mehr als einer Datei vorkommt. Ich habe auch 'echo $ array();' aber es gab nichts. –