• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Textdatei (txt) nach beliebigen Wort durchsuchen und Treffer anzeigen

smsterminal

Mitglied
Hi User,

Folgendes Problem: Habe eine Datei zitate.txt möchte diese wie bei einer normalen suche nach irgendwelchen beliebigen wörtern durchsuchen und die Treffer anzeigen. Die Textdatei ist zeilenweise angelegt. meine Lösung klappt nicht:sad: kann mir jemand den entscheidenen code liefern??

Meine letzte fehlgeschlagene Lösung

PHP:
<?php

$zeile = 1;
if (isset($_GET['zeile']))
$zeile = $_GET['zeile'];

$file_array = file("zitate.txt");

echo $file_array[$inhalt];
 
?>
<a href="NAME_DES_SCRIPTS.php?zeile=<?=($zeile+1)?>">Weiter</a> - <a href="NAME_DES_SCRIPTS.php?zeile=<?=($zeile-1)?>">Zurück</a>
?>
 
Werbung:
Mit SuFu-Scripts hab ich's nicht so. Ich habe eine sehr einfache Möglichkeit, Dateien einzulesen... Vielleicht hilft dir das ja.
PHP:
<?php
if( $zitate = fopen( "zitate.txt", "r" ) ) {
  $zeile = 1;
  if( isset( $_GET[ "zeile" ] ) )
    $zeile = $_GET[ "zeile" ];
  
  $content = fread( $zeile, filesize( "zitate.txt" ) );
  
  // Ab hier rate ich. x)
  $rows = explode( "\n", $content );
  echo $rows[ $zeile ];
} else {
  echo "Die Datei existiert nicht!";
  // Logging oder sonstwas
}
?>
So als Ansatz für dich.
 
das klappt nicht aber danke!

Warning
: fread(): supplied argument is not a valid stream resource in ... on line 7

das script soll den datensatz aus der txt-datei auch anzeigen, wenn ein treffer gefunden wurde! wäre über weitere antworten dankbar
 
Werbung:
habe nen guten code gefunden der die datensätze auch anzeigt aber wie kann ich noch ein $file_array einbauen, bekomme nur schrift angezeigt obwohl die bilder auch ausgelesen weden sollen! ich denke das geht mit file array

<?php
function findwort($wort=""){
/*
* Wenn wort leer ist, Funktion beenden.
*/
if(strlen($wort)==0){
$gef_zeilen[]="Geben sie einen Suchbegriff ein";
return $gef_zeilen;
}
/*
* Datei zeilenweise in ein Array einlesen.
* 80 ist die Zeilenlänge, erhöhen falls nötig.
*/
$i=0;
$f=fopen("zitate.txt","r");
while($line=fgets($f,80)){
$text_lines[$i]=$line;
$i++;
}
fclose($f);
/*
* Zeilenweise das Array mit der Funktion strpos durchsuchen.
* strpos arbeitet case-sensitiv, deshalb werden mit strtolower
* alle Groß- in Kleinbuchstaben umgewandelt.
*/
$i=0;
while($i<count($text_lines)){
$pos = strpos(strtolower($text_lines[$i]),strtolower($wort));
if($pos === false){
/*
* Wenn $pos false ist, tue nichts!!
*/
}else{
$gef_zeilen[$i]="Der Suchbegriff \"$wort\" wurde in Zeile ".($i+1)." an Position $pos gefunden ==> ".htmlspecialchars($text_lines[$i]);
}
$i++;
}
/*
* count zählt die Elemente im Array.
*/
if(count($gef_zeilen)>0){
return $gef_zeilen;
}else{
$gef_zeilen[0]="Der Suchbegriff \"$wort\" wurde nicht gefunden";
return $gef_zeilen;
}
}
/*
* Ist das Formular gesendet, gibt die Funktion ein Array zurück, deshalb mit foreach ausgeben.
*/
if(isset($_POST['suche'])){
$erg=findwort($_POST['suche']);
foreach($erg as $zeile){
echo "<p>$zeile</p>";

}
}
?>
 
