Klaus: Suche in einer Mitarbeiterliste

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);

HTML-Header ausgeben

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";

Variablen-Initialisierung

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(/;/,$_)];
   #}

mode=1 Ausgabe der Liste

mode=2 Ausgabe der Suchmaske

mode=3 Aufruf des Skriptes mit den Suchdaten zur Ausgabe der Suchergebnisse

mode=4 Ausgabe der Einfügemaske

mode=5 Ausführen der Eingabe in die Einfügemaske in die Liste

mode=6 Editierenmaske

mode=7 Einfügen des Editierten Eintrags

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")
#{

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='9'><h2>Suchergebnisse</h2></td></tr>";
#  print "<tr>";
#  foreach (@spalten) {
#    print "<th>$_</th>";}
#  print "</tr>";

Tabellenzeilen ausgeben

#  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>";

Tabellenzeilen ausgeben

# 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

  1. Ich bin total verwirrt!
    Kannst Du bitte Deinen Quellcode ein bisschen
    einschränken und mir genau sagen, was davon
    nicht funktioniert?

    1. #!/usr/bin/perl -w
      #mitarbeiterliste.pl    Ausgabe der CGI-Umgebungsvariablen
      #Mitarbeiterliste -w

      use strict;
      use CGI::Carp qw(fatalsToBrowser);

      HTML-Header ausgeben

      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";

      Variablen-Initialisierung

      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(/;/,$_)];
         #}

      mode=1 Ausgabe der Liste

      mode=2 Ausgabe der Suchmaske

      mode=3 Aufruf des Skriptes mit den Suchdaten zur Ausgabe der Suchergebnisse

      mode=4 Ausgabe der Einfügemaske

      mode=5 Ausführen der Eingabe in die Einfügemaske in die Liste

      mode=6 Editierenmaske

      mode=7 Einfügen des Editierten Eintrags

      #if ($parameter{"mode"} eq "3")
      #{

      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='9'><h2>Suchergebnisse</h2></td></tr>";
      #  print "<tr>";
      #  foreach (@spalten) {
      #    print "<th>$_</th>";}
      #  print "</tr>";

      Tabellenzeilen ausgeben

      #  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>";

      Tabellenzeilen ausgeben

      # 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.

      1. 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

  2. Mahlzeit.

    Beschreib mal wie deine Liste aufgebaut ist und wie das Ergebnis aussehen soll.

    Rolf

  3. 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.