Suche in einer Mitarbeiterliste
Klaus
- perl
Hi!!!
ich baue gerade eine Intranetpage mit einer Telefonliste.
Diese Telefonliste möchte ich wenn ich in meine Suchenmaske etwas eingebe durchsuchen. Da ich leider erst seit 3 Wochen mit Perl arbeite hab ich auch noch nicht wirklich Ahnung.
Den Code habe ich etwas erweitert und hoffe das ihr versteht was ich möchte!!!
Der Code folgt!
#!/usr/bin/perl -w
#mitarbeiterliste.pl Ausgabe der CGI-Umgebungsvariablen
#Mitarbeiterliste -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
print "content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test</title>";
print '<link rel="stylesheet" href="/css/css.css">',"\n";
print "</head><body>\n";
my (@input,$in,$total);
#my ($i,@cust, @arr, @erg, @matching);
my $request_method = $ENV{'REQUEST_METHOD'};
my @werte;
my %parameter;
my @paar;
my $aufruf;
my @spalten;
my @suchergebnis;
if ($request_method eq "GET") {
$aufruf=$ENV{'QUERY_STRING'};
}
elsif ( $request_method eq "POST"){
read (STDIN, $aufruf, $ENV{'CONTENT_LENGTH'});
print "Aufruf $aufruf<br>";
}
@werte = split (/&/, $aufruf);
foreach (@werte) {
@paar=split (/=/, $_);
$parameter{$paar[0]}=$paar[1];
}
#@werte=keys(%parameter);
#print "Parameter ",keys(%parameter),"<br>";
my $pfad="/srv/www/cgi-bin/daten/";
my $qdatei="$pfad$parameter{'datei'}";
open (FILE,"<$qdatei")||
"die Datei $parameter{'datei'} konnte nicht geöffnet werden";
# ganze Datei in @file einlesen
my @file = <FILE>;
my $zeile=$file[0];
@spalten=split(/;/,$zeile);
foreach (@spalten) {
$parameter{$_}="";
}
shift (@file);
# Array @file sortieren
my @sorted = sort @file;
#foreach $_ (@sorted) {
# chomp;
# push @arr, [ split(/;/,$_)];
#}
if ($parameter{"mode"} eq "3") {
#print "<table border=1 cellpadding='2' cellspacing='2'>";
print "grep";
# Suchalgorithmus mit grep()
# @matching= grep { # Iterator ist $_
#$_->[0] =~ /^$cust[0]/ &&
#$_->[1] =~ /^$cust1/ &&
#$_->[2] =~ /^$cust2/ &&
#$_->[3] =~ /^$cust3/ &&
#$_->[4] =~ /^$cust4/ &&
#$_->[5] =~ /^$cust5/ &&
#$_->[6] =~ /^$cust6/ &&
#$_->[7] =~ /^$cust7/ &&
#$_->[8] =~ /^$cust8/
}
#@arr;
#Tabellenkopf ausgeben
#print "<form action='/cgi-bin/mitarbeiterliste.pl?mode=2&datei=mitarbeiterliste.txt' method='get'>";
print "<tr><td colspan='9'><h2>Suchergebnisse</h2></td></tr>";
print "<tr>";
foreach (@spalten) {
print "<th>$_</th>";}
print "</tr>";
# foreach (@arr){
# Schleifeniterator ist $_
# Dereferenzieren der Arrayelemente mit $_->[Index]
# Aktive Tabellenausgabe!!!!
print qq(<tr><td>$_->[0]</td><td>$_->[1]</td> <td>$_->[2]</td><td>$_->[3]</td><td>$_->[4]</td><td>$_->[5]</td><td>$_->[6]</td><td>$_->[7]</td><td>$_->[8]</td></tr>);
#}
print "</table>";
#if ($parameter{"mode"} eq "3")
#{
#Tabellenkopf ausgeben
#print "<form action='/cgi-bin/mitarbeiterliste.pl?mode=2&datei=mitarbeiterliste.txt' method='get'>";
# print "<tr><td colspan='9'><h2>Suchergebnisse</h2></td></tr>";
# print "<tr>";
# foreach (@spalten) {
# print "<th>$_</th>";}
# print "</tr>";
# foreach (@arr) {
# Schleifeniterator ist $_
# Dereferenzieren der Arrayelemente mit $_->[Index]
# Aktive Tabellenausgabe!!!!
# print qq(<tr><td>$_->[0]</td><td>$_->[1]</td> <td>$_->[2]#</td><td>$_->[3]</td><td>$_->[4]</td><td>$_->[5]</td><td>$_->[6]#</td><td>$_->[7]</td><td>$_->[8]</td></tr>);
# }
# print "</table>";
#}
if ($parameter{"mode"} eq "1")
{
print "<table border=1 cellpadding='2' cellspacing='2'>";
#Tabellenkopf ausgeben
print "<form action='/cgi-bin/mitarbeiterliste.pl?mode=2&datei=mitarbeiterliste.txt' method='get'>";
print "<tr><td colspan='8'><h2>Gesamte Liste</h2></td><td colspan='1'><input type='Submit' name='search' value='Eintrag suchen'</td></tr>";
print "<tr>";
foreach (@spalten) {
print "<th>$_</th>";}
print "</tr>";
# foreach (@arr) {
# Schleifeniterator ist $_
# Dereferenzieren der Arrayelemente mit $_->[Index]
# Aktive Tabellenausgabe!!!!
print qq(<tr><td>$_->[0]</td><td>$_->[1]</td> <td>$_->[2]</td><td>$_->[3]</td><td>$_->[4]</td><td>$_->[5]</td><td>$_->[6]</td><td>$_->[7]</td><td>$_->[8]</td></tr>);
}
print "</table>";
if ($parameter{"mode"} eq "2")
{ print "<table border=0 cellpadding='2' cellspacing='2'>";
print "<form action='/cgi-bin/mitarbeiterliste.pl' method='post'>";
print "<tr><td colspan='9'><h2>Suchen</h2></td></tr>";
$parameter{mode}=3;
foreach (@spalten) {
print "<tr><td>$_:</td><td><input type='Text' name='$_' value='' size='25'</td></tr>";}
print "</table>";
print "<div align='center'><input type='Submit' name='search' value='Get that thing'</div>";
}
print "</table>\n";
print "</body></html>\n";
Wie ihr im Code seht hab ich schonmal ein bisschen was ausprobiert leider klappt das nicht!!! könnt ihr mir bitte helfen
Gruß
Klaus
Ich bin total verwirrt!
Kannst Du bitte Deinen Quellcode ein bisschen
einschränken und mir genau sagen, was davon
nicht funktioniert?
#!/usr/bin/perl -w
#mitarbeiterliste.pl Ausgabe der CGI-Umgebungsvariablen
#Mitarbeiterliste -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
print "content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test</title>";
print '<link rel="stylesheet" href="/css/css.css">',"\n";
print "</head><body>\n";
my (@input,$in,$total);
#my ($i,@cust, @arr, @erg, @matching);
my $request_method = $ENV{'REQUEST_METHOD'};
my @werte;
my %parameter;
my @paar;
my $aufruf;
my @spalten;
my @suchergebnis;
if ($request_method eq "GET") {
$aufruf=$ENV{'QUERY_STRING'};
}
elsif ( $request_method eq "POST"){
read (STDIN, $aufruf, $ENV{'CONTENT_LENGTH'});
print "Aufruf $aufruf<br>";
}
@werte = split (/&/, $aufruf);
foreach (@werte) {
@paar=split (/=/, $_);
$parameter{$paar[0]}=$paar[1];
}
#@werte=keys(%parameter);
#print "Parameter ",keys(%parameter),"<br>";
my $pfad="/srv/www/cgi-bin/daten/";
my $qdatei="$pfad$parameter{'datei'}";
open (FILE,"<$qdatei")||
"die Datei $parameter{'datei'} konnte nicht geöffnet werden";
# ganze Datei in @file einlesen
my @file = <FILE>;
my $zeile=$file[0];
@spalten=split(/;/,$zeile);
foreach (@spalten) {
$parameter{$_}="";
}
shift (@file);
# Array @file sortieren
my @sorted = sort @file;
#foreach $_ (@sorted) {
# chomp;
# push @arr, [ split(/;/,$_)];
#}
#if ($parameter{"mode"} eq "3")
#{
#Tabellenkopf ausgeben
#print "<form action='/cgi-bin/mitarbeiterliste.pl?mode=2&datei=mitarbeiterliste.txt' method='get'>";
# print "<tr><td colspan='9'><h2>Suchergebnisse</h2></td></tr>";
# print "<tr>";
# foreach (@spalten) {
# print "<th>$_</th>";}
# print "</tr>";
# foreach (@arr) {
# Schleifeniterator ist $_
# Dereferenzieren der Arrayelemente mit $_->[Index]
# Aktive Tabellenausgabe!!!!
# print qq(<tr><td>$_->[0]</td><td>$_->[1]</td> <td>$_->[2]#</td><td>$_->[3]</td><td>$_->[4]</td><td>$_->[5]</td><td>$_->[6]#</td><td>$_->[7]</td><td>$_->[8]</td></tr>);
# }
# print "</table>";
#}
if ($parameter{"mode"} eq "1")
{
print "<table border=1 cellpadding='2' cellspacing='2'>";
#Tabellenkopf ausgeben
print "<form action='/cgi-bin/mitarbeiterliste.pl?mode=2&datei=mitarbeiterliste.txt' method='get'>";
print "<tr><td colspan='8'><h2>Gesamte Liste</h2></td><td colspan='1'><input type='Submit' name='search' value='Eintrag suchen'</td></tr>";
print "<tr>";
foreach (@spalten) {
print "<th>$_</th>";}
print "</tr>";
# foreach (@arr) {
# Schleifeniterator ist $_
# Dereferenzieren der Arrayelemente mit $_->[Index]
# Aktive Tabellenausgabe!!!!
print qq(<tr><td>$_->[0]</td><td>$_->[1]</td> <td>$_->[2]</td><td>$_->[3]</td><td>$_->[4]</td><td>$_->[5]</td><td>$_->[6]</td><td>$_->[7]</td><td>$_->[8]</td></tr>);
}
print "</table>";
if ($parameter{"mode"} eq "2")
{ print "<table border=0 cellpadding='2' cellspacing='2'>";
print "<form action='/cgi-bin/mitarbeiterliste.pl' method='post'>";
print "<tr><td colspan='9'><h2>Suchen</h2></td></tr>";
$parameter{mode}=3;
foreach (@spalten) {
print "<tr><td>$_:</td><td><input type='Text' name='$_' value='' size='25'</td></tr>";}
print "</table>";
print "<div align='center'><input type='Submit' name='search' value='Get that thing'</div>";
}
print "</table>\n";
print "</body></html>\n";
Pass auf ich möchte in meiner TXT Datei nach etwas suchen die TXT Datei hat 9 Zeilen die da lauten name, vorname . . . also sowas wie ne Kundendatei. Im mode 1 meines Skriptes wird die Gesamte Liste mit allen Mitarbietern angezeigt. Im mode 2 wird eine Suchmaske aufgerufen in der man Suchbegriffe eingeben kann. im mode 3 nun soll sie Ausgabe von mode 2 stattfinden. Ich weiss aber nicht wie ich eine Suche in mein Skript baue. Der mode 3 soll also meine mitarbeiterliste.txt öffnen und darin nach den Information suchen die ich in die Suchmaske eingegeben habe. Wie mache ich die Suchenfunktion.
Hi Klaus,
Pass auf ich möchte in meiner TXT Datei nach etwas suchen die TXT Datei hat 9 Zeilen die da lauten name, vorname . . . also sowas wie ne Kundendatei.
In deine Textdatei stehen also, so ich das richtig verstanden habe, die einzelnen Informationen kommagetrennt. Habe ich das so richtig verstanden?
Im mode 1 meines Skriptes wird die Gesamte Liste mit allen Mitarbietern angezeigt.
Also:
1. Datei öffnen (Fehler abfangen nicht vergessen!)
http://selfhtml.teamone.de/cgiperl/funktionen/einausgabe.htm#open
2. Datei zeilenweise auslesen:
while ( <DATEIHANDLE> ) {
#deine Anweisungen (2a und 2b)
}
2a.Die Zeile aufsplitten
http://selfhtml.teamone.de/cgiperl/funktionen/zeichenketten.htm#split
2b.Die Werte in der von dir gewünschten Form ausgeben
http://selfhtml.teamone.de/cgiperl/funktionen/einausgabe.htm#print
3. Datei wieder schließen
http://selfhtml.teamone.de/cgiperl/funktionen/einausgabe.htm#close
Im mode 2 wird eine Suchmaske aufgerufen in der man Suchbegriffe eingeben kann. im mode 3 nun soll sie Ausgabe von mode 2 stattfinden.
Baue dir ein Eingabeformular, in dessen action-Attribut dein Skript steht, als Methode würde ich POST nehmen. Um die Eingaben in deinem Script verwenden zu können, benutze das CGI-Modul (http://selfhtml.teamone.de/cgiperl/module/cgi.htm#formularverarbeitung. Das Suchen in deiner Telefonliste kannst du wiederum zeilenweise nach obigem Schema machen. Hierzu bieten sich entweder Reguläre Ausdrücke oder die index-Funktion an:
http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm
http://www.rrz.uni-hamburg.de/RRZ/W.Wiedl/Skripte/CGI-Perl/Regulaere_Ausdruecke/REInhalt.htm
http://selfhtml.teamone.de/cgiperl/funktionen/zeichenketten.htm#index
Die Treffer kannst du dann gleich live ausgeben.
In der Hoffnung geholfen zu haben.
Torsten
Mahlzeit.
Beschreib mal wie deine Liste aufgebaut ist und wie das Ergebnis aussehen soll.
Rolf
Hi!!!
ich baue gerade eine Intranetpage mit einer Telefonliste.
Diese Telefonliste möchte ich wenn ich in meine Suchenmaske etwas eingebe durchsuchen. Da ich leider erst seit 3 Wochen mit Perl arbeite hab ich auch noch nicht wirklich Ahnung.
Den Code habe ich etwas erweitert und hoffe das ihr versteht was ich möchte!!!Der Code folgt!
Dieses Skript ist hoffnungslos veraltet, schwer lesbar, Fehler lassen sich kaum finden .... usw.
Du suchst jemanden, der dir ein Skript schreibt.
Struppi.