Upps! Mein Fehler!
PHP:
$content = fread( $zeile, filesize( "zitate.txt" ) );
muss natürlich
PHP:
$content = fread( $zitate, filesize( "zitate.txt" ) );
heißen.

Du möchtest also einen Suchbegriff eingeben können? Hab ich mir gedacht. Aber wie gesagt, mit Suchfunktionen hab ich's nicht so. Ich würde aber meinen Denkansatz von oben weiter verfolgen und würde ungefähr zum selben Ergebnis kommen.
Übrigens, was meinst du mit Bildern? Wie sieht deine zitate.txt eigentlich aus? Könntest du einen Ausschnitt posten?

Jedenfalls, hier mein Lösungsansatz:
PHP:
<?php 
if( $zitate = fopen( "zitate.txt", "r" ) ) { 
  $zeile = 1; 
  if( isset( $_GET[ "zeile" ] ) )
    $zeile = $_GET[ "zeile" ];
  
  $content = fread( $zitate, filesize( "zitate.txt" ) );
  
  // Ab hier rate ich. x)
  $rows = explode( "\n", $content );
  if( isset( $_GET[ "search" ] ) ) {
    if( trim( $_GET[ "search" ] ) !== "" ) {
      $hits = array( );
      $suchbegriff = $_GET[ "search" ];
      foreach( $rows as $row ) {
        if( ( $pos = strpos( $row, $suchbegriff ) ) !== false ) {
          array_push( $hits, $row );
        }
      }
      
      // Ausgabe
      foreach( $hits as $hit ) {
        echo "$hit<br />";
      }
    } else {
      echo "Kein Suchbegriff eingegeben!";
    }
  }
  fclose( $zitate ); // Im vorherigen Ansatz vergessen, sorry.
} else { 
  echo "Die Datei existiert nicht!"; 
  // Logging oder sonstwas 
} 
?>

Für den Rest benötige ich genauere Informationen.
 
danke dark

1. der letztere code zeigt weissen browser an
2. auszug einer txt zeile :
<h1><a href="http://" target="_blank"><img src="images/chip1.jpg" border="1" align="left"></a></h1><p>viel text. <a href="http://" target="_blank">&raquo;mehr</a><br clear="all"</font></p><hr />

3. der code folgende code den ich jetzt hab geht sehr gut aber die bilder aus der txt werden nicht angezeigt

<?php
function findwort($wort=""){
/*
* Wenn wort leer ist, Funktion beenden.
*/
if(strlen($wort)==0){
$gef_zeilen[]="Geben sie einen Suchbegriff ein";
return $gef_zeilen;
}
/*
* Datei zeilenweise in ein Array einlesen.
* 80 ist die Zeilenlänge, erhöhen falls nötig.
*/
$i=0;
$f=fopen("zitate.txt","r");
while($line=fgets($f,1000)){
$text_lines[$i]=$line;
$i++;
}
fclose($f);
/*
* Zeilenweise das Array mit der Funktion strpos durchsuchen.
* strpos arbeitet case-sensitiv, deshalb werden mit strtolower
* alle Groß- in Kleinbuchstaben umgewandelt.
*/
$i=0;
while($i<count($text_lines)){
$pos = strpos(strtolower($text_lines[$i]),strtolower($wort));
if($pos === false){
/*
* Wenn $pos false ist, tue nichts!!
*/
}else{
$gef_zeilen[$i]="Der Suchbegriff \"$wort\" wurde in Zeile ".($i+1)." an Position $pos gefunden ==> ".strip_tags($text_lines[$i]);
}
$i++;
}
/*
* count zählt die Elemente im Array.
*/
if(count($gef_zeilen)>0){
return $gef_zeilen;
}else{
$gef_zeilen[0]="Der Suchbegriff \"$wort\" wurde nicht gefunden";
return $gef_zeilen;
}
}
/*
* Ist das Formular gesendet, gibt die Funktion ein Array zurück, deshalb mit foreach ausgeben.
*/
if(isset($_POST['suche'])){
$erg=findwort($_POST['suche']);
foreach($erg as $zeile){
echo "<p>$zeile</p>";

}
}
?>
 
