Thread Perl-CGI zeigt nur Quelltext (3 answers)
Opened by Tolotos at 2016-10-24 12:44

Tolotos
 2016-10-24 12:44
#185533 #185533
User since
2016-10-24
2 Artikel
BenutzerIn
[default_avatar]
Hallo Leute,

ich habe ein etwas seltsames Problem: Ich selbst habe keine Ahnung von Perl (d.h. insbesondere der Syntax), kann aber sonst ein wenig Programmieren (vor allem in C).
Zur Optimierung der Prioritäten der Studenten für ihren Übungstermin verwenden wir hier an der Uni ein Perl-Skript, dass mein Vor-Vor-Vorgänger, den ich nichtmal kenne, geschrieben hat. Bisher war das auch kein Problem, man musste nur die entsprechenden Pfade anpassen bzw. neu erstellen (ws1516 zu ws1617 usw.), dann lief alles problemlos.

Leider ist es dieses Jahr aus einem mir unbekannten Grund so, dass in dem Moment, in dem man auf Absenden drückt statt der eigentlich geplanten Rückmeldung an den Benutzer "Herzlichen Glückwunsch, sie haben sich mit folgenden Daten registriert:..." einfach der gesamte Quelltext des Programms erscheint. Abgeschickt werden dabei auch keine Daten.

Ich habe jetzt versucht, was mit den früheren Anmelde-Formularen passiert (die noch online stehen), und der tritt der gleiche Fehler auf (obwohl sie in den entsprechenden Jahren definitiv funktioniert haben).

Hat vielleicht jemand von euch eine Idee, was im folgenden Programm falsch läuft?

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# !/usr/bin/perl -w
use strict;
use CGI::Carp qw(warningsToBrowser fatalsToBrowser); 


my $path        = '/exports/ag/ag-eschmeier/subscribe/ws1617/files/';
my $trenner     = "#"; 


###########################################################
# Read input
###########################################################
read (STDIN, my $buffer, $ENV{'CONTENT_LENGTH'});
my @pairs = split(/&/,$buffer);
my %FORM;
foreach my $pair (@pairs) {
                my ($name,$value)=split(/=/,$pair);
                $value =~ tr/+/ /;
                $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
                $value =~ s/~!/ ~!/g;
                $FORM{$name} = $value;
         }


#####################################################################
# Pruefen der uebergeben Parameter
#####################################################################

#if ( $FORM{'lecture'} eq "-" or $FORM{'term'} eq "-" ) {
#        print "Content-type:text/html\n\n";
#        print "Error! You did not choose a lecture and/or term<p>";
#        print "<INPUT TYPE=BUTTON VALUE=\"Back\" onClick=\"history.back()\">";
#        exit 0;
#}

if ( $FORM{'lname'} eq "" or $FORM{'fname'} eq "" ) {
        print "Content-type:text/html\n\n";
        print "Error! Your surname and/or your given name is empty<p>";
        print "<INPUT TYPE=BUTTON VALUE=\"Back\" onClick=\"history.back()\">";
        exit 0;

}
if ( $FORM{'dob'} !~ /(\d\d)\.(\d\d)\.(\d{4})/) {
        print "Content-type:text/html\n\n";
        print "Your birthday is not in the format DD.MM.YYYY<p>";
        print "<INPUT TYPE=BUTTON VALUE=\"Back\" onClick=\"history.back()\">";
        exit 0;
}
if ( $FORM{'matr'} !~ /^[0-9]*$/ or $FORM{'matr'} eq "" ) {
        print "Content-type:text/html\n\n";
        print "Your student id is not valid<p>";
        print "<INPUT TYPE=BUTTON VALUE=\"Back\" onClick=\"history.back()\">";
        exit 0;
}
if ( $FORM{'email'} !~ /^([a-zA-Z0-9][a-zA-Z_0-9-\.]*)(\@)([a-zA-Z0-9][a-zA-Z_0-9-\.]*[a-zA-Z0-9])(\.)([a-zA-Z0-9]*)$/) {
        print "Content-type:text/html\n\n";
        print "Your e-mail-address is not valid<p>";
        print "<INPUT TYPE=BUTTON VALUE=\"Back\" onClick=\"history.back()\">";
        exit 0;
}

#####################################################################
# Bilde anhand des Namens der Vorlesung einen verkuertzten Dateinamen
#####################################################################

my $filename = $path.$FORM{'lecture'}."_".$FORM{'term'}.".dat";

###########################################################
# Read internal registration files
###########################################################

#open(SGI,"<$dat") || print $internal_error_msg ;
#my @studg=<SGI>;
#close SGI;
#
#
#my $oldgroup=-1;
#foreach(@studg)
#  {
#    my @tmp=split(/\#/,$_);
#    if ($tmp[0] == $FORM{'matr'} && $tmp[1] eq $FORM{'dob'})
#      {
#        $oldgroup=$tmp[2];
#      }
#  }




#my $time       =       time;
my($sec,$min,$hour,$mday,$mon,$year,$wday, $yday,$isdst)=localtime(time);
#my $time = sprintf "%02d.%02d.%04d %02d:%02d:%02d", $mday,$mon+1,$year+1900,$hour,$min,$sec;
my $time = sprintf "%04d%02d%02d%02d%02d%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec;





###########################################################
# Log registration data
###########################################################
#open(SI,">>$filename") or die "$! $?\n";;
#close SI;
###print $filename;
open(OUT,">>$filename") or die "$!";
print OUT $time.$trenner.$FORM{'matr'}.$trenner.$FORM{'dob'}.$trenner.$FORM{'fname'}.$trenner
         .$FORM{'lname'}.$trenner.$FORM{'gender'}.$trenner.$FORM{'email'}.$trenner.$FORM{'ziel'}.$trenner.$FORM{'fach'}
         .$trenner.$FORM{'prio1'}.$trenner.$FORM{'prio2'}.$trenner.$FORM{'prio3'}."\n";
close OUT;



###########################################################
# info for user
###########################################################
my $html = qq{Content-Type: text/html

<HTML>
 <HEAD>
 <TITLE>$FORM{'lecture'}</TITLE>
</HEAD>
<BODY>
 <H4>Mathematik f&uuml;r Studierende der Biologie und des Lehramtes Chemie im Wintersemester 2016/17</H4>
 <P>
 <p class=inFormHeaderSmall>Sie haben sich mit folgenden Daten registiert:</p>
 <p class=inFormHeader>Vorname: $FORM{'fname'}</p>
 <p class=inFormHeader>Nachname: $FORM{'lname'}</p>
 <p class=inFormHeader>Geburtsdatum: $FORM{'dob'}</p>
 <p class=inFormHeader>Matrikelnummer: $FORM{'matr'}</p>
 <p class=inFormHeader>Studiengang: $FORM{'ziel'} $FORM{'fach'}</p>
 <p class=inFormHeader>Email: $FORM{'email'}</p>

</BODY>
</HTML>
};

print $html;

Last edited: 2016-10-24 13:38:08 +0200 (CEST)

View full thread Perl-CGI zeigt nur Quelltext