andi: löschen funktion im script einfügen

hallo dies ist mein perl script.
kann mir bitte jemand schnell die löschen funktion einfügen in mein script.
dies schaff ich leider nicht. danke
#####################mein script ohne löschen funktion##########

#!/usr/bin/perl

cgi-funktionen laden

require "./cgi-lib.pl";

#array + hash werden hier ausgegeben.
#der hash wird im formtext verschiedene schreibstile festgelegt
@formfeld=qw( vn name str plz ort land email );
%formtext=qw( vn Vorname name Name str Straße plz PLZ ort Ort land Land email Email );

#------------------------------------

jetzt %in auffüllen

&ReadParse;

die gewünschte funktion

$fct=$in{fct};

datendatei

#hier werden die daten die man eingibt in verschiedene .db gespeichert
$data="/tmp/formdaten.db";
$data_tmp="/tmp/formdaten.db_tmp";
$id_file="/tmp/formdaten.id";

delimiter (trennzeichen);

$dl=";";
#------------------------------------ AUSGABE HEADER

gebe content + html-header aus

#html grundgerüst
print "Content-type: text/html\n\n";
print "<HTML><BODY BGCOLOR=#808080>\n";
print "<FORM ACTION=$ENV{SCRIPT_NAME} >\n";
print "<h2>Herzlich Willkommen auf XXX</h2><BR>
<FONT SIZE=7>$ENV{QUERY_STRING}</FONT><BR><HR>";

nur zur kontrolle

print "Verfügbare Daten:<BR>";
print "<TABLE bgcolor=red>";
#hier werden die daten einzeln aufgeführt
foreach $key (keys %in ){
 print "<TR><TD>$key:<TD> $in{$key}<BR>";

}

print "</TABLE>";
#----------------------------------- FUNKTIONEN
sub menu{
 print "
<HR>
<H1>Menü $ENV{SCRIPT_NAME}</H1><BR>
<TABLE>
<TR><TD>Funktion:<TD>
<SELECT NAME=fct>
<OPTION VALUE=>nichts
<OPTION VALUE=neuanlage>Neuanlage
<OPTION VALUE=loeschen>Loeschen
<OPTION VALUE=suchen SELECTED>Suchen
</SELECT><BR>
";
for $i (0..$#formfeld){
 print "<TR><TD>$formtext{$formfeld[$i]}<TD><INPUT TYPE=text NAME=$formfeld[$i] ><BR>";
}
print "
<TR><TD><TD> <INPUT TYPE=submit VALUE=ok>
</TABLE>
<HR>
"

}

#---------------------------------- ID lesen
sub alt_id{
        # lesen alte id
        open (IN, "$id_file");
        while (<IN>){ chomp; $alt_id=$_;}
        close IN;
        # wenn alte id < 10000
        if ( $alt_id < 10000 || $alt_id eq "" ){
                # id=10000
                $alt_id=10000;
        }
        # gebe wert zurück
        # testen letzter wert aus db
        open (IN, "$data_dir/$db");
        while (<IN>){
                chomp;
                local (@feld)=split(/$dl/,$_);
                if ( $alt_id < $feld[0]){
                        $alt_id=$feld[0];
                }
        }
        return ($alt_id);
}
#---------------------------------- ID speichern

sub save_id{
        # abspeichern id_nr
        local ( $letzt_id )=@_;
        open (ID, ">$id_file");
        print ID "$letzt_id";
        close ID;
}

#---------------------------------- Löschen Datensatz
sub loeschen_id{
 local ($zuloeschen_id)=@_;
 open ( IN, "$data" );
 open ( OUT, ">$data_tmp" );
 while (<IN>){
  chomp;
  if ( !( $_ =~ /^$zuloeschen_id;/ ) ){
   print OUT "$_\n";
   print "NICHT LÖSCHEN: $_<BR>";
  }else{
   print "LÖSCHEN: $_<BR>";
  }
 }
 close IN;
 close OUT;
 system ("mv ${data_tmp} $data");
}

#---------------------------------- Schreiben

sub neuanlage{
 # hier sollten die vars aus dem formular
 # abgespeichert werden

# letzte id
 # 1. letzte id überprüfen
        local $neu_id=&alt_id;
        # 2. letzte id erhöhen
        $neu_id++;

if ( $in{id_nr} <= $neu_id ){ $in{id_nr}=$neu_id;}

# letzte id speichern
        &save_id($neu_id);

# datensatz zusammenstellen (fängt mit $id an);
 local $out="$neu_id$dl";
 for $i (0..$#formfeld){
  $out=$out."$in{$formfeld[$i]}$dl";
 }
 # öffnen der datei
 open ( OUT, ">>$data");
print "OUT>  $out<BR>";
 # satz schreiben
 print OUT "$out\n";

# schließen
 close OUT;
}
#----------------------------------- LESEN DATEI
sub lesen {
 local ( $feldnr, $muster, @daten )=@_;
 local $i=0;
 local @zeile="";
 if ( $daten[0] eq "" ){
  open ( IN, "$data" );
  while (<IN>){
   chomp;
   local @feld=split( /$dl/, $_  );
   if ( $feld[$feldnr]=~/$muster/ ){
    $zeile[$i]=$_;
    $i++;
   }
  }
  close IN;
 }else{
  while ( <@daten> ){
   local @feld=split( /$dl/, $_  );
   if ( $feld[$feldnr]=~/$muster/ ){
    $zeile[$i]=$_;
    $i++;
   }
  }
 }
 return ( @zeile );
}
#----------------------------------- SUCHEN

