Datei mit übergebenem Datum speichern

tobiasneu

Grünschnabel
Hallo nochmal,

formuliere meine Frage etwas anders, da ich schon ein wenig weitergekommen bin.

Ich habe einen Online-Kalender gebastelt mit Javascript. Wenn man auf ein Datum klickt, öffnet sich ein Editor Fenster. Javascript übergibt ein Datum an das Perl Script, das alles. Wenn ein Inhalt im Formular existiert, wird dieser auch aus einer Datei gelesen (zum Beispiel für den 15.1.2004 abgelegt in 1512004)

So jedoch möchtre ich jetzt auf den Button "Eintrag speichern" klicken und Perl soll den Inhalt in eine Datei mit dem Namen des jeweiligen Datums speichern.

Auf den Button habe ich eine Form Action gelegt; wenn ich klicke steht das in der URL: http://localhost/cgi-bin/termin_speichern.pl?datum=14.2.2004

Das Datum wird also übergeben, nur wie muss der Code aussehen, wenn ich die Datei als das in der URL angegebene Datum zu speichern.

Das habe ich bis jetzt

use CGI qw:)standard);
use strict;
my $daten = $ENV{'QUERY_STRING'};
my @datum = split(".". $daten);

my $datum_gesamt = $datum[0].$datum[1].$datum[2];
my $dateiname= '../htdocs/kalender/daten/'.$datum_gesamt;

open (DATEI, "+< $dateiname")
or die "\nDatei $dateiname konnte nicht geoeffnet werden\n";
my $inhalt;
print DATEI "$inhalt";
close (DATEI);

Jedoch kommt immer unter cmd in Windows : Datei konnte nicht geöffnet werden, aber er soll doch einfach eine neue anlegen, wenn sie nicht vorhanden ist? Kann mir jemand helfen, wie das richtig sein muss?
Das mit der Split Funktion scheint auch nicht ganz richtig zu sein.. oder reicht da ein Befehl: my $datum = param('datum') anstatt das ganze gedöhns mit my $daten etc..

Wäre echt toll, wenn jemand das wüsste, stehe auf dem Schlauch

Gruss
 
Dein Fehler ist klein, aber gravierend! :D

Bei open gibt es verschiedene Operatoren zu öffnen von Dateien:

< um eine Datei zu Lesen zu öffnen
> um eine Datei zum schreiben zu öffnen (Und nicht existieren erstellen) Beim schreiben in diese Datei wird jedweder Inhalt der in der Datei war überschrieben.
>> Um an das Ende einer Datei zu schreiben, also an bestehende Daten etwas anzufügen. Existiert die Datei nicht, wird sie erstellt.

Durch vorransetzen eines + wird die Datei zum lesen und schreiben geöffnet, allerdings wird die Datei nur erstellt wenn sie nicht existiert, wenn du +> oder +>> verwendest;

Ne ausführlichere Anleitung dazu gibts unter Perldoc: perlopentut

Bei dir müsste das dann also so aussehen:

Code:
open (DATEI, "+> $dateiname")
or die "\nDatei $dateiname konnte nicht geoeffnet werden\n";
my $inhalt;
print DATEI "$inhalt";
close (DATEI);

So wenig, kann soviel ausmachen ;)

Schönen Sonntag noch,
Sven
 
Hi,

habe ich gemacht, macht aber trotzdem immer noch HTTP 500 Serverfehler und
unter Windows Commandozeile Datei ../htdocs/kalender/daten/ konnte nicht geöffnet werden...

Das muss an etwas anderem liegen..

use CGI qw:)standard);
use strict;

my $daten = $ENV{'QUERY_STRING'};
my @datum = split(".". $daten);

my $datum_gesamt = $datum[0].$datum[1].$datum[2];

my $dateiname= '../htdocs/kalender/daten/'.$datum_gesamt;

open (DATEI, "+> $dateiname")
or die "\nDatei $dateiname konnte nicht geoeffnet werden\n";
my $inhalt;
print DATEI "$inhalt";
close (DATEI);

ABER: ER LEGT MIR DIE DATEI AN, jedoch z.b. 13.1.2004.... wie kriege ich die Punkte dazwischen weg
 
Zuletzt bearbeitet:
Hmmm, hab den Code jetzt nochmal angesehen.

Erstmal würd ich dir nochmal zur verwendung vom CGI Modul und zur Vewendung von CGI::Carp raten.

Besonders das 2. ist bei Webentwicklung geschickt, da es nämlich anstatt eines 500er Server Fehlers die Fehlermeldung des Perl Interpreters ausgibt.;

Code:
use CGI::Carp qw(fatalsToBrowser);
use CGI;
my $q = new CGI;
my $datum = $q->param('datum');

Dann dein Split ist falsch:

Code:
my @datum = split(".". $daten);
Müsste so aussehen:
my @datum = split(".", $daten);

Jetzt sind auch die Punkte im Dateinamen weg.

Als nächstes würde ich dir mal dazu raten, besser einen absoluten Pfad anzugeben. Also z.B. c:/htdocs/blub/... ist die bessere Lösung als die relativen Pfade.

Mehr ist mir jetzt mal nicht aufgefallen ;)

Schönen Sonntag noch,
Sven
 
so habe den Code umgeschrieben: Fehlermeldung: Datei C:\indigoperl\apache\htdocs\kalender\daten konnte nicht geoeffnet werden

For help, please send mail to the webmaster (admin@yourhost.com), giving this error message and the time and date of the error


Der code sieht so aus:

use CGI::Carp qw(fatalsToBrowser);
use CGI;
my $q = new CGI;
my $datum = $q->param('datum');

my $daten = $ENV{'QUERY_STRING'};
my @datum = split(".", $daten);


my $datum_gesamt = $datum[0].$datum[1].$datum[2];
my $dateiname= 'C:\indigoperl\apache\htdocs\kalender\daten'.$datum_gesamt;

open (DATEI, "+> $dateiname")
or die "\nDatei $dateiname konnte nicht geoeffnet werden\n";
my $inhalt;
print DATEI "$inhalt";
close (DATEI);

Eine datei, die auch existiert, kann auch nicht geöffnet werden KOMISCH

Er legt jetzt auch keine Datei mehr in dem Verzeichnis an.... ich drehe durch..
ich muss das heute abend noch schaffen

gruss
 
Zuletzt bearbeitet:
Ich denke mal es ist wieder nur ein kleiner unauffälliger Fehler. :rolleyes:
hier fehlt was:
my $datum_gesamt = $datum[0].$datum[1].$datum[2];
my $dateiname= 'C:\indigoperl\apache\htdocs\kalender\daten'.$datum_gesamt;

muss so hier aussehn
my $datum_gesamt = $datum[0].$datum[1].$datum[2];
my $dateiname= 'C:\indigoperl\apache\htdocs\kalender\daten\'.$datum_gesamt;

Kannst ja mal im Verzeichniss kalender gugn, da is jez sicher ne Datei daten*irgendwas*.;)
 
Zurück