pantera555: Ärger mit auslesen von Formularen

Hallo,
habe eine dringende frage:
Ich habe dieses Formular (unten). Ich möchte nun wenn der Anwender auf löschen klickt, dass dieser Eintrag entfernt wird. (Eintrag: einmal das gif und der Text)
Ich dachte daran, dass eine txt erstellt wird und die Einträge die gelöscht werden sollen dort nichtmehr gespeichert werden, danach lese ich sie erneut aus und erstelle die aktuelle Page. Allerdings schaffe ich es nicht das der ausgewählte Eintrag verschwindet und die anderen trotzdem dargestellt werden.
Wer kennt eine Lösung für dieses Problem?
danke.

<HTML>
<HEAD>
<TITLE>Caravan Auto</TITLE>
<HEAD>
<BODY bgcolor=dcdcb4>
<table width=450 border=1><tr><td>
<img src=e:/Xitami/webpages/eintrag/img/auto01.gif
</td>
<td>
Test, dieser

</td></tr></table>
<form method=get action=/cgi-bin/loesch.cgi>
<INPUT NAME=loeschen TYPE=RADIO ALIGN=left VALUE=1>Datensatz löschen?
<INPUT type=submit value=Senden>
</form>
<BR><BR>
<HTML>
<HEAD>
<TITLE>Caravan Auto</TITLE>
<HEAD>
<BODY bgcolor=dcdcb4>
<table width=450 border=1><tr><td>
<img src=e:/Xitami/webpages/eintrag/img/auto01.gif
</td>
<td>
Noch ein Test

