Mit php eine Textdatei durchsuchen
Langsam wird es mir Peinlich dies ist meine 3te frage innerhalb von 2 Tagen:/
Diese script sucht nach Ordnern und nach text der vor einem "|" steht und gibt danach das was nach dem "|" steht wieder. Das funktioniert super aber nun möchte ich mir auch Suchvorschläge anzeigen lassen wie z.B Worddatei wenn ich nur nach "word" gesucht habe. Hoffe jemand kann mir helfen
Seite mit Suchfeld:
<form action="./suchen.php" method="post" name="search"><input type="text" size="10" maxlength="50" name="search" value=""><input type="submit" value="OK" style=""></div></form>
suchen.php (Seite mit Antwort)
Diese script sucht nach Ordnern und nach text der vor einem "|" steht und gibt danach das was nach dem "|" steht wieder. Das funktioniert super aber nun möchte ich mir auch Suchvorschläge anzeigen lassen wie z.B Worddatei wenn ich nur nach "word" gesucht habe. Hoffe jemand kann mir helfen
Seite mit Suchfeld:
<form action="./suchen.php" method="post" name="search"><input type="text" size="10" maxlength="50" name="search" value=""><input type="submit" value="OK" style=""></div></form>
suchen.php (Seite mit Antwort)
<?php
$username = $_POST["search"];
if (is_dir('./system/User/'.$username)) {
echo '<a href="./system/User/'.$username.'/index.php">'.$username.'</a><br>'; }
else{ echo "Kein User gefunden:( Bitte vergewissere dich, dass du den Namen richtig eingegeben hast.";}
?>
</div>
<div id="right" align="left">
</<ode>
Suchergebnisse für Dateien:
<?php
$username = $_POST["search"];
$content = file_get_contents('./Upload/4suche.txt');
preg_match_all('/^('.preg_quote($username).')\s*\|\s*(.*)/im',$content,$matches);
if (count($matches[2])){
for($i = 0; $i < count($matches[2]);$i++){
echo $matches[2][$i] ."<br>";
}
}else{
echo "Keine Datei gefunden:( Bitte vergewissere dich, dass du den Namen richtig eingegeben hast.";
}
?>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 287945
Url: https://administrator.de/contentid/287945
Ausgedruckt am: 25.11.2024 um 12:11 Uhr
5 Kommentare
Neuester Kommentar
preg_match_all('/^('.preg_quote($username).')\s*\|\s*(.*)/im',$content,$matches);
Einfach den Regex anpassen ...preg_match_all('/^(.*'.preg_quote($username).'.*)\s*\|\s*(.*)/im',$content,$matches);
ps: was gibt es sonst noch für Funktionen?
Wat, ist das jetzt ernst gemeint ??, nicht dein Ernst das ich das beantworten soll wenn noch nicht mal ein Thema welche Funktionen du meinst genannt werden ...Bitte Suchfunktion benutzen: http://www.php.net/search.php
schon mal erfreulich, daß jetzt eine gewisse struktur in deinen source kommt.
allerdings scheint mir, dasz du mit math. ausdruecken ueberfordert bist.
( auch ich habe kein verlangen danach, demzufolge benuetze ich diese preg_..
nicht. - weil ich mich mit diesen funktionen auseinandersetzen will.
- ja, ich weis, diese funktionen sind schnell und gut.
- ja, ich weis auch, im nicht hochkonzentrierten zustand ( gibts den hasen, geht nicht)
- selbst wenn die andere art etwas umstaendlicher, beim ersten draufschauen nicht
elegant erscheint, ist es doch einfacher ( fuer mich zu verstehen ) )
den jodel hast du etwas veraergert, waere ich auch, wuerde mich mein sohn nicht
auf die selbe art veraergern.
trotzdem vorab noch bemerkung zu deiner strukturierung.
selbstverstaendlich ist die struktierung ganz alleine deine sache.
sobald aber jemand anders den source lesen soll
und dir helfen soll
ist es eine sache der hoeflichkeit.
nicht jeder hat einen breiten monitor.
geht eine zeile ueber ca. 80 zeichen, muss ich, man das umbrechen.
am ende der zeile ist das verknuepfungszeichen oder weiterer text,
d.h. ich musz fuer solche zeilen nach rechts scrollen.
wozu, um dir zu helfen?
es hat einen grund, weshalb vor und hinter den verknuepfungszeichen punkt
eine leerstelle ist un weshalb eine zeile mit dem verknuepfungszeichen beginnt
und nicht endet
und weshalb lange zeilen in mehrere zeilen gesplittet werden.
dasz es mit file_get und file_put einfacher ist, usw. ...
und jetzt ein paar aenderungen in deinem source, obwohl du nicht danach gefragt
hast.
frueher, als speicherplatz teuer war, hat man an jedem zu speichernden byte
gespart. gilt das immer noch?
ob man, wie hier ein Verzeichnis relativ zum aktuellen VZ adressiert,
oder z.b. zum document-root, kommt erst zum tragen, wenn dieses script
in ein anderes VZ verschoben wird.
adressiert zum document-root, den juckt es nicht.
wenn php, dann auch php, kein mix
selbstverstaendlich habe ich es nicht ausprobiert.
ich bin auch nicht dein lehrer.
soll nur den weg zeigen.
der gesamte texte ist eigentlich nicht fuer dich gedacht,
aber irgendwann muss ich es schreiben, warum nicht dann deine frage
ueberbeantworten.
tja, das kann passieren. programmieren ist doch nicht so einfach fuer die
verwoehnden app-user.
interessiert es dich ueberhaupt, oder suchst du nur jemand der deine probs loest?
antwort wird nicht erwartet.
<?php
$username = $_POST [ "search" ];
$filename = './system/User/' . $username;
if ( is_dir ( $filename ) ) {
echo "<a href=\"" . $filename . "/index.php\">"
. $username
. '</a><br>';
}
else{ echo "Kein User gefunden:"
. "( Bitte vergewissere dich, "
. "dass du den Namen richtig eingegeben hast.";
}
echo "</div>";
echo "<div id=\"right\" align=\"left\">";
echo "Suchergebnisse für Dateien:";
echo "</div>";
$treffer = suche ( $filename );
if ( !is_array ( $treffer ) ):
echo "Keine Datei gefunden Bitte vergewissere dich, "
. "dass du den Namen richtig eingegeben hast.";
else:
for($i = 0; $i < count($treffer);$i++):
echo $treffer[$i] ."<br>";
endfor;
endif;
FUNCTION suche ( $filename ) {
$username = $_POST["search"]; wieso, ist doppelt, tut aber nicht aua
file_get_contents = als string
file = als array
$content = file ( './Upload/4suche.txt' );
$verzeichnis = scandir ( $filename );
for ( $i = 0; $i < count ( $verzeichnis ); $i++ ):
if ( trim ( $verzeichnis [ $i ] ) == "."
or trim ( $verzeichnis [ $i ] ) == ".." ): google ist dein freund
continue;
endif;
if ( pruefe ( $verzeichnis [ $i ], $content ) ):
$ret = $verzeichnis [ $i ];
endif;
endfor;
if ( isset ( $ret ) ):
return $ret;
endif;
return "nix";
preg_match_all('/^('.preg_quote($username).')\s*\|\s*(.*)/im',$content,$matches);
}
FUNCTION pruefe ( $verzeichnis, $content ) {
im verzeichnis ist der dateiname
content sind die bedingungen
jetzt mit substr, explode usw. untersuchen, ob bedingung zutrifft
for ( $i = 0; $i < count ( $content ); $i++ ):
if ( $verzeichnis == $content [ $i ] ) ):
return true;
endif;
endfor;
return false;
}
?> scripte sollten damit nicht so abgeschlossen werden, kann probs
// mit HTML ergeben. ( nein, erklaerung siehe tante google)
allerdings scheint mir, dasz du mit math. ausdruecken ueberfordert bist.
( auch ich habe kein verlangen danach, demzufolge benuetze ich diese preg_..
nicht. - weil ich mich mit diesen funktionen auseinandersetzen will.
- ja, ich weis, diese funktionen sind schnell und gut.
- ja, ich weis auch, im nicht hochkonzentrierten zustand ( gibts den hasen, geht nicht)
- selbst wenn die andere art etwas umstaendlicher, beim ersten draufschauen nicht
elegant erscheint, ist es doch einfacher ( fuer mich zu verstehen ) )
den jodel hast du etwas veraergert, waere ich auch, wuerde mich mein sohn nicht
auf die selbe art veraergern.
trotzdem vorab noch bemerkung zu deiner strukturierung.
selbstverstaendlich ist die struktierung ganz alleine deine sache.
sobald aber jemand anders den source lesen soll
und dir helfen soll
ist es eine sache der hoeflichkeit.
nicht jeder hat einen breiten monitor.
geht eine zeile ueber ca. 80 zeichen, muss ich, man das umbrechen.
am ende der zeile ist das verknuepfungszeichen oder weiterer text,
d.h. ich musz fuer solche zeilen nach rechts scrollen.
wozu, um dir zu helfen?
es hat einen grund, weshalb vor und hinter den verknuepfungszeichen punkt
eine leerstelle ist un weshalb eine zeile mit dem verknuepfungszeichen beginnt
und nicht endet
und weshalb lange zeilen in mehrere zeilen gesplittet werden.
dasz es mit file_get und file_put einfacher ist, usw. ...
und jetzt ein paar aenderungen in deinem source, obwohl du nicht danach gefragt
hast.
frueher, als speicherplatz teuer war, hat man an jedem zu speichernden byte
gespart. gilt das immer noch?
ob man, wie hier ein Verzeichnis relativ zum aktuellen VZ adressiert,
oder z.b. zum document-root, kommt erst zum tragen, wenn dieses script
in ein anderes VZ verschoben wird.
adressiert zum document-root, den juckt es nicht.
wenn php, dann auch php, kein mix
selbstverstaendlich habe ich es nicht ausprobiert.
ich bin auch nicht dein lehrer.
soll nur den weg zeigen.
der gesamte texte ist eigentlich nicht fuer dich gedacht,
aber irgendwann muss ich es schreiben, warum nicht dann deine frage
ueberbeantworten.
tja, das kann passieren. programmieren ist doch nicht so einfach fuer die
verwoehnden app-user.
interessiert es dich ueberhaupt, oder suchst du nur jemand der deine probs loest?
antwort wird nicht erwartet.
<?php
$username = $_POST [ "search" ];
$filename = './system/User/' . $username;
if ( is_dir ( $filename ) ) {
echo "<a href=\"" . $filename . "/index.php\">"
. $username
. '</a><br>';
}
else{ echo "Kein User gefunden:"
. "( Bitte vergewissere dich, "
. "dass du den Namen richtig eingegeben hast.";
}
echo "</div>";
echo "<div id=\"right\" align=\"left\">";
echo "Suchergebnisse für Dateien:";
echo "</div>";
$treffer = suche ( $filename );
if ( !is_array ( $treffer ) ):
echo "Keine Datei gefunden Bitte vergewissere dich, "
. "dass du den Namen richtig eingegeben hast.";
else:
for($i = 0; $i < count($treffer);$i++):
echo $treffer[$i] ."<br>";
endfor;
endif;
FUNCTION suche ( $filename ) {
$username = $_POST["search"]; wieso, ist doppelt, tut aber nicht aua
file_get_contents = als string
file = als array
$content = file ( './Upload/4suche.txt' );
$verzeichnis = scandir ( $filename );
for ( $i = 0; $i < count ( $verzeichnis ); $i++ ):
if ( trim ( $verzeichnis [ $i ] ) == "."
or trim ( $verzeichnis [ $i ] ) == ".." ): google ist dein freund
continue;
endif;
if ( pruefe ( $verzeichnis [ $i ], $content ) ):
$ret = $verzeichnis [ $i ];
endif;
endfor;
if ( isset ( $ret ) ):
return $ret;
endif;
return "nix";
preg_match_all('/^('.preg_quote($username).')\s*\|\s*(.*)/im',$content,$matches);
}
FUNCTION pruefe ( $verzeichnis, $content ) {
im verzeichnis ist der dateiname
content sind die bedingungen
jetzt mit substr, explode usw. untersuchen, ob bedingung zutrifft
for ( $i = 0; $i < count ( $content ); $i++ ):
if ( $verzeichnis == $content [ $i ] ) ):
return true;
endif;
endfor;
return false;
}
?> scripte sollten damit nicht so abgeschlossen werden, kann probs
// mit HTML ergeben. ( nein, erklaerung siehe tante google)
Alter, hast du den Text durch den Google-Übersetzer gejagt ? Ist ja grauenhaft ...
Und bitte nutze doch Codetags ! Denn so ganz ohne Einrückung und vermurksten Sonderzeichen ist das dann leider noch unübersichtlicher.
Gruß jodel
p.s. Wieso soll ich verärgert sein ? Nö ich hab ihm ja die Lösung zu seinem Code geliefert, aber wenn jemand will, dass man alle PHP Funktionen auflistet muss man ja denken das Gegenüber will einen verar...en.
Und bitte nutze doch Codetags ! Denn so ganz ohne Einrückung und vermurksten Sonderzeichen ist das dann leider noch unübersichtlicher.
Gruß jodel
p.s. Wieso soll ich verärgert sein ? Nö ich hab ihm ja die Lösung zu seinem Code geliefert, aber wenn jemand will, dass man alle PHP Funktionen auflistet muss man ja denken das Gegenüber will einen verar...en.