#!/usr/bin/perl -w # # get geometry from mysql db and create svg for selected countries # klaus.foerster@uibk.ac.at, v0.1b ######################################################################## use DBI; use CGI; use strict; my $q = new CGI; my (@domains, $geom); my $width = "480"; my $height = "360"; # check for query_string if (!$q->param('query')) { print $q->header(); print "Please select at least one country :(\n"; exit (0); } # parse query @_ = split(/_/, $q->param('query')); for my $dom (@_) { $dom =~ m/^[a-z]{2}$/ or next; push @domains, "countrygeom.tld='$dom'"; } if (!@domains) { print $q->header(); print "Sorry, incorrect query string :(\n"; exit (0); } # generate sql query, connect to database and execute query my $sql = qq{ select countrygeom.tld, countrygeom.geom, countrynames.cnameen }; $sql .= qq{ from countrygeom, countrynames }; $sql .= qq{ where countrygeom.tld = countrynames.tld and (}; $sql .= join " or ", @domains; $sql .= ")"; my $dbh = DBI->connect("dbi:mysql:database=XXX;host=XXX","XXX","XXX"); if ( !defined $dbh ) { local $SIG{__DIE__} = sub { print STDERR "[" .scalar localtime (time) . "] [error] [client $ENV{REMOTE_HOST}] "; print STDERR $DBI::errstr . " "; print $q->header(); print $DBI::errstr; print "

Sorry. Database could not be reached. Please try again later
\n"; }; die; } my $sth = $dbh->prepare($sql); $sth->execute || execute_failed($DBI::errstr); # get results and create svg-code while (my @row = $sth->fetchrow) { $geom .= qq*\n*; } # anything found? $geom or execute_failed("no geometry found for your query"); # write svg-code print $q->header("image/svg+xml"); print qq* This is a country selector $geom Names go here ... *; # error handling ... sub execute_failed { print $q->header(); my $error = shift; print "Error: $error
\n"; }