#!/usr/bin/perl -w
use HTML::Template;
use CGI::Simple;
use DBI;
use Data::Dumper;
use CGI::Carp qw(fatalsToBrowser);
use Encode qw( encode decode );
use utf8;
####################### A1 BEGIN ###############################################
#Pragma, welches besagt, dass alle Dateihandles per default auf utf8 eingestellt
#sind und transparent encoded / decoded wird
use open ':encoding(utf8)';
####################### A1 END ###############################################
#Nicht funktionierende Variante (aus Beispielen aus dem Netz:
#
####################### A2 BEGIN #####################################
#Unterschied zu meiner Anweisung nicht ergründet):
#use open ':encoding(UTF-8)';
#use open ':std';
####################### A2 END #####################################
#
####################### A3 BEGIN #####################################
#Einem bereits geöffneten Kanal kann nachträglich einen Konverter zuweisen
#binmode(STDOUT, ":encoding(UTF-8)");
####################### A3 END #####################################
####################### B1 BEGIN ###############################################
my $dbh = DBI->connect(
'DBI:mysql:database=testdb'
. ';host=localhost',
'root',
'womex',
{ RaiseError => 1, Print_warn => 1, Warn => 1}
) or die "Can't connect to database!";
####################### B1 END ###############################################
#Nicht funktionierende Variante:
#
####################### B2 BEGIN ###############################################
#my $dbh = DBI->connect(
# 'DBI:mysql:database=testdb'
# . ';host=localhost',
# 'root',
# 'womex',
# { RaiseError => 1, Print_warn => 1, Warn => 1, mysql_enable_utf8 => 1}
# ) or die "Can't connect to database!";
####################### B2 END ###############################################
#
#
#
#
#
####### B3 BEGIN ==> B3 == Kombination (B1,B1+) == B2 #############
#
# ####### B1+ BEGIN ############################################
# #Alternative zur (ausgeblendeten) Anweisung von oben:
# #$dbh->{'mysql_enable_utf8'} = 1;
# ####### B1+ END ##############################################
#
####### B3 END ==> B3 == Kombination (B1,B1+) == B2 #############
#Sorgt dafür das Daten in und aus der Datenbank korrekt als UTF-8 gehandelt werden.
$dbh->do(qq{SET NAMES 'utf8';});
#cgi Objekt für Zugriff auf per GET oder POST erhaltene Formulavariablen
my $cgi = new CGI::Simple;
#Werte aller Formularelemente in Form eines Hashes
my %cgiHash = $cgi->Vars();
# open the html template
my $template = HTML::Template->new( filename => 'test.tmpl', utf8 => 1 );
$template->param( spalte => $cgiHash{'input'} );
$template->param( spalte2 => encode('utf-8','5 mal Euro: €€€€€') );
#SQl Statement, welches die Daten der Pflichfelder aus dem Formular speichern läßt.
my $sth = $dbh->prepare(
qq{
INSERT INTO utftbl
SET
spalte = ?
});
#Durchführen des inserts in die Tabelle mit den Pflichtdaten
unless (
$sth->execute(
$cgiHash{'input'}
)
) {
warn sprintf( "[Error]: Reason: [%s].", $dbh->errstr );
}
my ($return_value) = $dbh->last_insert_id( undef, undef, 'utftbl', 'id' );
$sth = $dbh->prepare(
qq{
SELECT spalte from utftbl where id=$return_value
});
#Durchführen des selects in die Tabelle mit den Pflichtdaten
unless (
$sth->execute()
) {
warn sprintf( "[Error]: Reason: [%s].", $dbh->errstr );
}
my @arr = $sth->fetchrow_array();
#Wenn Datenbank String als utf-8 kodierter String eingelesen wurde und
#wir nichts an diesem verändert haben, dann können wird diesen direkt ohne
#Dekodierung/Enkodierung direkt rausschreiben, falls die Ausgabe auch in utf-8 deklariert ist.
$template->param( spalte3 => $arr[0] );
####################### C1 BEGIN ###############################################
#Falls wir mit dem utf-8 kodiertem String irgendetwas machen (z.B. Konkatination), dann
#müssen wir diesen Dekodieren/Enkodieren
$template->param( spalte4 => encode('utf-8', "Präfix€uro:" . decode('utf-8',$arr[0])) );
####################### C1 END #################################################
#Nicht funktionierende Varianten:
#
####################### C2 BEGIN ###############################################
#$template->param( spalte4 => encode('utf-8', "Präfix€uro:" . $arr[0]) );
####################### C2 END ###############################################
#
#
#
####################### C3 BEGIN ###############################################
#$template->param( spalte4 => "PräfixEuro:" . $arr[0] );
####################### C3 END ###############################################
print( "Content-Type: text/html; charset=UTF-8\n\n", $template->output );