Webdesign in Siegen

Suchfunktion für Internetseite (ohne db)

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

Suchfunktion für Internetseite (ohne db)

Beitragvon cgu am 04.01.2008, 17:10

Hallo liebe Community,

Kurze Frage: Ich möchte auf meiner Internetseite eine Suchfunktion (Volltextsuche) einbinden, da die Seite relativ umfangreich ist. Allerdings wurde keine Datenbank verwendet, die man "durchsuchen" könnte. Die komplette Internetpräsenz besteht so gu wie nur aus Textseiten. Gibt es eine nicht-datenbank basierende Suche, die die Dateinnamen der HTML-Dateien und die Inhalte (HTML-Text) der HTML-Dateien durchsucht und ein Ergebnis mit links auswift zu den entsprechenden Dokumenten auswirft? Kann man soetwas realisieren oder wird immer eine Datenbank benötigt?

Über Hinweise würde ich mich freuen :-)
Ja .. öh .. DAS ... das... läuft!
Benutzeravatar
cgu
Mitglied
 
Beiträge: 356
Registriert: 02.09.2006
Wohnort: Siegen

Re: Suchfunktion für Internetseite (ohne db)

Beitragvon .wired am 04.01.2008, 17:42

Du könntest einfach ein Googlescript einbauen ;) Man kann es so weit umbauen, dass zum Beispiel die Option "eigene Seite durchsuchen" vorgegeben ist, und ich glaube, du kannst sogar das Googlelogo entfernen, wenn es dich stört. Das braucht auch keine Datenbank und geht schnell...

MfG .wired
Bild Bild
Benutzeravatar
.wired
Mitglied
 
Beiträge: 332
Registriert: 24.06.2007
Wohnort: Diekholzen

Re: Suchfunktion für Internetseite (ohne db)

Beitragvon mstrauss am 04.01.2008, 17:45

Merke:

Alles, was du mit Google Mitteln nutzt, darf google weiter verwenden !!

*für einen googlefreien Rechner*
Menschen - kleine Säcke aus denkendem Wasser, zusammengehalten von fragilen Kalzium-Ansammlungen.
Terry Pratchett
Benutzeravatar
mstrauss
Mitglied
 
Beiträge: 159
Registriert: 22.10.2005
Wohnort: Duisburg

Re: Suchfunktion für Internetseite (ohne db)

Beitragvon .wired am 04.01.2008, 19:23

Ich bin absolut deiner Meinung, ich mag Google eigentlich auch nicht wirklich, um nicht zu sagen, ich hasse es... Dennoch benutze ich es. Naja, aber es wäre zumindest eine einfache und funktionierende Lösung...

*Ich bin auch für einen googlefreien Rechner :)* ^^
Bild Bild
Benutzeravatar
.wired
Mitglied
 
Beiträge: 332
Registriert: 24.06.2007
Wohnort: Diekholzen

Re: Suchfunktion für Internetseite (ohne db)

Beitragvon cgu am 04.01.2008, 19:43

Hehe ja ok. Da wir google ja nicht mit hilfe meiner Website die Weltherrschaft überlassen möchten müsste dann also eine eigengestrickte Lösung her, oder? Kann man soetwas selbst schnell realisieren? Ich kann leider kein PHP (kann allerdings das eine oder andere Programmieren).
Ja .. öh .. DAS ... das... läuft!
Benutzeravatar
cgu
Mitglied
 
Beiträge: 356
Registriert: 02.09.2006
Wohnort: Siegen

Re: Suchfunktion für Internetseite (ohne db)

Beitragvon mstrauss am 04.01.2008, 19:57

Hi,

was fertiges habe ich auch nicht ... aber wenn alles in Dateien abgelegt ist, dann schau dir mal die Funktionen rund um Verzeichnisse und Dateien an. Ansonsten wirst du wohl um reguläre Ausdrück nicht drumherum kommen.

Vielleicht hilft ja die Recherche nach diesen Begriffen weiter

