#!/usr/bin/perl -w
use strict;
use CGI qw( :standard );
use DBI;

## Detta program demonstrerar mer avancerade finesser man kan försöka sig på
## Kan betraktas som överkurs...

{
    print header;
    my $dbh = &connect;
    my $state = param('state') || "";
    if( $state eq 'create_res' )
    {
	&create_res( $dbh );
    }
    else
    {
	&create_form;
    }
    
    $dbh->disconnect;
    exit;
}
#########################

sub connect
{
    my $dbname = 'jonas'; my $user = 'jonas'; my $passwd = 'jonas';
    return DBI->connect("dbi:Pg:dbname=$dbname", $user, $passwd) or die;
}

sub create_form
{
    my( $message ) = @_;
    print( start_html('Create person'), 
	   h1('Create person'), "\n",
	   p( $message ),
	   startform,
	   p('Förnamn',   textfield('p_fnamn') ),"\n",
	   p('Efternamn', textfield('p_enamn') ),"\n",
	   p('Ålder',     textfield('p_alder') ),"\n",
	   p('Gillar',    textfield('p_gillar')),"\n",
	   p( submit ),"\n",
	   hidden( -name  => 'state',
		   -value => 'create_res',
		   -overide => 1      # Lägg INTE in det gamla värdet
		   ),
	   endform, end_html
	   );
}

sub create_res
{
    my( $dbh ) = @_;

    eval
    {
	my @fields = map /^p_(.*)/, grep /^p_/, param;

	param('p_fnamn')  or die "Du måste fylla i förnamn\n";
	param('p_enamn')  or die "Du måste fylla i efternamn\n";
	param('p_alder')  or die "Och hur gammal är du?\n";
	param('p_gillar') or param('p_gillar', 'ingenting');

	my $keys   = join ", ", @fields;
	my $values = join ", ", map $dbh->quote(param "p_$_"), @fields;
	$dbh->do( "insert into person ( $keys ) values ( $values )" )
	    or die $dbh->errstr;
    } 
    or do
    {
	&create_form( $@ );
	exit;
    };


    print( start_html('Create person'), 
	   h1('Create person'),"\n",
	   p( 'Done!' ),
	   p( a( {href=>'.'},"Back") ),
	   end_html
	   );
}