sub suchen{
 @ausgabe0=&lesen(0,"$in{vn}");
 @ausgabe1=&lesen(1,"$in{name}", @ausgabe0);
 @ausgabe2=&lesen(2,"$in{email}",@ausgabe1);
 return @ausgabe2;
}
#----------------------------------- AUSGABE
sub ausgabe {
 local ($schalter, @zeile)=@_;
 local @feld="";
 local $j,$i,$out;
 # template einlesen
 open ( IN, "./tab.tmpl");
 while (<IN>){
  $template=$template.$_;
 }
 close IN;

for $i (0..$#zeile){
  $eintrag=$template;
  # aufteilen in Felder
  @feld=split(/$dl/,$zeile[$i]);
  $eintrag=~s/XXXFELD0XXX/$feld[0]/g;
  $eintrag=~s/XXXFELD1XXX/$feld[1]/g;
  $eintrag=~s/XXXFELD2XXX/$feld[2]/g;
  $eintrag=~s/XXXFELD3XXX/$feld[3]/g;
  $eintrag=~s/XXXFELD4XXX/$feld[4]/g;
  $eintrag=~s/XXXFELD5XXX/$feld[5]/g;
  $out=$out.$eintrag;
 }
 return $out;
}

sub ausgabe2 {
 local ($schalter, @zeile)=@_;
 local @feld="";
 local $j,$i,$out;
 $out="<TABLE BGCOLOR=yellow>\n";
 for $i (0..$#zeile){
  # aufteilen in Felder
  @feld=split(/$dl/,$zeile[$i]);
  $out=$out."<TR>";
  for $j (0..$#feld){
   $out=$out."<TD>$feld[$j]</TD>";
  }
  if ( $schalter eq "l" ){
   $out=$out."<TD><A HREF=$ENV{SCRIPT_NAME}?fct=loeschen2&zuloeschen_id=$feld[0]>Löschen</A>";
  }
  $out=$out."</TR>\n";
 }
 $out=$out."</TABLE>\n";
 return $out;
}

#----------------------------------- HAUPTPROGRAMM

wenn script ohne optionen aufgerufen wird

dann

if ( $fct eq "" ){
 # gebe auswahlformular aus
 print "Bitte wählen Sie eine Funktion!<BR>";
 print "Zum Neueintrage wählen Sie bitte die Funktion: <font color='red'><B>NEUEINTRAG</B></font>";
 print"<BR>";
 print "Zum suchen wählen Sie bitte die Funktion:<font color='green'><B>SUCHEN</B></font>";

ansonsten, wenn die funktion gleich "neuanlage"

}elsif ( $fct eq "neuanlage" ){

# aufruf der funktion "neuanlage"
 &neuanlage;
 # kommentar

print "Ihre Eingabe lautet wie folgt: ";
 print "$in{vn};$in{name};$in{email};$in{gebdatum};\n";
 print "Vielen Dank<BR>";

}elsif ( $fct eq "suchen" ){
 print "<HR>suchen nach vn <B>und</B>  name <B>und</B> email";
 print &ausgabe("" , &suchen);
 print "<HR>";
}elsif ( $fct eq "loeschen" ){
 # selektieren nach vn, name, email
 @select=&suchen;
 # auflisten und möglichkeit zum löschen geben
 print &ausgabe("l",@select);
 # (folgefct = loeschen2)
}elsif ( $fct eq "loeschen2" ){
 # loeschen eines datensatzes
 &loeschen_id($in{zuloeschen_id});
}else{
 # gebe die gewünschte funktion aus
 print "<H2>--- $fct ---  soll ausgeführt werden</H2><br>";
}
&menu;

html footer

print "</FORM></BODY></HTML>";
1;

  1. Was soll den gelöscht werden? ==> ${data_tmp}????
    Die wird doch umbenannt. Ist mir ein wenig schleierhaft.

    Zum löschen von Datein verwende ich unlink("URI")!!

    GVT

    1. RE:

      es sollen die eingaben die gemacht werden können wieder durch die löschen option wieder gelöscht werden.
      ich bin gerade in einer prüfung, und komme hier aber nicht drauf wie ich sie löschen kann. bin heil froh das das programm wenigstens so wieder läuft. kannst mir deinen vorschlag gerne unterbreiten wenn es funktioniert.
      sag auf jedenfall schon mal
      vielen dank
      andi

      1. ich bin gerade in einer prüfung, und komme hier aber nicht drauf wie ich sie löschen kann.

        Beim Schummeln hilft hier aber keiner. Erst recht nicht mit solch einer anmaßenden Aufforderung "Mach mal einer das rein da!".

        - Sven Rautenberg