Gruß
Markus
Menschen - kleine Säcke aus denkendem Wasser, zusammengehalten von fragilen Kalzium-Ansammlungen.
Terry Pratchett
Benutzeravatar
mstrauss
Mitglied
 
Beiträge: 159
Registriert: 22.10.2005
Wohnort: Duisburg

Re: Suchfunktion für Internetseite (ohne db)

Beitragvon .wired am 04.01.2008, 20:11

Guck mal hier, vielleicht findest du ja was nützliches : http://www.script-archiv.com/PHP/Script ... dex_1.html

MfG .wired
Bild Bild
Benutzeravatar
.wired
Mitglied
 
Beiträge: 332
Registriert: 24.06.2007
Wohnort: Diekholzen

Re: Suchfunktion für Internetseite (ohne db)

Beitragvon cgu am 05.01.2008, 03:29

Danke für eure Hilfe, da war etwas bei glaube ich ...

Nur kurz vorweg: Wie schon oben kurz angedeutet... ich kann ansatzweise die eine oder andere Programmiersprache (hab vor einigen Jahren mal Java-Applets geschrieben und Assembler, Ansi-C sowie C++ programmieren müssen), aber mit PHP habe ich mich noch nie auseinandergesetzt.

Ich habe ein kostenfreies Script gefunden, dass ich bislang meinen Anforderungen nach umbauen konnte, aber ich bekomme die Ausgabe noch nicht so richtig hin (Es git schon noch das eine oder andere Problem, aber dazu später ...).

Aktuell folgendes Problem:

Ich möchte gerne jedes einzelne Suchergebnis (gefundenes Dokument), stehend in der Vairable "$ausgabe" ein einem getrennten DIV ausgeben ( <div class="ergebnis"> ). Momentan bekomme ich das nicht hin, die Ausgabeschleife schreibt mit alles zusammen in ein DIV. Wie könnte ich das machen ... ? :o0:

AUSSCHNITT AUS DEM CODE (AUSGABE):

Code: Alles auswählen
            if($found != "0")
            {
               ?>
               <div class="ergebnisanzahl">
                  <?php
                     echo "Es wurden <strong>$found</strong> Dokumente gefunden, die den gesuchten Begriff '<strong>$search</strong>' beinhalten:";
                  ?>   
               </div>
               <?php
               $array = explode("\n", $array);
               natsort($array);
               reset($array);
               $array = array_reverse($array);
               
               while(list($line_num, $line) = each($array))
               {
                  $ausgabe .= "$line\n";
               }
               ?>
               <div class="ergebnis">
                  <?php
                  print $ausgabe;
                  ?>
               </div>
               <?php
            }
            if($found == "0")
            { echo "Es konnte kein Dokument mit dem gesuchten Begriff <strong>$search</strong> gefunden werden !";}
            ?>
Ja .. öh .. DAS ... das... läuft!
Benutzeravatar
cgu
Mitglied
 
Beiträge: 356
Registriert: 02.09.2006
Wohnort: Siegen

Re: Suchfunktion für Internetseite (ohne db)

Beitragvon mstrauss am 05.01.2008, 10:51

Hi,

du musst den HTML-Code mit dem Div mit in die While-Schleife packen, damit er bei jedem Durchlauf auch einen Div öffnet und wieder schließt. Der Code sähe dann so aus:

Code: Alles auswählen

if($found != "0")
            {
               ?>
               <div class="ergebnisanzahl">
                  <?php
                     echo "Es wurden <strong>$found</strong> Dokumente gefunden, die den gesuchten Begriff '<strong>$search</strong>' beinhalten:";
                  ?>   
               </div>
               <?php
               $array = explode("\n", $array);
               natsort($array);
               reset($array);
               $array = array_reverse($array);
               
               while(list($line_num, $line) = each($array))
               {
                  echo '<div class="ergebnis">';
                  echo $line;
                  echo '</div>';
               }
               ?>
               
               <?php
            }
            if($found == "0")
            { echo "Es konnte kein Dokument mit dem gesuchten Begriff <strong>$search</strong> gefunden werden !";}
            ?>
