perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 28
Click for quality!




11.02.2012 / 12:40

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  CGI: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragDaten 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

Beitragre: 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

Beitragre: 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

Beitragre: Daten aus textbasierter DB löschen/ "Abmelden"?
Seitenanfang
... und du liest nur eine Zeile ein ;)

Datum: 18.06.2007-18:20

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

-






-
-