#! /usr/bin/perl

use strict;
use warnings;
use DBI;

my $driver = 'mysql';
my $database = 'yoda';
my $hostname = 'localhost';
my $port = 3306;
my $user = 'yoda';
my $password = 'geheim';

print "Content-type: text/html

<html>
 <head>
  <title>
   SQL-Demo
  </title>
 </head>
 <body>
  <h1>SQL-Demo</h1>
  <form action=\"sqldemo.pl\" method=\"POST\">
   <textarea name=\"abfrage\" wrap=\"OFF\" rows=\"5\" cols=\"30\"></textarea>
   <input name=\"Ausf&uuml;hren\" type=\"submit\" value=\"Ausf&uuml;hren\">
  </form>
";

# Spalte Uebergabeparameter auf:
my $parameter;
if ($ENV{'REQUEST_METHOD'} eq 'POST')
{
    read (STDIN, $parameter, $ENV{'CONTENT_LENGTH'});
}
else
{
    $parameter = $ENV{'QUERY_STRING'};
}

my %uebergabe;
for my $paar (split (/&/, $parameter))
{
    (my $name, my $wert) = split (/=/, $paar);
    $wert =~ tr/+/ /;
    $wert =~ s/%(..)/pack ("C", hex ($1))/eg;
    $uebergabe{$name} = $wert;
}
my $abfrage = $uebergabe{'abfrage'};

if ($abfrage eq '')
{
    print ' </body>
</html>';
    exit;
}

print "<p>Abfrage: $abfrage</p>\n";

my $fehler;
my $connect_params = "DBI:$driver:database=$database;host=$hostname;port=$port";
my $dbh = DBI -> connect ($connect_params, $user, $password);
if ($fehler = $dbh -> err)
{
  print "Verbindungsfehler: $fehler\n";
  exit;
}

my $sth = $dbh -> prepare ($abfrage);
$sth -> execute;
if ($fehler = $sth -> err)
{
  print "Ausfuehrungsfehler: $fehler\n";
  exit;
}

print "  <table border=1>\n";
my @spaltennamen;
while (my $zeilenreferenz = $sth -> fetchrow_hashref)
{
    my $spalte;
    if (!@spaltennamen)
    {
	@spaltennamen = keys (%{$zeilenreferenz});
	print "    <tr>\n";
	foreach $spalte (@spaltennamen)
	{
	    print '     <td>', $spalte, "     </td>\n";
	}
	print "    <tr>\n";
    }
    
    print "    <tr>\n";
    foreach $spalte (@spaltennamen)
    {
	print '     <td>', $zeilenreferenz -> {$spalte}, "     </td>\n";
    }
    print "    </tr>\n";
}

$sth -> finish;
$dbh -> disconnect;

print "
  </table>
 </body>
</html>
";