Menschen - kleine Säcke aus denkendem Wasser, zusammengehalten von fragilen Kalzium-Ansammlungen.
Terry Pratchett
Benutzeravatar
mstrauss
Mitglied
 
Beiträge: 159
Registriert: 22.10.2005
Wohnort: Duisburg

Re: Suchfunktion für Internetseite (ohne db)

Beitragvon cgu am 07.01.2008, 09:21

Hmm das scheint nicht wirklich zu funktionieren, die ausgabe erfolgt immernoch in einem kompletten <div>. Ich weiß einfach nich, woran das liegt. PHP ist wirklich eine unschöne sprache (sorry ....), die ganzen Funktionen machen das alles selbst, was man früher eigenhändig programmieren musste, da steige ich nicht durch .... :-P ...

ich habe einige Variationen versucht, keine führte zu dem gewünschten Ergebnis. Hier mal ein größerer und aktueller Codeschnipsel, vielleicht liegt das problem ja an einer anderen stelle ...


Code: Alles auswählen
( weiter oben nur HTML )

            <h1>Suchergebnisse:</h1>         

            <?php
            $dateityp = ".htm";
            if(empty($search)) {$search=$_POST[search];}
            if(strlen($search) < "2")
            {echo "Bitte erweitern Sie Ihren Suchbegriff auf mindestens 2 Buchstaben";exit;}
            $found = "0";
            $verz = opendir('.');
            while($file = readdir($verz))
            { 
               if($file != "." && $file != ".." &&  !is_dir($file))
               {
                  $filetype = stristr($file, $dateityp);
                  if(!empty($filetype))
                  {
                     $string = file_get_contents($file);
                     $string = html_entity_decode($string);
                     $string = strtolower($string);
                     $search = strtolower($search);
                     $test = substr_count($string, $search);
                     if(!empty($test))
                     {
                        $string = ereg_replace("\n", "", $string);
                        $string = strip_tags($string);                  
                        
                        $pieces = explode($search, $string);
                        $var1 = substr($pieces[0], -50);
                        $var1 = explode(" ", $var1);
                        array_shift($var1);
                        $var1 = implode(" ", $var1);
                        $var2 = substr($pieces[1], 0, 100);
                        $var2 = explode(" ", $var2);
                        array_pop($var2);
                        $var2 = implode(" ", $var2);
                        $rest = "$var1<b>$search</b>$var2";
                        $array .= "<b>Vorschau:</b><br><br><i>[...] $rest [...]</i><br><br> <b>Dokument: </b><a href=\"index.php?id=$file\" target=\"_self\" class=\"link\"><b> $file </b></a><br><br><br>";
                        $found ++;   
                     }
                  }
               }
            }
            
            closedir($verz);
            if($found != "0")
            {
               ?>
               <div class="ergebnisanzahl">
                  <?php
                     echo "Es wurden <strong>$found</strong> Dokumente gefunden, die den gesuchten Begriff '<strong>$search</strong>' beinhalten:";
                  ?>   
               </div>
               <?php
               $array = explode("\n", $array);
               natsort($array);
               reset($array);
               $array = array_reverse($array);
               
               while(list($line_num, $line) = each($array))
               {
                  $ausgabe .= "$line\n";
                         echo '<div class="ergebnis">';
                         echo $line;
                         echo '</div>';
               }

            }
            if($found == "0")
            { echo "Es konnte kein Dokument mit dem gesuchten Begriff <strong>$search</strong> gefunden werden !";}
            ?>

( weiter unten nur HTML )



Ja .. öh .. DAS ... das... läuft!
Benutzeravatar
cgu
Mitglied
 
Beiträge: 356
Registriert: 02.09.2006
Wohnort: Siegen


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast