Datenbank, HTML Suche in PHP verbinden

AH, das ist das gewünschte Resultat. Ich dachte das ist ein Beispiel der zu durchsuchenden Daten.

Dann mach mal ein Beispiel der zu durchsuchenden Daten und des Suchbegriffes, mit dem man das von dir gegebene Resultat erhalten soll
 
Also ich durchsuche mit folgenden Script Dateien di jeweils ein <h1> Titel enthalten..
PHP:
$eingabe = "Startseite"; // Erfolg in der Realität vom Nutzer
$directory = "./dateien/"; 
$handle = opendir($directory); 
$i=0;

while ($file_name = readdir ($handle))
{
    $file = $directory.$file_name;
    
    if (is_file($file))
    {
        $fd = fopen($file,"r");
        $content = fread($fd, filesize($file));
        fclose ($fd);
        // Titel aus der Datein hohlen
        preg_match('#<h1>.*?</h1>#', $content, $titel);
        // Prüfen ob das gesuchte Wort vorhanden ist
        if (strstr($content,$eingabe))
        {
            $array[$i]['title'] = strip_tags($titel[0]);
            $array[$i]['text'] = strip_tags($content);
            $array[$i]['pfad'] = 'http://localhost/test/'.$file_name;
            $i++;
        }
    }
}

In der Datei steht zb. folgendes:
HTML:
<h1>Startseite</h1>
<p>Dies ist eine dumme kleine Testseite.</p

Wenn und diesen Daten möchte eine eine Relevance zuorden.. nur ich weiß halt noch nicht wie.. am ende soll die Array so aussehen:
Code:
Array
(
    [0] => Array
        (
            [title] => Seite 1
            [text] => Ich diesem Text kommt das Wort Startseite vor ;)
            [pfad] => http://localhost/test/error_404.html
            [gewichtung] 2
        )

    [1] => Array
        (
            [title] => Startseite
            [text] => Hier komm das Wort nicht vor aber im Titel
            [pfad] => http://localhost/test/index.html
            [gewichtung] 10
        )

)
 
Der Anwender sucht in dem Beispiel Script nach Startseite doch in der Realität kann er suchen was er möchte..

Die Releervanz entsteht wie wir oben schon mal erähnt haben wie oft der Begriff vor kommt.. und halt WO er vorkommt. Also im Titel zb 5 "Punkte" (in sie sie jetzt einfach mal so) und für die Url zb. nur 0.5 oder sowas aber das ist natürlich noch einstellungssache =)
 
Wurde ich jetzt aufgegeben.. wenn ihr es immer noch nicht versteht dann versuche ich es nochmal zu erklären..
Oder habt ihr keine Idee?
 
Anhand Deines File Beispiels würde ich Zeile 1 und den Rest getrennt behandeln.

Und um die Punkte bestimmen zu können noch einen Vergleich einfügen.
Die Gewichtung dürfte ja dann 12 sein, wenn ein Treffer im Titel und im Text vorliegt.

Im Grunde würde ich verschiedene Arrays verwenden, für die verschiedenen Gewichtungen (Mögliche Punktzahlen)
so ist es beim Verbinden der arrays dann auch gleich nach Gewichtung sortiert.
 
Du lädst Dein Array voll, unabhängig vom Ergebnis.

Prüfe innerhalb der Schleife, ob das Wort im Titel vorkommt.
Prüfe innerhalb der Schleife, ob das Wort im Text vorkommt.

Vergleiche ob es im Titel und im Text vorkommt.

Beispiel:
PHP:
if (isset($Titel) AND isset($Text)) {
$Array12 = Inhalte
// 12 = Gewichtung, da Treffer im Titel und Text
} elseif (!isset($Titel) AND isset($Text)) {
$Array2 = Inhalte
// 2 = Gewichtung, da Treffer nur im Text
} ...
} else { 
// Trift gar nichts zu, dann brauchen wir das auch nicht 
}
Die Arrays benötigen natürlich noch nen Zähler ;)
Dann bräuchtest Du rein theoretisch auch nur den Link zum file im jeweiligen Array.
Es sei denn du willst, eine Textvorschau anzeigen.
Ist halt nicht ganz klar, was du genau Ausgeben möchtest.

Jetzt hast Du vür die jeweilige Gewichtung die Daten im jeweiligen Array.

Nun kannst Du entweder separat auf die Arrays zugreifen oder sie noch verbinden.
Wenn Du die Arrays von der größe abwärts verbindest, hast die auch automatisch sortiert.

Aber es führen mehrere Wege nach Rom.
 
Zuletzt bearbeitet:
Anhand Deines File Beispiels würde ich Zeile 1 und den Rest getrennt behandeln.

