#!/usr/bin/perl -w use CGI qw/:standard :netscape/; use CGI::Carp qw/fatalsToBrowser/; use strict; use DBI; ################################################## # adress_2.pl Copyright 1999 Dr. Thomas Wieland # wieland@k-town.de # fuer den Perl-Stammtisch im Rahmen des # 1. Pirmasenser Internetclubs ################################################## ################################################## # Variablendeklaration ################################################## # Methode der Datenuebergabe im Formular GET oder POST # POST, wenn Daten in URL nicht auftauchen sollen my $method = 'GET'; my $DB_DIR = "./addressbook"; my $DB_DSN = "DBI:CSV:f_dir=$DB_DIR"; my $DB_USER = ""; my $DB_PASSWD = ""; my @dbfields = qw/fname lname phone email street plz addr/; my $dbflist = join(', ', @dbfields); print header(), start_html(-BGCOLOR => 'white', -title => 'Adress DB die Zweite'); my $dbh = DBI->connect($DB_DSN, $DB_USER, $DB_PASSWD, { RaiseError => 1 }); if (param('insert')) { &Einfuegen($dbh, map { param($_) } @dbfields); &Ueberschrift; &Suchformular; } elsif (param('delete')) { &Loeschen($dbh); &Ueberschrift; &Suchformular; } elsif (defined param('search')) { &Ueberschrift; &Suchen($dbh); } elsif (param('edit')) { &Ueberschrift; &get_data($dbh); &Eingabeformular; } elsif(param('init')) { &Ueberschrift; &Suchformular; init_db($dbh); } else { &Ueberschrift; &Suchformular; } print end_html(); $dbh->disconnect; ################################################## sub Ueberschrift { ################################################## print center(h1("Adress DB die Zweite")), hr; } ################################################## sub Suchformular { ################################################## print start_form(-method => $method), p(a({href => url() . "?search="}, " Alle Einträge")), p("Suchbegriff: ", textfield(-name => 'lname')), p(" Bitte Nachname oder Vorname oder ". "Anfangsbuchstabe eingeben (Groß und ". "Kleinschreibung beachten)! "), p(submit(-name => 'search', -value => 'Suche starten'), submit(-name => 'edit', -value => 'Neuer Eintrag')), end_form(); } ################################################## sub Eingabeformular { ################################################## print start_form(-method => $method), hidden(-name => 'id'), table({"border" => 1}, TR(td("Vorname:"), td(textfield(-name => 'fname', -size => 40))), TR(td("Nachname:"), td(textfield(-name => 'lname', -size => 40))), TR(td("Telefon:"), td(textfield(-name => 'phone', -size => 40))), TR(td("Email:"), td(textfield(-name => 'email', -size => 40))), TR(td("Straße:"), td(textfield(-name => 'street', -size => 40))), TR(td("PLZ:"), td(textfield(-name => 'plz', -size => 10))), TR(td("Ort:"), td(textfield(-name => 'addr', -size => 40))), ), p(submit(-name => 'insert', -value => 'Speichern'), submit(-name => 'delete', -value => 'Eintrag löschen')), end_form(); } ################################################## sub Einfuegen { ################################################## my ($dbh, $fname, $lname, $phone, $email, $street, $plz, $addr) = @_; # id existiert Eintrag aendern if (param('id')) { my $id = param('id'); my $sql = qq[ UPDATE addressbook SET id='$id', fname='$fname', lname='$lname', phone='$phone', email='$email', street='$street', plz='$plz', addr='$addr' WHERE id = '$id']; $dbh->do($sql); # keine id vorhanden hinzufuegen } else { my $id = time . $$; # Generate ID my $sql = qq[ INSERT INTO addressbook (id, $dbflist) VALUES ('$id', '$fname', '$lname', '$phone', '$email', '$street', '$plz', '$addr')]; $dbh->do($sql); } # alle Parameter param('..') loeschen Delete_all(); } ################################################## sub Loeschen { ################################################## my $dbh = shift; my $id = $dbh->quote(param('id')); my $sql = qq[ DELETE FROM addressbook WHERE id = $id]; $dbh->do($sql); # alle Parameter param('..') loeschen Delete_all(); } ################################################## sub Suchen { ################################################## my ($dbh) = shift; my $where_clause = ""; my ($sth, $row); # Wurde ein Suchparameter eingegeben if (param('lname')) { my $keyword = $dbh->quote(param('lname')."%"); $where_clause = qq[ WHERE fname CLIKE $keyword OR lname CLIKE $keyword]; } my $sql = qq[ SELECT id, $dbflist FROM addressbook $where_clause ORDER BY lname]; $sth = $dbh->prepare($sql); $sth->execute(); print "
\n"; print TR(map { th($_) } qw/Name Telefon Email Straße PLZ Ort/); while ($row = $sth->fetchrow_arrayref) { print "\n", td(a({href => url() . "?id=$row->[0]&edit=1"}, "$row->[2], $row->[1]")); if ($row->[3]) { print td($row->[3]); } else { print td(" ") }; if ($row->[4]) { print td(a({href => "mailto:$row->[4]"}, "$row->[4]")); } else { print td(" ") }; if ($row->[5]) { print td($row->[5]); } else { print td(" ") }; if ($row->[6]) { print td($row->[6]); } else { print td(" ") }; if ($row->[7]) { print td($row->[7]); } else { print td(" ") }; } print "
", hr, a({href => url()}, "Zurück zum Anfang"), "
"; $sth->finish(); # alle Parameter param('..') loeschen Delete_all(); } ################################################## sub get_data { ################################################## my $dbh = shift; my ($key, $row); if (defined(param('id'))) { my $id = param('id'); my $sql = qq[ SELECT id, $dbflist FROM addressbook WHERE id = '$id' ]; my $sth = $dbh->prepare($sql); $sth->execute; while ($row = $sth->fetchrow_hashref) { foreach $key (keys %{$row}) { param(-name => $key, -value => $row->{$key}); } } } } ################################################## sub init_db { ################################################## my $dbh = shift; if(! -d $DB_DIR) { mkdir($DB_DIR, 0755) || die "Cannot create dir $DB_DIR"; } my $sql=qq[CREATE TABLE addressbook ( id char(20), fname char(40), lname char(40), phone char(40), email char(40), street char(40), plz char(10), addr char(100) )]; $dbh->do($sql); }