Laut syntax-check ist das skript i.O. dennoch bekomme ich immerwieder nen Internal server error.
was ist eine Syntaxcheck bei dir?
Du hast das Skript in der Konsole aufgerufen und alles war i.O.?
Weiss jemand Rat? Waere super!
Zu dem Skript fällt mir viel ein.
#!/usr/local/bin/perl
Der Pfad sieht verdächtig aus, kann aber stimmen.
Du solltest dir die Warnungen (zumidnest in der Testphase) ausgeben lassen.
#!/usr/local/bin/perl -w
ebenso, wie schon erwähnt use strict verwenden, damit kannst du dir viele Stunden Fehlersuche ersparen.
use CGI::Carp qw(fatalsToBrowser);
use HTML::Parser;
Es ist zwar nicht erkennbar wofür du dieses Modul nutzt, aber du scheinst Module zu kennen, daher wäre dir noch CGI.pm an's Herz gelegt. ein Modul das überall zu Verfügung stehen sollte und dir viele Dinge rund um CGI Skripte abnimmt.
Daten vom Formular bekommen
...
Das zum Beispiel könntest du alles komplett sparen.
$datum = $Formular{'datum'};
$titel = $Formular{'titel'};
$betreuer = $Formular{'betreuer'};
$mitgliedskarten = $Formular{'mitgliedskarten'};
$zuzahlung = $Formular{'zuzahlung'};
$ermaessigtekarten = $Formular{'ermaessigtekarten'};
$ermaessigtekartenwert = $Formular{'ermaessigtekartenwert'};
$schuelerkarten = $Formular{'schuelerkarten'};
$schuelerkartenwert = $Formular{'schuelerkartenwert'};
$normalkarte = $Formular{'normalkarte'};
$normalkartenpreis = $Formular{'normalkartenpreis'};
$rabattmarken = $Formular{'rabattmarken'};
$vorstand = $Formular{'vorstand'};
$presse = $Formular{'presse'};
$gaeste = $Formular{'gaeste'};
$besuchergesamt = $Formular{'besuchergesamt'};
$spenden = $Formular{'spenden'};
$einnahmengesamt = $Formular{'einnahmengesamt'};
$ausgaben = $Formular{'ausgaben'};
$honorar = $Formular{'honorar'};
$einzuzahlendeeinnahmen = $Formular{'einzuzahlendeeinnahmen'};
$kinstiut = $Formular{'kinstitut'};
$bemerkung = $Formular{'bemerkung'};
dir ist klar das du jetzt die CGI Parameter in drei verschiedenen Variabeln global kopiert hast?
Da sehe ich eine gewisse Redundanz
if ($datum eq '')
{
&error
};
...
Das ist auch nicht wirklich schön.
Perl bietet solche Konstrukte dafür an:
error() unless $datum;
Allerdings würde ich sowas in eine Funktion validierung() o.ä. auslagern, du produzierst so unleserlichen Spaghetticode.
$anzbesucher = $mitgliedskarten + $ermaessigtekarten + $schuelerkarten + $normalkarte + $vorstand + $presse + $gaeste;
$anzzahlendebesucher = $mitgliedskarten + $ermaessigtekarten + $schuelerkarten + $normalkarte;
$einnahmen = ($mitgliedskarten * $zuzahlung) + ($ermaessigtekarten * $ermaessigtekartenwert) + ($schuelerkarten * $schuelerkartenwert) + ($normalkarte * $normalkartenpreis) - ($rabattmarken * 3);
$erreinzuzahlendeeinnahmen = $einnahmen - $ausgeben;
$finanzergebnis = $einnahmengesamt + ($mitgliedskarten *12) + ($mitgliedskarten * $zuzahlung) - $ausgaben - $honorar;$zuzmgl = $mitgliedskarten * $zuzahlung;
$wertmglk = $mitgliedskarten * 12;
$wertermk = $ermaessigtekarten * $ermaessigtekartenwert;
$wertschuelerk = $schuelerkarten * $schuelerkartenwert;
$wertnormk = $normalkarte * $normalkartenpreis;
Das ist auch Spaghetticode.
Nummer für Eintrag holen...
open (DATA, "</usr/www/users/danfun/kr/docs/count.dat") or die "kann counterfile nicht lesen! : $!";
@Zahl = <DATA>;
# $MyZahl = @Zahl[0];
$Myzahl = join("",@Zahl);
close(DATA);
$Orizahl = $Myzahl;
$Myzahl++;
Falls du $Myzahl später wieder in den Counter schreiben willst, ist dieser Ansatz unbrauchbar. du solltest mal einen Blick in deine Perl Doku (einer wird nicht genügen, diese ist sehr umfangreich) werfen, speziell in die FAQ5
Deutsches Datum machen
$Jetztwert = time();
$Jetztzeit = localtime($Jetztwert);
&Deutschnamen;
@Zeit = split(/ +/,$Jetztzeit);
@Uhrzeit = split(/:/,$Zeit[3]);
Das geht ebenfalls einfacher mit Modulen:
use POSIX qw(strftime);
my $Jetztzeit = strftime "%D.%B.%Y", localtime( time() - 10000000 );
(oder welche Formatierung du wünscht)
Struppi.
Javascript ist toll (Perl auch!)