Und um die Punkte bestimmen zu können noch einen Vergleich einfügen.
Die Gewichtung dürfte ja dann 12 sein, wenn ein Treffer im Titel und im Text vorliegt.

Im Grunde würde ich verschiedene Arrays verwenden, für die verschiedenen Gewichtungen (Mögliche Punktzahlen)
so ist es beim Verbinden der arrays dann auch gleich nach Gewichtung sortiert.

Hi,

Ich habe das ganze jetzt so realisiert:

PHP:
<?php
$eingabe = "Startseite"; // Erfolg in der relität von Nutzer
$directory = "./dateien/"; 
$handle = opendir($directory); 
$i=0;

while ($file_name = readdir ($handle))
{
	$file = $directory.$file_name;
	
	if (is_file($file))
	{
		$fd = fopen($file,"r");
		$content = fread($fd, filesize($file));
		fclose ($fd);
		// Titel aus der Datein hohlen
		preg_match('#<h1>.*?</h1>#', $content, $titel);
		// Prüfen ob das gesuchte Wort vorhanden ist
		if (strstr($content,$eingabe))
		{
			$array[$i]['title'] = strip_tags($titel[0]);
			$array[$i]['text'] = strip_tags($content);
			$array[$i]['pfad'] = 'http://localhost/test/'.$file_name;
			
			$array[$i]['relevanz'] = 0;

			$array[$i]['relevanz'] = $array[$i]['relevanz'] + (5*(substr_count($title[0],$eingabe)));
			$array[$i]['relevanz'] = $array[$i]['relevanz'] + (2*(substr_count($array[$i]['text'],$eingabe)));
			$array[$i]['relevanz'] = $array[$i]['relevanz'] + (2*(substr_count($array[$i]['pfad'],$eingabe)));
			
			$i++;
		}
	}
}
echo '<pre>';
print_r($array);
?>

Nur seltsamerweise kommt immer die Relevanz von 2 heraus..
Nur warum?
Das ist die Ausgabe:

Code:
Array
(
    [0] => Array
        (
            [title] => Error 404
            [text] => Error 404

Diese Seite konnte nicht gefunden werden.
Sind sie sicher das Sie sich nicht vertippt haben? Gucken Sie doch bitte in Ihrer Adresszeile nach ob die
angeforderte Adresse stimmt.
Wenn Sie durch einen Link auf dieser Webseite hier hin gekommen sind, so melden Sie sich doch bitte
per Kontaktformular beim Webmaster.

Was wollen Sie nun tuen?

Zur Startseite
Zum Kontaktformular

            [pfad] => http://localhost/test/error_404.html
            [relevanz] => 2
        )

    [1] => Array
        (
            [title] => Startseite
            [text] => Startseite

Willkommen auf meiner kleinen Webseite.
Ich habe diese Seite erstellt um eine Kostprobe meines Könnens im Breich der Programmierung und des Webdesigns darzubieten.

            [pfad] => http://localhost/test/index.html
            [relevanz] => 2
        )

)
 
Zuletzt bearbeitet:
Das nachfolgende nur als Beispiel. (völlig ungetestet)

PHP:
<?php
$eingabe = "Startseite"; // Erfolg in der relität von Nutzer
$regex = '/'.$eingabe.'/S';
$directory = "./dateien/"; 
$handle = opendir($directory); 
while ($file_name = readdir ($handle)) {
  $file = $directory.$file_name;
  if (is_file($file)) {
    $fd = fopen($file,"r");
    $content = fread($fd, filesize($file));
    fclose ($fd);
    
    $Inhalt = explode ("</h1>", $content);
    $Inhalt['0'] = strip_tags($Inhalt['0']);
    $Inhalt['1'] = strip_tags($Inhalt['1']);
    if ($Inhalt['0']==$eingabe) { $Titel=''; }       
    $ZW = explode ("$eingabe", $Inhalt['1']);
    if (count($ZW)>0) { $Text=''; }
    
    if (isset($Titel) AND isset($Text)) {
      $Array12[]= $file; 
    } elseif (!isset($Titel) AND isset($Text)) {  
      $Array2[]= $file;        
    } elseif (isset($Titel) AND !isset($Text)) {          
      $Array10[]= $file;            
    }
  }
  unset($Titel,$Text);
}
?>

Geht natürlich auch schöner.

Du hast in den vorigen Beiträgen den Ergebnissen Werte zugeteilt

Nur Text = 2
Nur Titel = 10
Text und Titel = 12

So haste in dem Beispiel im Array12 alle Treffer für Text und Titel
Array10 nur Titel
Array2 nur Text

Indirekt schon vorsortiert.
Du kannst nun das ganze Blockweise ausgeben.
oder die arrays noch verbinden.
 
Zuletzt bearbeitet:
Zurück