</td></tr></table>
<form method=get action=/cgi-bin/loesch.cgi>
<INPUT NAME=loeschen TYPE=RADIO ALIGN=left VALUE=2>Datensatz löschen?
<INPUT type=submit value=Senden>
</form>

  1. Hi,

    Ich dachte daran, dass eine txt erstellt wird und die Einträge die gelöscht werden sollen dort nichtmehr gespeichert werden, danach lese ich sie erneut aus und erstelle die aktuelle Page. Allerdings schaffe ich es nicht das der ausgewählte Eintrag verschwindet und die anderen trotzdem dargestellt werden.

    die Lösung ist richtig, das Formular hilft leider auch nicht weiter. Interessant wäre es zu wissen, wie die Datenbank aufgebaut ist und wie der Quellcode lautet, mit dem Du die zu löschenden Daten extrahierst.

    Cheatah

    1. Hi,
      also ich erkläre mal ein bisschen Hintergrund:
      Man kann über ein Formular Daten (gif+text) eingeben, diese werden in einer txt gespeichert. Danach lese ich diese txt aus und generiere daraus diese Formularsite. Hier soll der Anwender jetzt entscheiden, ob er alle Einträge behalten möchte oder nicht.

      mein Problem:Wenn nicht soll eine neue HTML-Seite erzeugt in der die, die er zum löschen markiert hat nicht mehr vorhanden sind.

      hierzu wollte ich wie gesagt die HTML Datei auslesen und die markierten Einträge löschen, was ich aber nicht ganz hinbekomme. Eigentlich soll nur das zuvor gepostete Formular ausgelesen werden und daraus eine txt (ohne zum löschen markierte Einträge) generiert werden. Diese würde ich dann wiederum auslesen um die entgültige HTML-Seite zu erstellen.

      Sorry fürs drumrumlabern, ich finde es schwer zu erklären.

      also so sieht der Inhalt/Erstellung der txt aus aus dem das gepostete Formular erstellt wird:
      require "cgi-lib.pl";
      require "datum.pl";

      &parse_form;

      $date=&ctime (time);
      chop($date);

      print "Content-type: text/html\n\n";
      print "<HTML>\n";
      print "<HEAD>\n";
      print "<TITLE>Online Eintragung</TITLE>\n";
      print "<BODY bgcolor=dcdcb4>\n";
      print "<h3>Eintragung in die eintrag.txt</h3>\n";
      print "Sie haben folgende Eintragungen vorgenommen:<br>\n";
      print "<center>\n";
      print "<table width=400>\n";
      print "<tr><td>\n";
      print "<ul>\n";
      print "<li>Name des Bildes: <b> $in{'image'} </b></li>\n";
      print "<li>Beschreibung: </li>\n";
      print "<b> $in{'text'} </b>\n";
      print "</ul>\n";
      print "<br><br>\n";
      print "<b><a href=/eintrag.htm>Zurück zum Eingabeformular</b></a><p>\n";
      print "</BODY>\n";
      print "</HTML>\n";

      $outfile3 = ">>/Xitami/webpages/eintrag/eintrag.txt";
      open(OUTFILE3, $outfile3);
      print OUTFILE3 "$in{'image'}!!$in{'text'}&&&\n";
      close(OUTFILE3);

      Inhalt:
      auto01.gif!!Test, dieser
      auto01.gif!!Noch ein Test
      auto02.gif!!Ein letzter Test
      auto02.gif!!Ein aller letzter Test
      autos01.gif!!Mist

      Hiermit lese ich dann die txt wieder aus:
      require "cgi-lib.pl";

      &parse_form;

      if ($in{'passwd'} eq 'admin')
      {
      $old = "<e:/Xitami/webpages/eintrag/eintrag.txt";
      $new = ">e:/Xitami/webpages/eintrag/autos.htm";
      $del = ">e:/Xitami/webpages/eintrag/loeschen.htm";

      open(INFILE, $old) or die "datei existiert nicht!";
      open(NEW, $new);
      open(DEL, $del);
      $i=0;
        while (<INFILE>)
          {  
        
         $i++;
         $all = $_;
        @lines = split(/!!/, $all);
         print NEW "<HTML>\n";
         print NEW "<HEAD>\n";
         print NEW "<TITLE>Caravan Auto</TITLE>\n";
         print NEW "<HEAD>\n";
         print NEW "<BODY bgcolor=dcdcb4>\n"; # Keine "" in den TAGS verwenden!!!
         print NEW "<table width=450 border=1><tr><td>\n";
         print NEW "<img src=e:/Xitami/webpages/eintrag/img/$lines[0] >\n";
            print NEW "</td>\n";
         print NEW "<td>\n";
         print NEW " $lines[1] \n";
         print NEW "</td></tr></table>\n";
        # print NEW "<form method=get action=/cgi-bin/loesch.cgi>\n";
        # print NEW "<INPUT NAME=loeschen TYPE=RADIO ALIGN=left VALUE=$i>Datensatz löschen?\n";
         #print NEW "<INPUT type=submit value=Senden>\n";
        # print NEW "</form>\n";
         print NEW "<BR><BR>\n";
        
         print DEL "<HTML>\n";
         print DEL "<HEAD>\n";
         print DEL "<TITLE>Caravan Auto</TITLE>\n";
         print DEL "<HEAD>\n";
         print DEL "<BODY bgcolor=dcdcb4>\n"; # Keine "" in den TAGS verwenden!!!
         print DEL "<table width=450 border=1><tr><td>\n";
         print DEL "<img src=e:/Xitami/webpages/eintrag/img/$lines[0] >\n";
            print DEL "</td>\n";
         print DEL "<td>\n";
         print DEL " $lines[1] \n";
         print DEL "</td></tr></table>\n";
         print DEL "<form method=get action=/cgi-bin/loesch.cgi>\n";
         print DEL "<INPUT NAME=loeschen TYPE=RADIO ALIGN=left VALUE=$i>Datensatz löschen?\n";
         print DEL "<INPUT type=submit value=Senden>\n";
         print DEL "</form>\n";
         print DEL "<BR><BR>\n";
        
      }
      }
      close(INFILE);
      close(NEW);

      Daraus entsteht dann unter anderem dieses Formular:
      <HTML>
      <HEAD>
      <TITLE>Caravan Auto</TITLE>
      <HEAD>
      <BODY bgcolor=dcdcb4>
      <table width=450 border=1><tr><td>
      <img src=e:/Xitami/webpages/eintrag/img/auto01.gif >
      </td>
      <td>
      Test, dieser

      </td></tr></table>
      <form method=get action=/cgi-bin/loesch.cgi>
      <INPUT NAME=loeschen TYPE=RADIO ALIGN=left >Datensatz löschen?
      <INPUT type=submit value=Senden>
      </form>
      <BR><BR>
      <HTML>
      <HEAD>
      <TITLE>Caravan Auto</TITLE>
      <HEAD>
      <BODY bgcolor=dcdcb4>
      <table width=450 border=1><tr><td>
      <img src=e:/Xitami/webpages/eintrag/img/auto01.gif >
      </td>
      <td>
      Noch ein Test

      </td></tr></table>
      <form method=get action=/cgi-bin/loesch.cgi>
      <INPUT NAME=loeschen TYPE=RADIO ALIGN=left >Datensatz löschen?
      <INPUT type=submit value=Senden>
      </form>
      <BR><BR>
      <HTML>
      <HEAD>
      <TITLE>Caravan Auto</TITLE>
      <HEAD>
      <BODY bgcolor=dcdcb4>
      <table width=450 border=1><tr><td>
      <img src=e:/Xitami/webpages/eintrag/img/auto02.gif >
      </td>
      <td>
      Ein letzter Test

      </td></tr></table>
      <form method=get action=/cgi-bin/loesch.cgi>
      <INPUT NAME=loeschen TYPE=RADIO ALIGN=left VALUE=3>Datensatz löschen?
      <INPUT type=submit value=Senden>
      </form>
      etc....

      So und das soll jetzt wiederum ausgelesen werden, wenn der Anwender einen Eintrag nicht will soll er verschwinden.

      Ich hoffe jetzt versteht man was ich meine
      danke.

      1. Ups, nochmal das letzte Formular, irgendwie hatte ich die anderen VALUE Werte abgeschnitten.

        <HTML>
        <HEAD>
        <TITLE>Caravan Auto</TITLE>
        <HEAD>
        <BODY bgcolor=dcdcb4>
        <table width=450 border=1><tr><td>
        <img src=e:/Xitami/webpages/eintrag/img/auto01.gif >
        </td>
        <td>
        Test, dieser

        </td></tr></table>
        <form method=get action=/cgi-bin/loesch.cgi>
        <INPUT NAME=loeschen TYPE=RADIO ALIGN=left VALUE=1>Datensatz löschen?
        <INPUT type=submit value=Senden>
        </form>
        <BR><BR>
        <HTML>
        <HEAD>
        <TITLE>Caravan Auto</TITLE>
        <HEAD>
        <BODY bgcolor=dcdcb4>
        <table width=450 border=1><tr><td>
        <img src=e:/Xitami/webpages/eintrag/img/auto01.gif >
        </td>
        <td>
        Noch ein Test

        </td></tr></table>
        <form method=get action=/cgi-bin/loesch.cgi>
        <INPUT NAME=loeschen TYPE=RADIO ALIGN=left VALUE=2>Datensatz löschen?
        <INPUT type=submit value=Senden>
        </form>
        <BR><BR>
        <HTML>
        <HEAD>
        <TITLE>Caravan Auto</TITLE>
        <HEAD>
        <BODY bgcolor=dcdcb4>
        <table width=450 border=1><tr><td>
        <img src=e:/Xitami/webpages/eintrag/img/auto02.gif >
        </td>
        <td>
        Ein letzter Test

        </td></tr></table>
        <form method=get action=/cgi-bin/loesch.cgi>
        <INPUT NAME=loeschen TYPE=RADIO ALIGN=left VALUE=3>Datensatz löschen?
        <INPUT type=submit value=Senden>
        </form>

      2. Hi,

        mein Problem:Wenn nicht soll eine neue HTML-Seite erzeugt in der die, die er zum löschen markiert hat nicht mehr vorhanden sind.

        ja, jetzt weiß ich genauso viel wie vorher; ich kann nämlich nur ahnen, daß Du nicht weißt, wie Du markierte Elemente nicht wieder in die Datei zurückschreibt. Erst mal vorweg:

        require "cgi-lib.pl";
        require "datum.pl";

        Bitte kürze Quelltexte sinnvoll. Etwa 90% von dem, was Du gepostet hast, ist völlig überflüssig, erschwert das Lesen und landet zudem unnötigerweise im Archiv.

        Nun zurück zum Thema. Du mußt zunächst dafür sorgen, daß eine Verbindung zwischen dem Elementname (Löschung markieren) und der zu löschenden Zeile bzw. den Daten darin besteht. Wenn ich das richtig gesehen habe, geschieht das hier über eine Nummer. Prima. Nun mußt Du also nur noch die Datei einlesen und danach alle Zeilen zurückschreiben, die nicht markiert sind:

        open(READ,$datei) or die "Kann $datei nicht zum Lesen oeffnen: $!";
        my @array = <READ>;
        close(READ);
        open(WRITE,">$datei") or die "Kann $datei nicht zum Schreiben oeffnen: $!";
        for (my $i=0; $i<=scalar(@array); $i++) {
          print WRITE $array[$i] unless ($in{$i});
        }
        close(WRITE) or die "Kann $datei nicht schliessen: $!";

        Die Detailfragen, z.B. ob Du damit wirklich immer die richtige Zeile erwischst (oder vielleicht die nächste/vorherige), überlasse ich Dir :-)

        Cheatah