#!/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 "