Werbung:
Der Code dürfte soweit funktionieren...
Fangen wir mal ganz trivial an - existiert ein Ordner mit angegebenem relativen Pfad "images"? Bedenke: Wenn die Datei "zitate.txt" sich in einem Unterordner befindet, in welchem auch der Unterordner images existiert, wird dein Code diesen nicht finden, da PHP nur den Code einliest und an HTML weiterleitet.
Kurzes Beispiel:

//Root/
//->Zitate
//-->zitate.txt
//-->images
//--->chip1.jpg
//--->kartoffel.png
//--->...
//-->...
//->index.php
//->...

So sucht HTML die Bilder in Ordner //Root/images/ und findet diese nicht.

Apropos:
<h1><a href="http://" target="_blank"><img src="images/chip1.jpg" border="1" align="left"></a></h1><p>viel text. <a href="http://" target="_blank">&raquo;mehr</a><br clear="all" /></font></p><hr />
Ich weiß nicht, ob das ein Abschreibfehler war, aber dennoch... ;)
 
Hi DarkDragon, du bist mir ne große hilfe! danke für den Tip. Also der letztere php code ist gut will ich so nutzen, also die zitate.txt liegt auf dem Hauptverzeichnis, diese liest er auch aus. Für die Bilder verwende ich den /images im unterverzeichnis. Das könnte daran liegen. Was muss ich machen das er die bilder ausliest!? zudem sind in der zitate.txt hyperlinks zu sehen die werden auch nicht mitgesendet nur der reine inhalt ohne formatierungen. wäre für nen tipp sehr dankbar! lg

wenn ich ein bild ins hauptverzeichnis lege liest er es auch nicht...

also problem liegt daran das nur reiner text gelesen wird bei der suchfunktion!
 
Zuletzt bearbeitet:
Hmm... Das ganze scheint mir ein Problem, dass ich jetzt so mit reiner Theorie nicht gelöst bekomme. Ich werde mir mal ein ähnliches Konstrukt aufbauen und schauen, was draus wird. Melde mich dann wieder.
 
Werbung:
Natürlich! Es ist so banal... Die verwendete strip_tags Funktion sorgt dafür, dass HTML-Tags entfernt werden. Da du aber Tags willst solltest du diese Funktion weglassen. Dass ich da nicht direkt drauf gekommen bin... Ha! :lol:
 
also zeile aus der zitate.txt hast du,, und den php code auch. suche klappt , bei der ausgabe nur reiner text ohne formatierungen. die zitate.txt läuft so auch gut normal wird alles so wie es sein soll angezeigt mit bildchen und hyperlinks...wäre nett wenn du was tricksen könntest.
 
mit der strip_tag funktion war ich auch schon verwickelt hatte vorher htmlspecialchars drin! wie bekomme ich den strip tag raus ohne was zu verwurschteln und wie ist der code ohne den tags?? ich denke dann haben wirs:-)
 
Werbung:
Nunja, da du selbst der Verfasser dieser Datei bist, kannst du htmlspecialchars, strip_tags oder sonst irgendeine XSS-Sicherheitsroutine weglassen. Die Funktionen werden verwendet um Benutzereingaben zu sichern, damit Fremde keinen Schadcode unterbringen können. Aber da du ja kein Fremder bist... ;)
 
okay dann muss es ja gehen und er liest alles aus! aber welchen part muss ich rausnehmen, also genau das was nicht hin soll...

$gef_zeilen[$i]="".strip_tags($text_lines[$i]);
}
$i++;
}
 
Werbung:
boah ha,,, schwierige geburt , mit dem weglassen des strip_tags hats gefunzt... alles bestens rest sind schönheitskorrekturen..aber skript läuft.

CONGRATULATION an DarkDragon193

Vielen dank, Thread kann closed werden
 
Zurück
Oben