1
2
3
4
<form action="/otrs/comments.pl" method="post">
Name: <input size=40 maxlength=40 name="AnwenderName"><br>
<p>Text:<br><textarea rows="5" cols="50" name="Kommentartext"></textarea></p>
<p><input type="submit" value="Absenden"></p>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
use strict; use CGI::Carp qw(fatalsToBrowser); read(STDIN, my $Daten, $ENV{'CONTENT_LENGTH'}); my @Formularfelder = split(/&/, $Daten); my ($Feld, $Name, $Wert); my %Formular; foreach $Feld (@Formularfelder) { (my $Name, my $Wert) = split(/=/, $Feld); $Wert =~ tr/+/ /; $Wert =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $Wert =~ s/</</g; $Wert =~ s/>/>/g; $Formular{$Name} = $Wert; } print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n"; print "<html><head><title>CGI-Feedback</title></head>\n"; print "<body><h1>CGI-Feedback vom Programm <i>comments.pl</i></h1>\n"; print "<p><b>Name:</b> $Formular{AnwenderName}</p>\n"; print "<p><b>Kommentartext:</b> $Formular{Kommentartext}</p>\n"; print "</body></html>\n";
Quoteread(STDIN, my $Daten, $ENV{'CONTENT_LENGTH'});
1 2 3 4 5 6 7
use CGI; # baue eine Kontrollstruktur, wo prüft, ob eine Eingabe vorliegt # und dann kriegst Du die Eingaben so: my $name = CGI::param('AnwenderName'); my $comment = CGI::param('Kommentartext');
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
use strict; use warnings; use DBI; my $DBH = dbh() or die $@; my $story = qq(Otto und Franz gehen mit dem Hund Foo spazieren und treffen Boo); # Ohne Fehlerbehandlung $DBH->do("INSERT INTO test(text)VALUES(?)", {}, $story); # Mit Fehlerbehandlung eval{ $DBH->do("INSERT INTO test(text)VALUES(?)", {}, $story); }; # Frage $@ ab ob es einen Fehler gab. sub dbh{ my %cfg = ( base => 'myweb', host => 'localhost', port => 3306, user => '', pass => '', @_); return eval{ DBI->connect("DBI:mysql:$cfg{base}:$cfg{host}:$cfg{port}", $cfg{user}, $cfg{pass}, {RaiseError => 1, PrintError => 0} ); }; }
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
#! C:\xampp\perl\bin\perl.exe #use strict; use CGI; #use CGI qw/-no_debug :all/; use CGI::Carp qw(fatalsToBrowser); #my $cgi = new CGI; # baue eine Kontrollstruktur, wo prüft, ob eine Eingabe vorliegt # und dann kriegst Du die Eingaben so: my $comment = CGI::param('Kommentartext'); =Bei einer Eingabe in die html Textarea bekomme ich: Serverfehler! Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist. Fehlermeldung: Premature end of script headers: comments.pl Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber. Error 500 localhost 06/17/12 20:45:10 Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1 ----------------------- Bei keiner Eingabe in Textarea startet sub Ausgabe =cut #print 'Kommentartext '.$comment ; # Fehlerbehandlung $fehlermeldung = "" ; $fehler_gefunden = "" ; # Hier wird nur abgefragt ob denn überhaupt etwas in dem Formularfeld steht $errormeldung = "<li>Das Feld Vorname wurde nicht ausgefüllt.\n" ; if ( $comment eq "") { $fehlermeldung = $fehlermeldung.$errormeldung ; $fehler_gefunden = 1 ; } # Wenn Fehler - dann aufruf der Subroutine if ($fehler_gefunden) { & Ausgabe(); } # Fehlerausgabe sub Ausgabe { print <<EOF; "Content-type: text/html\n\n"; "<HTML><HEAD><TITLE>FEHLER</TITLE></HEAD>\n"; "<BODY><font face=\"Verdana, Arial\" size=\"2\">\n"; "Beim ausfüllen haben Sie folgendes vergessen:<ol> <b>$fehlermeldung</b>\n"; "</ol><br><br>\n"; "Bitte gehen Sie zurück und versuchen es erneut!\n"; "</font></BODY></HTML>\n"; EOF exit; }
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
#!/usr/bin/perl use strict; use warnings; use CGI; # Alle VARs in der globalen Hash-Referenz $main my $main = { CGI => new CGI, eingabe => '', # Wert vom Eingabefeld mesg => '', # Hinweise für den Anwender }; print "Content-Type: text/html; Charset=UTF-8\n\n"; print out(); exit; ######################################## Funktionen ####################### # Parameter Kontrolle und dann die Ausgabe sub out{ if(param()){ control(); } else{ browse(); } return form(); } # Keine Parameter sub browse{ $main->{mesg} = 'Bitte was eingeben'; } # Parameter sub control{ if(param('klick') || param('eingabe')){ $main->{eingabe} = param('eingabe'); $main->{mesg} = "Es wurde was eingegeben ($main->{eingabe}) oder geklickt"; # hier kommt der Code # zum Eintragen in die DB } else{ $main->{mesg} = 'Unbekannter Parameter'; } } # Formular erzeugen sub form{ return qq( <p>Mesg: $main->{mesg}</p> <form action="$ENV{SCRIPT_NAME}"> <input name="eingabe" value="$main->{eingabe}"> <input type="submit" name="klick"> </form> <p> <a href="$ENV{SCRIPT_NAME}">Seite neu Laden ohne Parameter</a> </p> ); } # Delegate CGI::param Method sub param{ return $main->{CGI}->param(@_); }