Riesenproblem mit einer txt Datenbank
Jammer
- cgi
0 Tom
Hi Perl-Gurus,
als erstes sorry das ich mal wieder meine ganzen Scripts hierein poste, ich möchte niemanden als Debugger abstempeln, aber ich komme einfach nicht weiter.
Eintrag.cgi erstellt eine txt Datei die ungefähr so
Nun soll ein Eintrag auf wunsch des Users entfernt aussieht:
auto01.gif!!11111111
<br>111111
auto02.gif!!2222
<br>222
<br>
auto01.gif!!333333
<br>3
<br>3
<br>3
werden (über Form), was loesch.cgi bewerkstelligen soll.
Problem:
Die Eintrag.txt hat nach dem löschen eines Eintrags nicht mehr das selbe Format wie vorher, was aber nötig ist da ich sie weiterverwenden muß (wenn neue Einträge hinzugefügt werden sollen muß sie genauso aussehen wie vorher, nur ohne den zu löschenden Eintrag).
Ich kriege aber immer nur eine Leere zeile mit (was später bei der HTML-Seiten Generation als lehre Tabelle interpretiert wird) oder ähnlichen Mist.
Angenommen der zweite Eintrag soll entfernt werden, soll Eintrag.txt danach so aussehen:
aussieht:
auto01.gif!!11111111
<br>111111
auto01.gif!!333333
<br>3
<br>3
<br>3
dann wäre alles in Ordnung und ich könnte wieder aktualiesieren und weiter löschen. Ich versuchs jetzt schon Tagelang, aber ich komm nicht auf die Lösung, hat einer von Euch genug gedult mir zu helfen?
LOESCH.CGI
#!/usr/bin/perl
require "cgi-lib.pl";
&parse_form;
$old = "e:/Xitami/webpages/eintrag/eintrag.txt";
open (OLDFILE, $old) or die "Datei existiert nicht\n";
$Satz = "";
while (<OLDFILE>)
{
chomp($Satz);
$Satz .= $_;
}
@Ergebnis = split(/ /, $Satz);
###########
#for (@Ergebnis)
#{
#}
###########
$Laenge =$#Ergebnis;
for ($i=0; $i<$Laenge; $i++)
{
if ($in{'loeschen'} == $i+1)
{
$Ergebnis[$i]=substr($Ergebnis[$i], 1, 0) = "";
}
push (@NEU, $Ergebnis[$i]);
}
close (OLDFILE);
###############
$old = ">e:/Xitami/webpages/eintrag/eintrag.txt";
open (OLDFILE, $old) or die "Datei existiert nicht\n";
#join(@NEU," \n");
#push(@NEU, " \n");
#$Textneu=@NEU;
print OLDFILE @NEU;
close (OLDFILE);
EINTRAG.CGI
#!/usr/bin/perl
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 "<form method=get action=/aktuell.htm>\n";
print "<INPUT type=submit value=Aktualisieren>\n";
print "</form>\n";
print "</BODY>\n";
print "</HTML>\n";
$outfile3 = ">>/Xitami/webpages/eintrag/eintrag.txt";
open(OUTFILE3, $outfile3);
@Ergebnis = split(/\n/, $in{'text'}); #Eingabe wird nach jedem enter zerlegt
$Textneu=join("<br>",@Ergebnis); #zwischen jedes Element einen break setzten
print OUTFILE3 "$in{'image'}!!$Textneu \n";
#print OUTFILE3 "$in{'image'}!!$in{'text'}\n";
close(OUTFILE3);
nach den Scripts soll dann die txt (sofern sie aussieht wie früher) benutzt werden um HTMLSeiten zu erstellen (das hab ich schon).
Nur das die eintrag.txt vor und nach dem Löschen das selbe format hat fehlt mir...
vielen vielen Dank im voraus (und bitte nicht sauer sein wegen der kompletten Scripts, ich habs echt versucht)
mfg
Jammer
Hallo Jammer
Ich versuche mal in das Problem einzusteigen, werde aber zuerst einige Verständnissfragen stellen, um mit Deinem Wissensstand gleichzuziehen:
Nun soll ein Eintrag auf wunsch des Users entfernt aussieht:
auto01.gif!!11111111111111
auto02.gif!!2222222
auto01.gif!!333333
3
3
3
-Ist die Eintrag.txt eine Datensatz/Feld-orientiertes Datenbankformat ?
D. h. ein Feld wird durch ein Feldtrennzeichen (z.B. ; oder oder eben !!) vom anderen Feld getrennt. Der Datensatz (Record, Eintrag) wird durch ein Datensatz-Endzeichen (in der Regel Zeilenwechsel, als \n unter Unix, \r\n unter Windows/Dos und \r unter Mac) vom nächsten getrennt.
Welche Felder sind in Deiner 'Tabelle' definiert ?
Welche Felddatentypen verwendest Du ?
D. h. Welche Daten sollen in den Feldern dargestellt werden.
Diese vielen Fragen stelle ich, weil Deine Probleme wahrscheinlich von einer ungeigneten Datenstruktur herrühren. Definere mir bitte, welche Informationen in der Eintrag.txt gespeichert und verarbeitet werden müssen.
Vielleicht kommen wir dann der Lösung näher.
Grüsse
Tom