|
|
 |

|

 |

| Community » CGI: Allgemeines Forum |
|
Daten aus textbasierter DB löschen/ "Abmelden"?
|
Seitenanfang |
| Hallo, bin in Sachen CGI/Perl ein ziemlicher Anfänger, aber versuche mich zur Zeit da ein bisschen einzuarbeiten. Es geht darum, dass ich bei einer schon bestehenden CGI/perl Anwendung etwas modifizieren soll, aber nicht so wirklich weiterkomme. Es handelt sich dabei um eine Seite zum Anmelden/Speichern von Daten, wobei dabei Name etc. in einem Formular aufgenommen werden und dann in eine textbasierte Datenbank (*.dat) gespeichert werden mittels des print Befehls. Dabei wird dann gleichzeitig noch geprüft, ob alle Daten eingegeben wurden, und ob es zu doppelten Eintragungen kommt (mittels eindeutiger Identifikationsnummer). Erweitert werden soll das ganze nun in sofern, dass nun auch die Möglichkeit bestehen soll, sich wieder abzumelden. Also mittels der eindeutigen Identifikationsnummer soll der jeweilige Datensatz dann aus der Datenbank wieder gelöscht werden. Habe nun auch schon in einigen Büchern gestöbert, aber bezüglich einer solchen Option nichts konkretes gefunden. Für Tipps und Hilfe wäre ich sehr dankbar, Jack PS: Hier in etwas das Format, indem die Daten gespeichert werden: Iden.nr.#Nachname#Vorname#Email#Datum#Zeit#Code 12321#Test#Test#a.b@c.de#13.02.2007#13:03:03#kkhhz
Datum: 17.06.2007-22:28

|
re: Daten aus textbasierter DB löschen/ "Abmelden"?
|
Seitenanfang |
| Moin Auch ich bin kein Guru :) open(DATA,"file.dat"); my $file = <DATA>; close(DATA); my @file = split(/\#/,$file); my $i; while($i<=$#file){ # Anhand der E-Mail Addy löschen if($file[$i+2] eq $mail){ splice(@file,$i+2,6); last; } $i = $i + 6; } open(DATA,">file.dat"); print DATA join"\#",$file; close(DATA); Das Beispiel hab ich mal fix im Schleier des Guten Morgen Kaffes getickert. Es ist ungetestet und kann Fehler enthalten. Es empfiehlt sich des weiteren ausdrücklich noch Flock für die Dat Operationen mit einzubinden. Allerdings ist eine solche Datenstruktur Schitt. Relativ langsam und bei Fehler kommt es schnell zur Katastrophe. Ich kann nur MySQL empfehlen, oder arbeite mit einem Index und sep. Userfiles. MFG Sonixx
Datum: 18.06.2007-04:54

|
re: Daten aus textbasierter DB löschen/ "Abmelden"?
|
Seitenanfang |
| Da gehts schon los ... :( Update : splice(@file,$i+2,6); WIRD splice(@file,$i,6);
Datum: 18.06.2007-04:56

|
re: Daten aus textbasierter DB löschen/ "Abmelden"?
|
Seitenanfang |
| ... und du liest nur eine Zeile ein ;)
Datum: 18.06.2007-18:20

|
re: Daten aus textbasierter DB löschen/ "Abmelden"?
|
Seitenanfang |
| Waere nicht schlecht auch etwas vom Code zu sehen, denn es gibt viele Moeglichkeiten eine Textdatenbank zu oeffnen und sie zu bearbeiten. Am einfachsten ist das zeilenweise Bearbeiten von Dateien mit Tie::File;
use Tie::File;tie(@datei_inhalt, 'Tie::File', $datei_name) # Datei an das Array '@datei_inhalt' binden or die $!; splice(@datei_inhalt, $zeilen_nr, 1); # eine Zeile aus der Datei entfernen untie(@datei_inhalt); # nach abgeschlossenerer Bearbeitung Datei wieder vom Array loesen
Datum: 18.06.2007-18:10

|
re: Daten aus textbasierter DB löschen/ "Abmelden"?
|
Seitenanfang |
| Dash es gibt in dieser Datenstruktur nur eine Zeile ... alles getrennt durch *#* Aber mach mich ruhig runter :D MFG Sonixx
Datum: 19.06.2007-06:06

|
re: Daten aus textbasierter DB löschen/ "Abmelden"?
|
Seitenanfang |
| Ja, die Datei wird wohl dann doch aus mehreren Zeilen bestehen ;) Ist ja schon richtig, als Beispiel soll das ja genuegen :)
Datum: 19.06.2007-10:54

|
re: Daten aus textbasierter DB löschen/ "Abmelden"?
|
Seitenanfang |
| Hallo als die Textdatei sieht folgendermaßen aus: Nr.#Nachname#Vorname#Email#Datum#Zeit#Code 145487#Max#Mustermann#max.mustermann@a.de#25.06.2007#12:53:16#RRyuQsyQ5s 168485#Tim#Mustermann#tim.mustermann@a.de#25.06.2007#12:58:06#RRyuQs5fys Sprich jeder Eintrag steht in eine eigenen Zeile und eindeutig identifiziert wird über die Nr.. Und hier ein Auszug aus meinem Ansatz: open(DATEI, ">>$daten.dat") || die "Die Datei konnte nicht geöffnet werden."; flock(DATEI,2); my @datei=<DATEI>; foreach (@datei){ my $nr=$_; $nr=~/^.*#/; if ($nummer==$nr){ print ???; } } close(DATEI); } Ich dachte jetzt eben, dass es möglich sei, dann man nun sozusagen, wenn die Nummern übereinstimmen, man dann die Zeile löschen kann, ich weiss aber nicht, ob das so möglich ist. Mit dem Vorschlag von Sonixx weiss ich leider nicht so recht was anzufangen: my @file = split(/\#/,$file); my $i; while($i<=$#file){ # Anhand der E-Mail Addy löschen if($file[$i+2] eq $mail){ splice(@file,$i+2,6); last; } $i = $i + 6; } open(DATA,">file.dat"); print DATA join"\#",$file; Eine Erläuterung dazu wäre sehr nett, da ich wie gesagt mich erst in CGI einarbeite. Vielen Dank schon mal im voraus!
Datum: 28.06.2007-10:11

|
|

|

|

|
 |

|

|
|